窗体继承的问题 delphi 里面写了个basefm窗体,新建立一个窗口,用代码改动继承自basefm,为什么新窗口产生的时候,没有执行basefm的onCreate事件?basefm里面的OnCreate里面有写MessageBox,但是,新窗口就是没有弹出来 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是否在子窗体中也有ONCREATE,而且没有引用INHERITED delphi 里面写了个basefm窗体,新建立一个窗口,用代码改动继承自basefm,---alt+f12如下代码:object Form1: TForm1 Left = 192 Top = 107 Width = 696 Height = 480 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13end改成inherited Form1: TForm1end然后alt+f12 to : zaza_bbface(我试着成熟一点~) (我也改过,还是没有成功,我的form是DLL里面的 我在basefm里面加了个主菜单,但是,在调用dll form后,form没有主菜单,但是,主程序(MDI)主窗口的菜单被basefm的菜单覆盖了,说明 dll form还是继承了basefm的主菜单,但是,并没有出现在 dll form里面( dll form 没有最大化的时候,也没有菜单的, )奇怪吧? 我所有的窗体都需要 在Create的时候给MDI主窗口发送一个消息,告诉主窗口,有新的MDI窗体建立了,当我的MDI子窗口关闭的时候,也需要给MDI主窗口发送一个消息,告诉主窗口,有MID窗口关闭了,因为这样,所以我建立了一个basefm,在basefm的OnCreate和OnClose里面 写了Sendmessage.BTW:为什么要这样做?因为为的主窗口是BCB编的,如果在不关闭Delphi编的DLL里面的FORM,而直接关闭主窗口会出现错误,必须把所有的子窗口都关闭后,才能关闭主窗口 我测试没有问题:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TFormBase = class(TForm1) public constructor Create(AOwner: TComponent); override; end; TFormChild = class(TFormBase) public constructor Create(AOwner: TComponent); override; end;var Form1: TForm1;implementation{$R *.dfm}{ TFormBase }constructor TFormBase.Create(AOwner: TComponent);begin inherited; Application.MessageBox('主', '');end;{ TFormChild }constructor TFormChild.Create(AOwner: TComponent);begin inherited; Application.MessageBox('子', '');end;procedure TForm1.Button1Click(Sender: TObject);var fc: TFormChild;begin fc := TFormChild.Create(nil); fc.ShowModal; fc.Free;end;end. constructor TFormChild.Create(AOwner: TComponent);这个是什么意思?我的这里是:procedure TfmBase.FormCreate(Sender: TObject); 我猜想是OldCreateOrder的原因,你看一下这篇文章,看看是不是:http://blog.csdn.net/linzhengqun/archive/2005/10/01/493746.aspx “如果在不关闭Delphi编的DLL里面的FORM,而直接关闭主窗口会出现错误,必须把所有的子窗口都关闭后,才能关闭主窗口”难道不能在主窗体退出时向所有子窗体发送消息么? 就是 啊 ,就是在窗体退出的时候要给所有的子窗口发送消息,但是,DLL里面的form在产生后,主程序没有办法知道哪些子窗口产生了,必须记录产生窗口的句柄,怎么记录句柄,必须在DLL里面函数,当子窗口产生的时候,给主程序发一个消息,然后在子窗口关闭的时候,给主窗口发送一个消息,当主窗口关闭的时候,检查有哪些子窗口没有关闭,就给这些子窗口发送关闭消息,当所有子窗口关闭后,主程序就可以关闭了所以,在所有的子窗口的创建和关闭的时候,都必须给主窗口发送消息,所以,写一个basefm来完成这个工作,继承的窗体就不用写了 Delphi AdvStringGrid控件问题 如何遍历窗体上运行期间不可见的控件 跳好,还是留好? 数据库高手帮忙啊,只要解决,马上结帐,多谢! DBGRID2中如何显示DBGRID1中对应行的信息(新手求救) 求救,关于用DELPHI6开发WEBSERVICE的问题 有用linux的吗?我的系统起不来了!!! 觅她芳踪 新手问题,在线等待。。。。。。 dbimage怎么存放jpg格式图片? 如何将ORACLE数据库中的表导出 散分...【分享贴】EaPopup提示窗口控件(附源码)
---
alt+f12
如下代码:
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end改成
inherited Form1: TForm1
end
然后alt+f12
我也改过,还是没有成功,我的form是DLL里面的
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TFormBase = class(TForm1)
public
constructor Create(AOwner: TComponent); override;
end;
TFormChild = class(TFormBase)
public
constructor Create(AOwner: TComponent); override;
end;var
Form1: TForm1;implementation{$R *.dfm}{ TFormBase }constructor TFormBase.Create(AOwner: TComponent);
begin
inherited;
Application.MessageBox('主', '');
end;{ TFormChild }constructor TFormChild.Create(AOwner: TComponent);
begin
inherited;
Application.MessageBox('子', '');
end;procedure TForm1.Button1Click(Sender: TObject);
var
fc: TFormChild;
begin
fc := TFormChild.Create(nil);
fc.ShowModal;
fc.Free;
end;end.
procedure TfmBase.FormCreate(Sender: TObject);
http://blog.csdn.net/linzhengqun/archive/2005/10/01/493746.aspx
难道不能在主窗体退出时向所有子窗体发送消息么?