如何动态调用其他FORM中的方法或过程(0)

  • 主题发起人 主题发起人 nnyy66
  • 开始时间 开始时间
N

nnyy66

Unregistered / Unconfirmed
GUEST, unregistred user!
我有个FORM1 想通过动态调用的方式 调用其他的FORM中的方法,FORM的名称我存在公共变量中 在网上找了许久都只有动态打开FORM的方法。PS:怕老是不结贴 所以给分在另一贴中。 请见谅分值100 不够在加
 
创建一个窗体对象,然后调用它的公用方法即可
 
能不能给个具体例子啊?
 
麻烦说明白一些,何为动态调用?
 
例如有form1/form2/form3/form4这几个FORM每个FORM中都有 procedure tempshow;然后我需要在frm_main中 用 vartemp_form:Tform; temp_form.tempshow;来调用在每个FORM中 把FORM赋值给temp_form例如在FORM1中temp_form := Form1例如在FORM2中temp_form := Form2这样
 
确实没明白你的高深想法[:)]
 
如果想实现用一个变量调用不同方法,可以利用继承的多态来实现,你先从声明一个TSTUBFORM=TFORMpublic procedure tempshow;virtual;END;然后 将 你的FORM1,2,3继承自TSTUBFORMTFORM1=CLASS(TSTUBFORM)...TFORM1=CLASS(TSTUBFORM)...TFORM1=CLASS(TSTUBFORM)...然后 在公共过程中声明变量 temp_form:TSTUBFORM然后就可以实现temp_form赋不同的值,就调用相应FORM的TEMPSHOW 过程的目的
 
这个我想过 但目前的项目上 FORM已经都做好了 再重新弄个公共的已经不可能的了。。
 
都在做项目了居然这个都不知道~~哎用一个基类 ,一个public 方法 ,直接calleg:type TFrmDemo = class(TForm) ... public function calcdemo(a,b:integer):integer;....procedure TFrmDemo.CalcDemo(a,b:integer):integer;begin result := a * b;end;//how to call...var frm1 :TFrmDemo;begin frm1 := TFrmDemo.create(application); showmessage(inttostr( frm1.calcDemo(1,2) ));//不需要show /showmodal 出来, 要也可以 ,下面 frm1.show;
 
如果不用继承,那就这样吧type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } published { Public declarations } procedure func1(); end; TC1=class published procedure func1(); end; TC2=class published procedure func1(); end;var Form1: TForm1;implementation{$R *.dfm}uses Types, TypInfo;type TCallFunc=procedure() of object;var c1:TC1; c2:TC2; c:TObject;procedure DynamicCall(obj:TObject;procName:string);var proc:TMethod;begin proc.Data:=obj; proc.Code:=obj.MethodAddress('func1'); if proc.Code=nil then Exit; TCallFunc(proc)();end;procedure TForm1.FormCreate(Sender: TObject);var proc:TMethod;begin c1:=tc1.Create; c2:=tc2.Create; DynamicCall(c1,'func1'); DynamicCall(c2,'func1'); DynamicCall(self,'func1');end;{ TC1 }procedure TC1.func1;begin ShowMessage('tc1.func1');end;{ TC2 }procedure TC2.func1;begin ShowMessage('tc2.func1');end;procedure TForm1.func1;begin ShowMessage('tform1.func1');end;end.注意,根据你的实际情况把TCallFunc进行调整,,要动态调用的方法必须声明为published.否则无效.
 
谢谢 louemusic, 虽然你这个和我的想法不太一样 不过原理是一致的 又增长知识了 嘿嘿到我另一个贴来领分吧
 
louemusic 到 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3972010领分
 
后退
顶部