Delphi 如何将RegisterClass()转换为单位

Delphi 如何将RegisterClass()转换为单位,delphi,system,delphi-7,Delphi,System,Delphi 7,我从anwser获得并接受了它,当我拥有所有这些组件并使操作像按钮一样时,它工作得非常好1。从主窗体单击 但我用单位来做动作。。。所以 当我点击一个按钮时,我看到一个程序域(发送者:TObject) do_Math_standard_包位于unit ComplexMaths中 是程序做数学,标准,包形式,单元复杂度,它调用一些组件形式,形式1。。。如Form1.label1等 因此,当我调用RegisterClass(TLabel)并从类型中删除TLabel时,它会给出一个错误,即找不到Labe

我从anwser获得并接受了它,当我拥有所有这些组件并使操作像按钮一样时,它工作得非常好1。从主窗体单击

但我用单位来做动作。。。所以

当我点击一个按钮时,我看到一个程序域(发送者:TObject)

do_Math_standard_包位于unit ComplexMaths中

是程序做数学,标准,包形式,单元复杂度,它调用一些组件形式,形式1。。。如Form1.label1等

因此,当我调用RegisterClass(TLabel)并从类型中删除TLabel时,它会给出一个错误,即找不到Label1

请有人能帮我从一开始就不要做打孔程序


谢谢。

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

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

但这真的很痛苦…

我想你有两个选择

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

然后,要按编号获取控件,您需要枚举Form.Controls并获取具有适当标记值的控件

问题是在PAS文件和DFM文件中有两个独立的ID列表是同步的。打字错误很难引起注意。特别是因为DFM中没有常数,只有“幻数”

2) Set.Name属性并按名称使用iMan Biglari的recipe-FindComponent。 问题是您是否可以使用.Name而不是variable。既然没有人回答,那就试试看。 根据我的经验-使用Delphi5,希望D7基本相同-您可以删除变量

  • 若您错误地声明了变量,那个么Delphi编辑器会注意到并要求更正它
  • 如果您有一个没有DFM对象的变量,Delphi会注意到它并要求删除它
  • 但是,如果存在没有相应变量的DFM对象,那么Delphi编辑器是不受影响的。也许它认为这个对象是继承的或者其他什么。 但如果你根本不申报,它也不介意
但是,由于您删除了名称,因此出于某种原因,您似乎无法删除这些名称



在这两种情况下,如果某个过程对某个控件进行大量访问,则必须缓存值。甚至在整个过程中。实际上,yu会手动恢复这些变量,至少对于大多数使用过的控件是如此。

这就是我在上一个问题中说不要做你想做的事情的原因之一(请阅读我的答案和我在其他答案上发表的评论)Ken我读了你的anwser,但它不适合我的程序bcs必须做很多更改,而我接受的mcottle的anwser很好,但有上面的问题,我请程序员帮助我,如果有anwser。。。谢谢你我想说的是,如果你删除名字来删除它们(就像你在上一个问题中所做的那样),那么你就不能按名字使用它们(你删除了它)。这就是我说不应该首先移除它们的原因之一。:-)如果你从一开始就做错了,后来又不管用。。。你不接受我对另一个问题的回答对我来说无关紧要;重要的是,你一开始就走错了方向,我建议你不要这样做。我现在明白你的意思了。对不起,在bcs之前我不懂。我的英语不太好。。。所以没有简单的方法可以做到这一点。。。嗯,这让我关心我的程序的孔结构。。。非常感谢你,肯,这就是你对抗系统时发生的事情。不要反抗体制。事实上,他不能如果您阅读了上一个问题,他删除了组件的名称,因此
FindComponent
无法返回任何内容(它将找不到与
Label1
匹配的内容)。阅读我对上述问题的评论。我想,
Name
可能是
RC\u数据的一部分,并且保存在
DFM
文件中。它们不在DFM文件中,因为他删除了名称。请帮自己一个忙:当文章提到另一个问题以获取基本信息时,请阅读另一个问题。:-)这里只讨论了这些。@Ken是否可以删除方法变量,但仍有一个组件在DFM中命名?在Delphi 5中,我做了如下事情that@Arioch'否。如果在对象检查器中删除组件名称,它不会流式传输到DFM(它不知道在加载时将其恢复到哪个变量)。请阅读另一个链接问题。
TLabel(Form1.FindComponent('Label1')).Caption := '...';
TCheckBox(Form1.FindComponent('CheckBox12')).Checked := False;