【发布时间】:2009-10-23 22:35:07
【问题描述】:
在使用我正在进行的基于 TFrames 的组件集项目时,我遇到了各种情况,我想在运行时将 TFrame 的组件之一(通常是非可视的)替换为在运行时动态生成的组件。
我想我可能已经找到了我的直接问题here 的答案,但是在我自己的挖掘和实验之前,我很清楚我有很多东西要了解 Delphi 如何处理对象引用,特别是关于窗体/框架,以及(通常)是对象引用而不是非指针值的类属性。
这里有一个实验的具体例子:
(在具有三个 TButton 的表单上)
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;
不会用创建的按钮替换 Button2,但会在表单上同时显示。 ShowMessage 结果表明 Button2 的标题仍然 = "Button2"
我发现自己在问这样的问题,“这种‘不可替换’是表单独有的,还是其他类也是如此?”等等。简而言之,我又发现了另一个我自己无知的天坑。 ;-) 我发现在使用实例/对象引用/解除引用/类定义/类属性等时,事情的行为通常与他们期望的完全一样,但在其他时候,根本没有,甚至没有关闭。
很明显,我需要研究这个领域。与其在围绕这个主题的愚蠢问题之后发布愚蠢的问题,我想我会问这个:
什么是真正很好的参考或教程,可以更好地掌握细微区别:Delphi 如何处理这些事情?
提前感谢您的帮助!
【问题讨论】:
-
你想达到什么目的?像所有语言和环境一样,Delphi 有自己的做事方式。在 Delphi 中创建动态表单真的很容易,所以如果你解释它是什么你试图实现它们可能会有所帮助