能否用字符串代替控件名称?例如:a:="edit1",a.text:="hello";(50分)

  • 主题发起人 主题发起人 Liyue
  • 开始时间 开始时间
delphi 还没提供此功能
不过你可以用
edit1.name:='nam';
nam.text:=???
 
乱说:
使用对象指针,a:^Tedit
我想可以实现,不过不是把string变成某种控件
而是已分配了此控件,只不过用string来指定此控件
在想想
 
1,不要把数据库原语拿来跟pascal比较
2,尽可能忘掉数据库编程时学来的那些技巧
3,pascal实现宏代换也很容易
4,delphi的VCL也提供了一个符号代换的资源:TAG
5,delphi中的宏代换可以简单地逆向实现:
case AComponent.Tag of
Id1: ...;
Id2: ...;
else
...;
end;
 
字符串替换控件的方法以上shangcm和hpretty讲得都可以.不过在实际应用中用处并不大.
代替函数也不是不行.只是需要变通.把你要使用的所有函数用一个dll封装,然后用LoadLibrary
装入内存,用GetProcAddress来取地址运行.基本上Fox能做的事Delphi都能做.只是没有那么
方便罢了.
面向对象肯定比面向过程优越.你还需要转这个大弯.你转过这个弯就会发现你的思路稍有点
问题.现在都到COM时代了,就别再追究什么函数或字符串了.
 
行,只要把A定义为TEDIT类型
 
得了,用简单的替换在delphi里肯定是不行的。
要在运行时实现字符串对应控件或函数(如在InputEdit(TEdit)中输入'lable1'或'sin(x)'),只能变相的
用FindComponent,Components.Name=InputdEdit.Text,...的方法。
而对函数或过程,要用手工代码识别,做编译程序完成的工作。
 
干吗舍近求远呢??
 
没这个必要。
 
没事找事做!
 
可以这样,
a:='edit1';
TEdit(FindComponent(a)).text:='asdfasdf';
 
在类已注册的情况下
是可以用字符串来定位的
 
有必要研究吗?
 
程云的方法挺简单。
其实,这个问题的提出没有太多的实用价值。
对不起!个人认为。
 
这个只在有大量动态生成的对象时,
如需要引用这些对象,
哪就只有这样作了,
一般是用不着的。
 
你最好加个判断:
if (FindComponent('edit'+inttostr(i)) is TEdit) then

FindComponent('edit'+inttostr(i)).text:='asdfasdf';
这样在动态的时候保险多啦,要不就会出错。。。。。
 
多人接受答案了。
 
后退
顶部