如何控制MIDI方式下Show出子窗体的数量?(300$)(300分)

  • 主题发起人 主题发起人 Dooing
  • 开始时间 开始时间
D

Dooing

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个项目,主窗体用MIDI方式,工作时允许弹出多个子窗体,
但是当弹出窗体太多时会导致系统资源消耗太多而崩溃,有为什
么好的方法可以避免这种情况?如在下一个窗体弹出时判断当前
活动窗体超过一定数量后自动关闭最先打开的窗体?该如何处理?
谢谢各位!
 
可以在主窗口的事件里做!
 
我给你一个函数,是判断是否还有窗体的,本来是作为退出时检查是否有窗体没有关的,同理,
你可以根据这个写你的判断程序,够了吗?
用Screen.Forms...就可以得到当前MDI窗体中有多少子窗体,记得要除掉MDI那一个.
procedure TFrmMainMenu.CheckForm;
var i:integer;
begin
; if Screen.FormCount>1 then
; begin
; ;for i:=0 to Screen.FormCount-1 do
; ;begin
; ; ;if Screen.Forms.Caption<>Self.Caption then
; ; ;begin
; ; ; ShowMessage('请先关闭"'+Screen.Forms.Caption+'"窗口后,再关闭系统!');
; ; ; abort;
; ; ;end;
; ;end;
; end;
end;
 
procedure TFrmMain.OpenFrm(FormClass: TFormClass);
var
; i: integer;
; childFm: TForm;
begin
; for i := 0 to FrmMain.MDIChildCount - 1 do
; ; if FrmMain.MDIChildren.ClassType = FormClass then
; ; begin
; ; ; childFm := FrmMain.MDIChildren;
; ; ; if ChildFm.WindowState = wsMinimized then
; ; ; ; ShowWindow(ChildFm.handle, SW_SHOWMAXIMIZED)
; ; ; else
; ; ; ; ShowWindow(ChildFm.handle, SW_SHOWNA);
; ; ; if (not childFm.Visible) then
; ; ; ; childFm.Visible := True;
; ; ; childFm.BringToFront;
; ; ; Exit;
; ; end;
; ChildFm := FormClass.Create(Application);
; childFm.Show;
end;
 
显示子窗体的个数:
showmessage(inttostr( self.MDIChildCount ));

访问第i个子窗体:
self.MDIChildren

关闭所有子窗体:
for i:= 0 to self.MDIChildCount do
; ;self.MDIChildren[0].Close


您可以根据以上完成您要的所有子窗体的操作了。


要是满意快给分吧,我这可是最佳答案。且我想快速拿分。
谢谢。
 
我各种方法都试过了,但MDIChildCount 的返回值都是0,不知何故?希望各位继续帮助!
对了我的窗体是做成Dll由主窗体调入的。
 
Dooing,如果你的程序不是很大或方便的话,可否发给我,我可以帮你看看.你的DLL中有多
少个表单?本来自己也可以做一个来试,可懒得写,要是有别人的东西放到眼前,我就有这个
动力了.呵呵...我的email:kan@freetrend.com.vn,若不方便就算了.
 
screen.forms
 
var
; i:integer;
begin
; I:=Screen.FormCount;
; if I<mdiChildFormNumber then
; ; ; ;// create mdiChildForm
; else
; ; ;MessageBox(Handle,'子窗体已经创建太多!','提示框',MB_OK+MB_ICONWARNING);
 
都没有达到我的要求,结束了吧!
 
多人接受答案了。
 
后退
顶部