急!可不可以通過改變一個字符串變量,通過它的值控制不同的Form?(200分)

  • 主题发起人 kingbenz
  • 开始时间
K

kingbenz

Unregistered / Unconfirmed
GUEST, unregistred user!
急!可不可以通過改變一個字符串變量,通過它的值控制不同的Form?
 
应该是可以的,你说的不是很明确。
我理解的是这样:
procedure TForm1.FormCreate(Sender: TObject);
var
S: string;
begin
S := Name;
if Application.FindComponent(S) <> nil then
ShowMessage('');
end;
 
假设你已经创建了两个窗口,名字为 Form1, Form2
var
FormStr: string;
i: Integer;
begin
for i := 1 to 2do

TForm(Application.FindComponent('Form' + IntToStr(i))).Caption := IntToStr(i);
end;
 
兩位基本明白我的意思,我的難題是如果有很多FORM需要動態創建,要創建的FORM名保存在
變量S處,程序該如果實現?
 
With TForm.create(Application)do
Name:=S;
 
我說的FORM是類型不同的FORM。
 
如果是不同类型的Form,或者其内容比较复杂时,用ReadComponent或ReadComponentRes可以
从资源文件(*.dfm或其它的Delphi/CB窗体文件格式的文件)中读出窗体。注意:目标窗体
最好是空的,不能有任何与资源文件中的控件同名的控件。这样你就可以先动态分创建一个
空的窗体,然后通过上面那两个函数其中的一个,将资源文件中的内容读出来,这时这个动
态创建的窗体上显示的就是你事先编辑好的内容了。
 
可不可以簡單一點,就是FORM名保存在變量處,現要根據變量動態創建FORM,當然每個FORM
是不同的。
 
用RegisterClass与FindClass函数就可以实现你的要求
在每个Form的初始化处RegisterClass(如RegisterClass(TFormTest))
然后调用的时候这样用
var
AFormClass: string;
//这就是你说的字符串
begin
AFormClass := 'TFormTest';
//你可以在此改变不同的类名
with TForm(FindClass(AFormClass)).Create(Self)do
try
ShowModal;
finally
Release;
end;
end;
 
思路:
1,生成FORM时在一个全局模块中注册自己的HANDLE 和 CAPTION(用来标识用,唯一就行)
2.要调用时先从全局模块查找被调用方的HANDLE。
3.PostMessage(theHandle,YOU_MSG,,);
4.form的类中处理该消息。
 
多人接受答案了。
 
顶部