MAI子窗体的问题(50分)

  • 主题发起人 主题发起人 hnzqw
  • 开始时间 开始时间
H

hnzqw

Unregistered / Unconfirmed
GUEST, unregistred user!
主窗体为MAINFORM,两个子窗体FORM1、FORM2
在主窗体中的菜单中我用如下分法来打开子窗体:
procedure TMainForm.N3Click(Sender: TObject);
//打开FORM1的菜单,打开FORM2的菜单类同。
var
form1:tform1;
begin
form1:=tform1.create(self);
form1.show;
end;
[?] 当点上菜单先打开FORM1时再打开FORM2时,FORM2将在FORM1上。当再点菜单打开FORM1时,
[?] 判断FORM1是否已有一个实例打开,如没有则建立FORM1窗口,如有则将FORM1从FORM2后面
提到最前面。
我用如下代码替换上面的代码:
var
form1:tform1;
i,frmcount:integer;
begin
frmcount:=0;
with mainFormdo
for I := MDIChildCount-1do
wnto 0do
begin
if MDIChildren.Classname='TFORM1' then
frmcount:=frmcount+1
end;
if frmcount=0 then
begin
form1:=tform1.create(self);
//建立子窗体FORM1
form1.show;
end
else
//当FORM1有实例时,以下代码将FORM1提到其它窗口前面
begin
// SetForegroundWindow(Form1.Handle) ;
//这句出错
sendmessage(Form1.Handle,WM_ACTIVATE,0,0);
//换成这句也出错。
end;

以上是我的思路和代码。虽然可作到让窗体的一个实例运行,但可能不是好方法,
请告诉一个简单的方法;将已生成的窗体实例提前的两句为何出错呢?请赐教?
 
用我的这个方法,一定可以。
function TMainForm.findChildForm(formname: string): boolean;
var i: integer;
form: tform;
begin
result := false;
for i:=0 to MDIChildCount - 1do
begin
if uppercase(MDIChildren.Name) = uppercase(FormName) then
begin
result := true;
form := MDIChildren;
lockwindowupdate(mainform.Handle);
form.Show;
form.WindowState := wsMaximized;
lockwindowupdate(0);
end;
end;
end;
在调用任一窗体时这样即可:
var Form1: TForm1;
begin
if findChildForm('Form1') then
exit;
lockwindowupdate(mainform.Handle);
Form1:= TForm1.create(self);
Form1.show;
lockwindowupdate(0);
end;
一切搞定,快快给分!!!!!!
 
我的程序就差 LOCKWINDOWUPDATE()。请解释在程序中这个函数的作用?
 
干嘛这么麻烦,这样写不就ok了?
if not assing(Form1) then
form1 := TForm1.Create(self);
form1.Show;
 
TO:rookie_ron
是assign吧,如是的话assign好像不能用在FORM上,不能运行。
 
sorry,拼写错误,应该是assigned
 
即是ASSIGNED 也不行呵?
 
接受答案了.
 
后退
顶部