动态创建窗体? ^_^;按钮点击时的代码:if not assigned(form2) then begin form2 := Tform2.create(self); form2.showmodal; end;
if not assigned(form2) then begin form2 := Tform2.create(Application); form2.show; form2.FormStyle := fsStayOnTop; end; //在Form2的onClose添加Form2.free;//or if not assigned(form2) then begin try form2 := Tform2.create(Application); form2.showModal; finally form2.free; end; end;
if not assigned(form1) then begin form1 := Tform1.create(application); form1.showmodal; end;既然要实现相同的效果,为什么不用showmodal?给我们个理由先.....
unit ProgressFrm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;type TfrmProgress = class(TForm) lbl1: TLabel; pgs1: TProgressBar; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;procedure ShowProgressForm(AOwner:TComponent); procedure HideProgressForm(); procedure UpdateProgressForm(AInfo:String;AProgress:Integer);implementation{$R *.dfm}var ProgressForm:TfrmProgress; WindowList:Pointer;procedure ShowProgressForm(AOwner:TComponent); begin if not Assigned(ProgressForm) then begin ProgressForm:=TfrmProgress.Create(AOwner); end; ProgressForm.Show; WindowList:=DisableTaskWindows(ProgressForm.Handle); end;procedure HideProgressForm(); begin if Assigned(ProgressForm) then begin EnableTaskWindows(WindowList); FreeAndNil(ProgressForm); end; end;procedure UpdateProgressForm(AInfo:String;AProgress:Integer); begin if Assigned(ProgressForm) then begin ProgressForm.lbl1.Caption:=AInfo; ProgressForm.pgs1.Position:=AProgress; ProgressForm.Update; end; end;procedure TfrmProgress.FormCreate(Sender: TObject); begin PostMessage(pgs1.Handle,$0409,0,clGreen); end;end.
useage: ShowProgressForm(nil); try for I:=0 to 100 do begin UpdateProgressForm('Initializing ' + IntToStr(I),I); end; finally HideProgressForm(); end;
最好这样: ShowProgressForm(nil); try for I:=0 to 100 do begin UpdateProgressForm('Initializing ' + IntToStr(I),I); Application.ProcessMessages(); end; finally HideProgressForm(); end;
^_^;按钮点击时的代码:if not assigned(form2) then
begin
form2 := Tform2.create(self);
form2.showmodal;
end;
if not assigned(form2) then
begin
form2 := Tform2.create(Application);
form2.show;
form2.FormStyle := fsStayOnTop;
end;
//在Form2的onClose添加Form2.free;//or
if not assigned(form2) then
begin
try
form2 := Tform2.create(Application);
form2.showModal;
finally
form2.free;
end;
end;
begin
form1 := Tform1.create(application);
form1.showmodal;
end;既然要实现相同的效果,为什么不用showmodal?给我们个理由先.....
需要动态创建窗体用form1 := Tform1.create(Application);
用了showModal 后打开的窗体自动关闭
不知道各位是否遇到过此类问题?
怎么解决?。
把bitbtn的modalResult的返回值该为mrNone 就可以了
//声明
var
WindowList: Pointer;
//.........
//打开子窗体
WindowList:= DisableTaskWindows(self.handle);
frmFareSet.Show;
//关闭子窗体
EnableTaskWindows(untMain.WindowList);
//用此方法也可,但子窗体好象不能动态创建,而是随主窗题一起创建
各位有何高见
指点以下。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;type
TfrmProgress = class(TForm)
lbl1: TLabel;
pgs1: TProgressBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;procedure ShowProgressForm(AOwner:TComponent);
procedure HideProgressForm();
procedure UpdateProgressForm(AInfo:String;AProgress:Integer);implementation{$R *.dfm}var
ProgressForm:TfrmProgress;
WindowList:Pointer;procedure ShowProgressForm(AOwner:TComponent);
begin
if not Assigned(ProgressForm) then begin
ProgressForm:=TfrmProgress.Create(AOwner);
end;
ProgressForm.Show;
WindowList:=DisableTaskWindows(ProgressForm.Handle);
end;procedure HideProgressForm();
begin
if Assigned(ProgressForm) then begin
EnableTaskWindows(WindowList);
FreeAndNil(ProgressForm);
end;
end;procedure UpdateProgressForm(AInfo:String;AProgress:Integer);
begin
if Assigned(ProgressForm) then begin
ProgressForm.lbl1.Caption:=AInfo;
ProgressForm.pgs1.Position:=AProgress;
ProgressForm.Update;
end;
end;procedure TfrmProgress.FormCreate(Sender: TObject);
begin
PostMessage(pgs1.Handle,$0409,0,clGreen);
end;end.
ShowProgressForm(nil);
try
for I:=0 to 100 do begin
UpdateProgressForm('Initializing ' + IntToStr(I),I);
end;
finally
HideProgressForm();
end;
ShowProgressForm(nil);
try
for I:=0 to 100 do begin
UpdateProgressForm('Initializing ' + IntToStr(I),I);
Application.ProcessMessages();
end;
finally
HideProgressForm();
end;