我如何将RegisterClass()用于单元

时间:2012-08-30 18:09:52

标签: delphi system delphi-7

来自anwser How to eliminate variables...的基础我获得并接受它,当我拥有所有这些组件并且从主窗体中执行类似button1.click的操作时效果很好......

但我用来制作单位的动作......所以

当我点击一个按钮我很棒的程序DoMaths(发件人:TObject);

procedure Tform1.DoMaths(Sender: TObject);
  begin
    if TButton1(Sender).hint := 'Make the standard Package' then
      do_Maths_standard_package;
  end;

do_Maths_standard_package位于ComplexMaths单元中。

是do_Maths_standard_package表单单元ComplexMaths它调用Form1的一些组件...就像Form1.label1等...

因此,当我调用RegisterClass(TLabel)并从类型中删除Tlabel时,它会发出错误,无法找到Label1 ...

请有人帮助我,所以不要从头开始做洞程序......

谢谢..

2 个答案:

答案 0 :(得分:0)

您可以像这样引用您的组件:

TLabel(Form1.FindComponent('Label1')).Caption := '...';
TCheckBox(Form1.FindComponent('CheckBox12')).Checked := False;

但这真的很痛苦......

答案 1 :(得分:0)

我认为你有两种选择。

1)您可以为每个组件分配唯一的数字ID。 并将其保存到.Tag属性中。 就像你用来生成和绑定.HelpContext属性中的ID一样。

然后,要按编号获取控件,您将枚举Form.Controls并获取具有正确Tag值的那个。

问题是在PAS文件和DFM文件中有两个单独的ID列表同步。迷雾很难被注意到。特别是因为你在DFM中没有常数但只有“魔术数字”。

2)设置.Name属性并按名称使用iMan Biglari的配方 - FindComponent。 问题是你是否可以拥有.Name而不是变量。因为没有人回答 - 只是试着看。 根据我的经验 - 使用Delphi 5,希望D7大致相同 - 你可以删除变量。

  • 如果你做了错误的变量声明,那么Delphi编辑会注意并要求纠正它。
  • 如果你有没有DFM对象的变量,Delphi会注意到它并要求删除它。
  • 但是如果有没有相应变量的DFM对象,那么Delphi编辑器就不知道了。也许它认为对象是继承的或其他什么。 但如果你根本没有声明,那就不介意了。

但是,由于您删除了名称,因此出于某种原因看起来不可能。


在这两种情况下,如果某些过程对某些控件进行了大量访问,则必须缓存值。甚至可能跨过程序。实际上,yu将至少为大多数使用的控件手动恢复这些变量。