动态form(20分)

  • 主题发起人 主题发起人 我的名字叫盼盼
  • 开始时间 开始时间

我的名字叫盼盼

Unregistered / Unconfirmed
GUEST, unregistred user!
我在进行测试的时候,单独编写了一个单元,这个单元是作为component加入的delphi的。
在这个单元中,我定义了一个动态的form,form中定义了一个动态的button。但是,在编写当
这个button被单击后的处理句柄时遇到了问题。后来解决了,但是在饮用这个单元的时候却发生
了找不到form的resource的提示,请问,象我这样的情况怎么解决。也就是说实现的是在
程序中饮用另外一个单元,在这个单元中自动生成一个窗口,在窗口中动态生成一个button
,并在这个单元中定义当单击这个按钮的事件发生后的处理句柄。
 
这个单元要在引用前定义完成,在DELPHI中除了你可看到的各单元外还有个程序单元,它只有代码没FROM,在那有个单元的定义和建立!你可查一下!
 
这些我都完成了,当然是在另外一个unit中定义了一个form和button。也没有具体的form。我的
form和button都是自己定义然后自动生成(create)的。在编译的时候也没有问题,就是在调用的
过程中出现了错误。不要说我忘记了引用了我自己定义的unit。我的意思很简单。就是在自己
定义的unit中定义了单元,然后创建实例后,如果自己处理消息的映射,比如自己编写一个
处理鼠标在按钮上单击的消息。而且,我要说明以下,我这个单元不是作为一个控件来描述的
,如果是控件,我知道怎么写程序。我说的意思是纯粹的一般的普通的单元中怎么处理这个
事件。
mybutton.onclick:=xxxx;
而xxxx在普通的一个单元中怎么定义呢?(不使用控件中的tform1.buttonclick(sender:tobject);
也不使用if assigned(onclick) then onclick(self);
不知道能不能表达清楚,谢谢!
 
下面将部分原代码写出来,关于怎么产生单击按钮的事情的处理句柄。
unit mycon;

interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
var myform:tform;
mybutton:tbutton;
procedure init;
procedure final;
implementation
procedure init;
begin
myform:=tform.Create(nil);
myform.parent:=nil;
mybutton:=tbutton.create(myform);
mybutton.parent:=myform;
myform.Top:=100;
myform.Left:=100;
myform.Width:=300;
myform.Height:=200;
mybutton.top:=20;
mybutton.left:=20;
mybutton.width:=20;
mybutton.height:=20;
mybutton.OnClick:=mybuttonclick;
//myform.mybutton.onclick:=myform.mybuttonclick;没有任何作用也编译通不过。
end;
procedure final;
begin
mybutton.free;
myform.Free;
end;
end.
 
很久不用,几乎忘记光了。花了我近1个小时,来温故而知新。
...
implementation

// 定义您的函数
procedure ButtonClick(Sender: TObject);
begin
MessageBox(0, 'Button clicked', 'Info', mb_OK);
end;

procedure init;
var Method: TMethod;
begin
myform:=tform.Create(nil);
myform.parent:=nil;
mybutton:=tbutton.create(myform);
mybutton.parent:=myform;
myform.Top:=100;
myform.Left:=100;
myform.Width:=300;
myform.Height:=200;
mybutton.top:=20;
mybutton.left:=20;

//mybutton.width:=20;
//mybutton.height:=20;
//mybutton.OnClick:=mybuttonclick;
//myform.mybutton.onclick:=myform.mybuttonclick;没有任何作用也编译通不过。

mybutton.Caption := 'Hello';

Method.code := @ButtonClick;
Method.data := mybutton;
mybutton.OnClick := TNotifyEvent(Method);

myform.Visible := true;
end;
...

相信您能看出我增加和修改的地方。
 
如果上面的 ButtonClick 这样写就更加妙了:
procedure ButtonClick(Sender: TObject);
begin
MessageBox(0, PChar(TButton(Sender).caption), 'Info', mb_OK);
end;
显示结果是:“hello”
[:D]
 
我还有一个问题,名字是"一个网络编程的问题,请帮忙".麻烦去看看,谢谢!
 
后退
顶部