程序運行態如何在一個窗體上按下一個button後,在另一個窗體上動態生成一個button。(39分)

L

leway

Unregistered / Unconfirmed
GUEST, unregistred user!
注意:另一個窗體上動態生成的button,不能是事先準備好,要動態生成。
 
在第二个窗口的BUTTON里写:
VAR
I:TBUTTON;
begin
I:=TBUTTON.Create(FORM1);
I.Parent:=FORM1;
I.Name:='DD';
I.Left:=1;
I.Top:=1;
end;
 
这个好办啊!
比如
unit1中是form1的单元,在implementation中uses unit2(unit2是form2的定义单元)
在button1(form1的以个按钮)的onclick中加入类似以下的代码:
var
btn:TButton;
begin
btn:=TButton.Create(form2);
btn.left:=10;
....
end;
你甚至可以动态的在form2中创建任何控件,然后用存成dfm文件,然后再在程序运行的时候
动态的加载该dfm文件,然后运行该窗体。
 
Y,就是这样。我懒得写了[:D]
 
to:einstrain
你說的最後兩句話,正是我現在要做的,我就是在form2中動態创建任何控件,然后用存成dfm文件,然后再在程序运行的时候
动态的加载该dfm文件,然后运行该窗体。
我想請問如何將運態設計好的窗體存成dfm文件,然后再在程序运行的时候动态的加载该dfm文件呢?請舉例說詳細些。
萬分感謝!
 
to leway:
我也正在学习有关的方法,我也不太懂怎样用stream.readcomponent,和ReadComponentResFile
但是,我已经做个一些试验,你可以用ReadComponentResFile、writeComponentResFile来存储你
的窗体,但是我就不明白,你如果是在该窗体静态(即在delphi ide下面设计的控件)设计
一控件,这样做的话,ReadComponentResFile将会出错,原因是:你读出窗体的时候,已经
把静态设计的控件创建好了(读到该窗体类型),而接着再读控件的时候会有控件命名冲突,
即控件被创建了两次。而如果窗体的控件都是动态创建的时候不会出现问题。
而dfm文件它有两种形式,一是二进制的形式,一是文本的形式,可以用objectTextTobinary
和ObectBinaryToText相互转换,然后存储成文件。现在的问题是你的每一个空间都必须用
registerclass或registerclasses注册,当然存储的时候只存储属性,和vc实例化有点类似,
而当有事件属性的时候,加载的时候就不好处理,我也正在研究,我已经把我以前的两个用
ide设计的窗体(一是文本形式,一是二进制形式)用readcomponent读出来运行过,当然这
样的窗体和ide设计期的窗体没有什么不同,但是没有相应的响应事件所以也没有什么用,
如果你有新的发现,请通知我,不胜感激!einstrain@163.com
 
to:einstrain
請將你以前的两个用ide设计的窗体(一是文本形式,一是二进制形式)用readcomponent读出来运行过的實現代碼發給我。
謝謝!
lyaip@etang.com
 
还有,即是象writecomponent,writeComponentResFile,他们到底向流里写些了什么呢?
请大家参看:http://computer.szptt.net.cn/2002-08-13/nw2002081300044.shtml,一到
五。我也没有怎么看懂。打印出来足有30多页,对与写的时候写了什么,怎么写的,读的时
候读了什么,怎么读的,希望各位能讨论讨论,共同进步。
象上面的,我一点体会,如果是用ide设计的(用tform继承),在ide下面静态的设计窗体
的控件,我读的时候就可以用readcomponent读出该窗体(as tform),不需要相应的pas
文件,由此可以看出读的时候根据dfm文件的类型和拥有关系,然后动态的创建和设置控件
的属性的过程,当然没有注册任何窗体的控件是不行的,至于那些属性写进去,及其顺序
我就不明白。
 
to leway:
已经发到你的邮箱。
 
接受答案了.
 
顶部