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

  • 主题发起人 主题发起人 Liyue
  • 开始时间 开始时间
L

Liyue

Unregistered / Unconfirmed
GUEST, unregistred user!
能否用字符串代替控件或函数名?
例如:
a:=‘edit1’;
a.text:='hello';
又例:
q:='inttostr';
edit1.text:=q(1234);
谢谢!!!
 
省省吧
好多人问过了
不行
从编译原理的角度讲 也是行不通的
除非象C那样编译前替换
可惜Delphi没这种机制
即使是C ,最好也不要用宏替换
我觉得那不是什么好特性
用const比较好
 
var
a : TEdit;
begin
a := Edit1;
a.Text := 'OK!';
end;
 

edit1.name:=a;
a.text:='hello!';
这样不知道行不行
 
edit1.name:=a;
a.text:='hello!';
不行
a 还没有初始化呢

 
var a: LongInt;
a := LongInt(Edit1);
TEdit(a) := 'Hello';
这里a是长整形,你自己变通一下就可以实现数组功能了。这里可以将a的值
保存在Edit.Tag里,
TEdit(Sender.Tag).Text := 'This is a colorful world, big big world';
 
<b>用字符串代替控件名</b>当然可以,为什么不行?
用FindComponent就可以了,如下:
var
SomeEdit:TEdit;
a:String;
begin
......
a:='edit1';
SomeEdit:=FindComponent(a) as TEdit;
SomeEdit.Text:='Hello';
......
end;

至于<b>用字符串代替函数(或过程)名</b>,我也不知道,你可以搜索一下嘛!
 
1. 看内存流说明范例
2. ASM 的 Call
 
很多老兄可能都是FOXXXXXXXXXXXXXXXXXXXXX用多了,把宏语言和DE这种正式的编译型
语言混在一起了。
 
var
a ,b,c: TEdit;
begin
a := Edit1;
b := Edit2;
c := Edit3;
end;



 
先将a申明为指针,再a:=@edit1,这样之后,a^.text:='hello',行不?
 
没有必要这样用.
 
可以考虑用指针.当然用FindComponent也行.
对于下面的那种可以自己编一个函数,调用将函数名和参数至于其中.然后转化,应该可以的.
 
如果你真的想这样做的话,我提供一个做法(虽然很笨)
for i := 0 to frm.ComponentCount -1do
begin
if Componets.name = 'edit1' then
begin
//do what you want todo
end
end
后面的我就只有提示了,定义一个函数指针,然后当你想调用哪个函数的时候让这个函数指针
指向该函数!
 
我劝你不要这要干,你可能刚刚从FOX转过来用DELPHI.我也有这种历史,需要时间改变的.
 
我认为“宏代换”是数据库应用的非常重要的指标,尤其是财务数据的核算。
本来在FOX里很容易的事,在DELPHI里做却很费周折。
 
Delphi是编译型语言!
 
除非'a'是tedit型,否则难!
 
不行的!!
 
后退
顶部