主窗体最小化到任务栏问题
现在是有主窗体Fmain,登录窗体Fuser 数据连接窗体DataModule1,在工程选项的,主窗体上我已经选择了Fmain ,但最小化时还不是到任务栏,如果把登录窗体去了就可以,代码如下:
//工程单元:
begin
Application.Initialize;
Application.CreateForm(TFmain, Fmain);
Application.Run;
end.
//主窗体单元:
procedure TFmain.FormCreate(Sender: TObject);
begin
DataModule1:=TDataModule1.Create(Application);
Fuser:=TFuser.Create(Application);
Fuser.ShowModal;
end;
//登录单元
if ADOQuery1[ '密码 ']=Edit2.Text then
begin
usernum:=ADOQuery1.fieldbyname( '权限 ').asstring;
if usernum= '普通成员 ' then
i:=0
else
if usernum= '管理员 ' then
i:=1
else
if usernum= '系统管理员 ' then
i:=2;
qxid:=i;
myuser:=Edit1.Text;
Fuser.Hide;
Fmain.Show;
end
else
begin
MessageDlg( '密码错误 ',mtError,[mbOK],0);
Edit2.Text:= ' ';
end
以上都是连到调用其它单元的部分代码,其他无关代码没写出来,麻烦各位给看看要如何调用才正确
[解决办法]
Fuser.Hide; --->Fuser.Free;
Fmain.Show;
[解决办法]
//主窗体单元:
procedure TFmain.FormCreate(Sender: TObject);
begin
DataModule1:=TDataModule1.Create(Application);
Fuser:=TFuser.Create(Application);
if Fuser.ShowModal=mrok then
Fuser.free;
end;
[解决办法]
http://download.csdn.net/detail/case5166/4421022简单写了个,希望能满足你的要求。
[解决办法]
Fuser:=TFuser.Create(Application);
Fuser.ShowModal;
放到formshow里面处理.如果放到FormCreate,你的MainForm还是你的登陆窗口。
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;
if (FMainForm = nil) and (Instance is TForm) then
begin
TForm(Instance).HandleNeeded;
FMainForm := TForm(Instance);
end;
------解决方案--------------------
Application.CreateForm(TFmain, Fmain);
说明 Fmain是主窗体. 也就是程序启动时创建的.
Fuser:=TFuser.Create(Application);
改成 Fuser:= TFuser.Create(nil);
Fuser.ShowModal;
Fuser.Free;
估后在 Fuser窗体的 FormClose事件里写
Action:= caFree;
Fuser:= nil;
这样就OK了... 资源完美释放. 如果在你程序运行过程中还需要重新登录之类的.. 同样的代码.依然适合.