!!!!!!!动态创建窗体问题?简单的!!!!!!!!(20分)

  • 主题发起人 主题发起人 多多帮助
  • 开始时间 开始时间

多多帮助

Unregistered / Unconfirmed
GUEST, unregistred user!
想实现的功能如下:
就是点击按纽后弹出窗体。但这个弹出的窗体由调用ini文件中的名称所得。例:
ini文件中的是“数据备份”
然后就弹出数据备份窗口
如果是“帮助”
就弹出帮助窗口。
谢谢!!!!!
 
把ini的内容读取出来后,
对其进行判断后,
根据判断结果创建不就可以了。
 
那样就不是“动态”创建了
如果我改了ini文件中的内容,怎么判断?
多谢!
 
找找以前的富翁资料有
很多的 关于ini的
还可以在帮助里查TIniFile 有例子的
呵呵
 
动态创建窗体用createwindow,具体可参考MSDN,有不懂,可以联系我,QQ:254706028 空间:http://jonychen,ys168.com 里面有你需要的
 
lz没说明白,
1、要调用已经存在的、在ini文件里面动态说明的form;
2、还是要动态产生一个form,它的caption是ini文件里面的说明?

我想是指2吧?只要create一个form,然后把原先读出的ini内容赋给xxxform.caption不就行?甚至连application.title都赋值过去都行。

如果是1那么更简单啦,form都现成的,你就读ini判断,该执行那一段:
xxForm.Visible:=false;
...
//iniform是读ini文件出来的结果,backupform...是已经存在的form
if iniform='数据备份' then
begin
Application.CreateForm(TbackupForm,backupForm);
backupForm.ShowModal();
backupForm.Release();
end;
if iniform='帮助' then
...

...
xxForm.Show();
 
同意楼上
 
是指2,谢谢了
 
是指2,但这个xxxform.caption中的xxxform是从ini文件中获得的呀。也就是如果ini中的是form1,那么就是form1.show;如果ini中的是form2,那么就是form2.show;
这里的form1和form2都是已经创建好的。也就是只要按ini文件中的值来弹出相应的窗口就行了。
谢谢!
 
也就是将string类型转换为TForm类型
 
先建一个类工厂 :
TFormClass = Class of TForm;

TFormRegistry = class
private
FClsList : TStrings;
function GetCount: integer;
function GetItemClass(index: Integer): TFormClass;
function GetItemName(index: Integer): string;
function GetItemChinese(index: Integer): string;
public
constructor Create;virtual;
destructor Destroy;override;
procedure RegisterForm(const FormName : String; AClass : TFormClass);
function GetFormClass(const FormName : String) : TFormClass;
property Count : integer Read GetCount;
property Item[index : Integer] : TFormClass Read GetItemClass;
property ItemName[index : Integer] : string Read GetItemName;
property ItemChinese[index : Integer] : string Read GetItemChinese;
end;
var
FFormRegister : TFormRegistry = nil;

在每个窗体的初始化:
initialization
with FFormRegister do
begin
RegisterCmdClass('Form1',TForm1);
end;
根据ini文件里的’From1‘在类工厂里找到TForm1。把TForm1.Create出来就好了
end.
 
楼上的要那么复杂吗?
他form都做好了,还要另外建立一个form类?



来自:多多帮助, 时间:2006-6-20 9:22:39, ID:3475713
也就是将string类型转换为TForm类型

你为什么要 将string类型转换为TForm类型 你所有的form都准备好了,由于ini可能指定的是你所没有准备的form,那么你也要有判断究竟有没有这个form这个动作啊,所以你把所有做好的form都写下来判断不是很好?虽然程序很长,但是可读性强啊,这点很重要。

况且如果指定的form你是做好了,但是如果你没有在uses列表中,你照样没办法调用的。
综上2点,你一定要在有限的范围里面改ini,而且所有的form都是准备好的,那就逐个判断吧。
(如果指定没有的form,你还是可以另外做一个默认的代替,条件判断吧。)
 
后退
顶部