怎样判断一个窗体已经建立(20分)

  • 主题发起人 主题发起人 嫩手
  • 开始时间 开始时间

嫩手

Unregistered / Unconfirmed
GUEST, unregistred user!
我的意思是:在主窗体上放一个按钮,点击则显示一个窗体,如果该窗体已经显示出来,
则把已经显示的窗体放到最前面,如果没有显示,则显示出来,应该不难吧
 
if not Assigned(form1) then
form1:= Tform1.Create(Application)
else
form1.Show;
 

procedure OpenForm(FormClass: TFormClass;
var AForm;
AOwner:TComponent=nil);
//根据窗口类名建立窗口,如果窗口存在则只激活它
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms.ClassType=FormClass then
begin
Child:=Screen.Forms;
if Child.WindowState=wsMinimized then
Child.WindowState:=wsNormal;
Child.BringToFront;
Child.Setfocus;
TForm(AForm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(AForm):=Child;
if not assigned(aowner) then
aowner:=application;
Child.Create(AOwner);
end;
 
if application.findcomponet('form1')<>nil then
begin
form1:=Tform1.create(application);
form1.show;
end
else
form1.show;
 
初始化为 nil
 
form1.handle := nil ?
 
直接form1.show;即可
 
1.Assigned(form1)为false
2. Form1<>nil
 
不行呀,还有别的办法吗?
 
哪不行?
给出代码或是错误提示!!!!!
 
你要在Form2的OnDestroy加一句Form2 := nil;
然后就可以
if Assigned(Form2) then
或if Form2<>nil then
Form2.Show else
Form2 := TForm2.Create(Application);
 
ysai怎么跟我写的一样.
 
var
Hwnd :Thandle;
begin
Hwnd := findwindow('form2','project1');
if Hwnd <> 0 then
begin
setforegroundwindow(Hwnd);
end
else
form2.show;
end;
 
定义一全局过程或函数(即在type之外,如在var form1: Tform1的下一行):
procedure MyForm(Aowner:Tcomponent);
然后在implementation下面实现之:
procedure MyForm(Aowner:Tcomponent);
begin
if not assigned(from1) then
(假设窗体名字为form1)
from1:= Tfrom1.Create(aowner);
from1.show;
end;
为节省内存,最好在FormClose中释放该窗体:
Action := caFree;
from1 := nil;
调用该窗体时使用MyForm(self);。
 
试试这个!
if not assigned(form1) then
begin
form1:=application.createform(tform1,form1);
end;
form1.show;
 
老兄,有findcomponet函數的都行的,自已試試吧!
那個OPENFORM怎麼連名字都跟我一樣呢?
 
还没有结贴啊,兄弟!
 
参考http://www.delphibbs.com/delphibbs/dispq.asp?lid=1433671它吧,我想你的问题
同这个一样。
 
if not form1.showing then
form1.show;
 
后退
顶部