如何动态创建Form(50分)

  • 主题发起人 主题发起人 CGF
  • 开始时间 开始时间
C

CGF

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我要动态创建一个Form,Form中包含两个图形按钮和一幅图片,请问各位大虾如何处理?<br><br>谢谢。
 
myform:=TMyform.Create;<br>MyBtn:=TBitButton.Create;<br>MyBtn.Parent:=MyForm;<br>...<br><br>myForm.Show;
 
<br>先建好一个新Form<br><br>var<br>&nbsp;myForm:TForm1;<br><br>动态调用:<br>&nbsp;myForm:=TForm1.Create(Application);<br>&nbsp;..动态生成控件:<br>&nbsp;myImage:=TImage.Create(myForm); //myform is myimage's owner<br>&nbsp;myImage.Parent:=MyForm;<br>&nbsp;myImage.Left:=10;<br>&nbsp;...<br>&nbsp;myForm.Show;<br>不需要时释放:<br>&nbsp;myFrom.Free;//注意不要释放myImage,它会被 myForm Free,(由于Owner)
 
试试我做的About对话框控件,有Image和Button的例子,很简单!<br>&lt;a href="http://personal.wol.com.cn/grass/AboutDlg.zip"&gt;AboutDlg.zip&lt;/a&gt;
 
unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>&nbsp; StdCtrls, ExtCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; &nbsp; procedure ButtonClick(Sender: TObject);<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.DFM}<br>Procedure TForm1.ButtonClick(sender: TObject);<br>begin<br>&nbsp; ShowMessage('Button is clicked');<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; AForm: TForm;<br>&nbsp; AButton: TButton;<br>&nbsp; AImage: TImage;<br>begin<br>&nbsp; AForm := TForm.Create(Application);<br>&nbsp; AButton:=TButton.Create(AForm);<br>&nbsp; AButton.left:=20;<br>&nbsp; AButton.Top:=20;<br>&nbsp; AButton.Caption := 'Try Me';<br>&nbsp; AButton.OnClick := ButtonClick;<br>&nbsp; AButton.parent:=AForm;<br>&nbsp; AImage := TImage.Create(AForm);<br>&nbsp; AImage.Left := 20;<br>&nbsp; AImage.Top := AButton.Top+Abutton.Height + 10;<br>&nbsp; AImage.LoadFromFile('c:/Windows/bubbles.bmp');<br>&nbsp; AImage.Parent:=AForm;<br>&nbsp; AForm.Show;<br>end;<br><br>end.<br>
 
各位大虾:<br>我忘了说明的是我的程序是没有Form的,它运行后在TaskBar产生一个图标,按右键<br>就弹出动态的Form,Form中含有图片和按钮。<br>所以没办法用编写控件的方式实现,除非能动态调用这个控件。<br><br>LittleGrass大虾,等问题解决后一定也给您相应的.......)(<br>
 
&gt;我忘了说明的是我的程序是没有Form的,它运行后在TaskBar产&gt;生一个图标,按右键<br>&gt;就弹出动态的Form,Form中含有图片和按钮。<br>&gt;所以没办法用编写控件的方式实现,除非能动态调用这个控件。<br>完全没有必要不含有Form呀? 您可以把它的缺省属性设置为<br>Hide(Show = FALSE), 在Form的创建函数里在TaskBar产生一个图<br>标,按右键时让它显示出来不就可以了吗?
 
希望大虾要正视问题,因为不是任何程序都有必要拥有预先创建的Form的。<br><br>
 
绕了半天, 你还是要有一个 Form 不是, 只是不显示罢了, 点了 TrayIcon 后才显示
 
&gt;希望大虾要正视问题,因为不是任何程序都<br>&gt;有必要拥有预先创建的Form的。<br>^^^^^^^^^^^^^^^^^^^^^^^^^^<br>不预先创建, 可到头来还是需要动态创建这, 这, 这, 不是舍近求远吗?<br>
 
我希望通过代码生成。那位大虾愿意伸出援手!!!!!!!!!<br><br>50分即时呈上!!!!!!!!
 
你的意思是说一个Form也没有,完全动态创建?<br>这也是肯定可以的,不过首先能不能告诉我你是怎么<br>把你的程序在运行时搞成一个图标的?<br><br>也就是说帮忙把你的.dpr文件贴上来让大家看一下,好吗?
 
&gt;我希望通过代码生成。那位大虾愿意伸出援手!!<br>嗨, 当然是可以办到的,例如:<br>&nbsp; 虽然您没有建立Form, 但是您至少可以创建TForm类型的对象,<br>然后给它设置属性, 等等<br><br>问题是有没有必要, 或者说, 至少可以先用预先创建的Form作为<br>模版, 然后根据需要动态建立或修改已经存在的元件, 事半功倍, :)
 
&gt;我希望通过代码生成。那位大虾愿意伸出援手!!<br>嗨, 当然是可以办到的,例如:<br>&nbsp; 虽然您没有建立Form, 但是您至少可以创建TForm类型的对象,<br>然后给它设置属性, 等等<br><br>问题是有没有必要, 或者说, 至少可以先用预先创建的Form作为<br>模板, 然后根据需要动态建立或修改已经存在的元件, 事半功倍, :)
 
Form 还是要的, 否则无法作 TrayIcon。
 
我的程序是没有Form的,它运行后在TaskBar产生一个图标,按右键就弹出动态的Form,Form中含有图片和按钮。<br><br>我希望通过代码生成。那位大虾愿意伸出援手!!!!!!!!!
 
原理很简单,就是在你那个taskbar icon的事件中加入生成<br>form的代码,关键是要看如何给你的程序定义事件.<br><br>因此我才说请把你的.dpr文件贴上来看看,是怎么实现的那个<br>taskbar icon.你总不会是程序还没做吧! :(
 
基本上你的程序可以完全用PASCAL代码写,代码写在PROJECT的SOURCE中,<br>关于事件,那看一下OBJECT PASCAL 有很好的支持<br>我说了些什么?抱歉!<br><br>问题可能是这样的:<br>如果在程序中有一个窗,但是其内容有许多变化,你可以在把窗SHOW出来之前改变其<br>内容:<br>begin<br>&nbsp; &nbsp;form1.top := xxx;<br>&nbsp; &nbsp;form1.left := xxx;<br>&nbsp; &nbsp;...<br>&nbsp; &nbsp;button1.top := xxx<br>&nbsp; &nbsp;...<br>&nbsp; &nbsp;bitmap1.loadfromfile ...<br>&nbsp; &nbsp;form1.Showmodal;<br>end;<br>
 
在您的主程序中定义一个变量, 类型为TForm即可<br>var<br>&nbsp; MyForm: TForm;<br>&nbsp; MyButton: TButton;<br>&nbsp; MyPic: TBitMap;<br>begin<br>&nbsp; MyForm := TForm.Create(Application);<br>&nbsp; MyButton := TButton.Create(MyForm);<br>&nbsp; with MyButton do<br>&nbsp; begin<br>&nbsp; &nbsp; Parent:=MyForm;<br>&nbsp; &nbsp; Top:=...<br>&nbsp; &nbsp; ...<br>&nbsp; end;<br>&nbsp; ....<br>&nbsp; MyForm.showModal;<br>&nbsp; MyForm.Free;<br>&nbsp; MyForm:=nil;<br>&nbsp; ....<br>end;<br><br>如果要用MyForm.Show的话, free可能有点麻烦, 可以通过给主程序post一个<br>message让主程序调用MyForm.close关闭form, 然后再free.
 
谢谢Another_eYes大虾,谢谢!!!
 
后退
顶部