使用我正在进行的基于tframe s的组件集项目,我遇到了各种各样的实例,我希望在运行时用在运行时动态生成的组件替换tframe的一个组件(通常是非可视的)。
我想我可能已经找到了我眼前问题的答案
here
但是在我自己的研究和实验中,很明显我有很多东西要学习Delphi是如何处理对象引用的,特别是关于窗体/框架,以及(一般)类属性,它们是对象引用而不是非指针值。
下面是一个具体的实验示例:
(在有三个按钮的窗体上)
procedure TForm1.Button3Click(Sender: TObject);
var
MyButton : TButton;
begin
MyButton := TButton.Create(Self);
MyButton.Caption := 'New Button';
MyButton.Parent := Form1;
Form1.Button2 := MyButton;
Form1.Repaint;
ShowMessage('Button2 caption = ' + Form1.Button2.Caption);
end;
不会将按钮2替换为已创建的按钮,但会在窗体上同时显示这两个按钮。ShowMessage结果指示button2的caption still=“button2”
我发现自己在问这样的问题:“这是表单独有的‘不可替换’吗,还是其他类也一样?”总之,我又发现了自己无知的另一个天坑。;-)我发现,在处理实例/对象引用/取消划分/类定义/类属性等时,通常情况下,事物的行为与它们期望的完全一样,但其他时候,根本不是这样,甚至不接近。
很明显,我需要对这个领域进行研究。我不想把愚蠢的问题一个接一个地贴在这个主题上,而是想问:
什么是
真的?
很好的参考或教程,以便更好地理解微妙的区别:Delphi是如何处理这些事情的?
感谢您的帮助!