要求:主窗体Frmmain有一个Bitbtn按键和一个Panel,要求在这个Panel上显示另一个窗体Form1,(在同一个应用程序下).
想用Setparent函数,定义:hwndfrm,hwndoldparent:HWND;
procedure TForm1.FormActivate(Sender: TObject);
begin
hwndfrm:=form1.Handle;
hwndoldparent:=getparent(hwndfrm);
windows.SetParent(hwndfrm,frmmain.panel12.Handle);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
windows.SetParent(hwndfrm,hwndoldparent);
end; 然后
procedure Tfrmmain.BitBtn1Click(Sender: TObject);
begin
form1.show;
end;
这样不行,奇怪问题出在哪里?
想用Setparent函数,定义:hwndfrm,hwndoldparent:HWND;
procedure TForm1.FormActivate(Sender: TObject);
begin
hwndfrm:=form1.Handle;
hwndoldparent:=getparent(hwndfrm);
windows.SetParent(hwndfrm,frmmain.panel12.Handle);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
windows.SetParent(hwndfrm,hwndoldparent);
end; 然后
procedure Tfrmmain.BitBtn1Click(Sender: TObject);
begin
form1.show;
end;
这样不行,奇怪问题出在哪里?
windows.SetParent(Form1.Handle,Panel1.Handle);
//Form1.Parent:=Panel1;
但是 form1.showmodal就不行.怎么解决有多个Bitbtn,进入不同的窗体,在同一个Panel中.窗体是动态加入的,按另一个Bitbtn时,怎么关闭上一个窗体???
我是用下面的代码把新窗口写到主窗口Panel1中
F_new.DockSite:=True;
F_new.DragKind:=dkDock;
F_new.Align:=alClient;
F_new.HostDockSite:=Panel1;
F_new.Show;
现在放了几个按钮,按另一个时应该把前一个按钮找开的窗口关闭.
如何解决呢.如果解决了请把代码贴出来.zwh202342(little grass)
直接 窗体.Close如果活动的创建的,关一次正常,关两次以上就出问题(意思就是连按两次Button)
有什么方法判断窗口是否已经创建?
可能universe(孤帆) 的方法行吧,当时我直接用close()就出错,也许用FreeAndnil可以吧,我试下给LZ答案
procedure TForm1.Button1Click(Sender: TObject);
var
vForm: TForm;
begin
TComponent(vForm) := Application.FindComponent('Form2');
if Assigned(vForm) then
begin
ShowMessage('Form2已经创建,将被释放');
vForm.Free;
end else
begin
vForm := TForm.Create(Application);
vForm.Name := 'Form2';
vForm.Show;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
vForm: TForm;
begin
TComponent(vForm) := Application.FindComponent('Form3');
if Assigned(vForm) then vForm.Free; TComponent(vForm) := Application.FindComponent('Form2');
if Assigned(vForm) then
begin
ShowMessage('Form2已经创建,将被释放');
vForm.Free;
end else
begin
vForm := TForm2.Create(Application);
vForm.Name := 'Form2';
vForm.Show;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
vForm: TForm;
begin
TComponent(vForm) := Application.FindComponent('Form2');
if Assigned(vForm) then vForm.Free; TComponent(vForm) := Application.FindComponent('Form3');
if Assigned(vForm) then
begin
ShowMessage('Form3已经创建,将被释放');
vForm.Free;
end else
begin
vForm := TForm3.Create(Application);
vForm.Name := 'Form3';
vForm.Show;
end;
end;