1、我有Tform1.create(self)建立了并显示为一个模态窗口,如何关闭最好?我用CLOSE和FREE都不行,提示错误!
2、我用MDI结构,也是用以上方法建立的,用SHOW来显示,应该怎么关闭最好?
3、我怎么能知道MDI结构中打开了哪些CHILD窗口?
4、有谁用过skinengine控件,知道它的MENUBAR控件在MDI窗口中,怎么把子窗口的菜单应用到主窗口上!?(这个不知道就算了,知道最好!)多谢高手!
2、我用MDI结构,也是用以上方法建立的,用SHOW来显示,应该怎么关闭最好?
3、我怎么能知道MDI结构中打开了哪些CHILD窗口?
4、有谁用过skinengine控件,知道它的MENUBAR控件在MDI窗口中,怎么把子窗口的菜单应用到主窗口上!?(这个不知道就算了,知道最好!)多谢高手!
解决方案 »
- vclzip3-我下载了 安装好后用不,提示:File not found: 'VCLUnZip.dcu'
- 绿霸--花季护航如何
- CSDN验证码问题!求助!
- 有这样一个表 T(a, b, c) 三个字段, 求类似这样的语句 select ((a>b)?a;b) + c as total from T
- 急啊急.
- 求书一本!!
- tDataModule在那个组件下,我刚开始学DELPHI不太熟悉
- 假如:应用服务器在上海,数据库在北京,客户端在南京,怎么联结三者?
- 祝大家新年好!
- 有人愿意探讨一下电子摄像控件的使用吗?
- 如何在IIS中配置一个用IntraWeb控件组写的Dll文件呢?
- 问个简单的问题:在winxp/delphi7下如何实现用enter代替tab功能?
Action := caFree;
Form1 := nil;2.直接Close,可以类似上面的
可以用MDIChildCount, MDIChildren
with MainForm do
for I := 0 to MDIChildCount - 1 do
ShowMessage(MDIChildren[I].Name);
其实MDIChild是在关闭的时候调用了默认的Action :=caMinimize
只要在form的关闭事件里写action:=cafree就可以了
unit Unit3;interface
uses
Windows,Classes,Forms,SysUtils,Messages;type
P=^TWindowsStruct;
TWindowsStruct=record
ClassName:String;
AChiWinHnad:Thandle;
end;
var
WRString:String;
function EnumChildProcY(CHandle:Hwnd;Lparms:LongInt):Boolean;
{$IFDEF Win32}stdcall;{$ELSE};export;{$ENDIF}
function FindWindowA(ClassName:String):Thandle;
procedure ReportToForm2(X,Y:String);
procedure RestoreWindow(AWindowHand:THandle);implementation
uses
unit1,unit2;
function FindWindowA(ClassName:String):THandle;
var
AWindowsStruct:TWindowsStruct;
begin
AWindowsStruct.ClassName:=UpperCase(ClassName);
AWindowsStruct.AChiWinHnad:=0;
EnumChildWindows(Application.MainForm.Handle,@EnumChildProcY,Longint(@AWindowsStruct));
FindWindowA:=AWindowsStruct.AChiWinHnad;
end;function EnumChildProcY(CHandle:Hwnd;Lparms:LongInt):Boolean;
{$IFDEF Win32}stdcall;{$ELSE};export;{$ENDIF}
var
ATFormName:PChar;
FormFound:Boolean;
begin
GetMem(ATFormName,255);
Result:=True;
FormFound:=False;
try
if GetClassName(CHandle,ATFormName,255)>0 then
if Pos(P(Lparms).ClassName,UpperCase(ATFormName))>0 then
FormFound:=True; if FormFound then
begin
P(Lparms).AChiWinHnad:=CHandle;
Result:=False;
end;
finally
FreeMem(ATFormName,Sizeof(ATFormName^));
end;
end;
procedure ReportToForm2(X,Y:String);
var
TheWindowHandle:THandle;
begin
TheWindowHandle:=FindWindowA('TChildForm');
with AppliCation do
if TheWindowHandle=0 then
begin
AppliCation.CreateForm(TChildForm,ChildForm);
SendMessage(ChildForm.Handle,WM_RunChild,LongInt(@X),LongInt(@Y));
if X='WR' then
SendMessage(ChildForm.Handle,WM_WRMeg,0,Longint(@WRString));
end
else
begin
SendMessage(ChildForm.Handle,WM_RunChild,LongInt(@X),LongInt(@Y));
if X='WR' then
SendMessage(ChildForm.Handle,WM_WRMeg,0,Longint(@WRString));
RestoreWindow(TheWindowHandle);
BringWindowToTop(TheWindowHandle);
end;
end;
procedure RestoreWindow(AWindowHand:THandle);
begin
if IsIconic(AWindowHand) then
OpenIcon(AWindowHand)
end;
end.
在创建之前写:
begin
if MainForm.ActiveMDIChild <> nil then
MainForm.ActiveMDIChild.Close;
创建new MDIChild
....
end;