现在是有主窗体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
以上都是连到调用其它单元的部分代码,其他无关代码没写出来,麻烦各位给看看要如何调用才正确
//工程单元:
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
以上都是连到调用其它单元的部分代码,其他无关代码没写出来,麻烦各位给看看要如何调用才正确
Fmain.Show;
procedure TFmain.FormCreate(Sender: TObject);
begin
DataModule1:=TDataModule1.Create(Application);
Fuser:=TFuser.Create(Application);
if Fuser.ShowModal=mrok then
Fuser.free;
end;
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;
地址在这,上面可以直接复制下的
说明 Fmain是主窗体. 也就是程序启动时创建的. Fuser:=TFuser.Create(Application);
改成 Fuser:= TFuser.Create(nil);
Fuser.ShowModal;
Fuser.Free;估后在 Fuser窗体的 FormClose事件里写
Action:= caFree;
Fuser:= nil;这样就OK了... 资源完美释放. 如果在你程序运行过程中还需要重新登录之类的.. 同样的代码.依然适合.
如果我点登录窗体上的关闭按扭就直接进主界面了,如何在点了关闭按扭时能退出程序而不是不用密码就进系统了(目前我是把窗体标题栏按扭全去了不显示,加一个取消按扭在不输入密码时可以退出)
//把程序在任务栏的那个去掉
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
//再设置当前窗体最小化到任务栏上
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle,GWL_EXSTYLE) or WS_EX_APPWINDOW);