我是这么做的:
制作一个用于登陆的窗体,然后将它从工程的自启动中去掉,并在mainform中uses这个登陆窗口的文件,然后在mainform的create中调用该登陆窗口,如下:
uses
LoginForm;procedure TFormMain.OnCreate(...)
var
FormLogin:TFormLogin
begin
FormLogin:=TFormLogin.Create(Application);//或者是
//Application.Handle,记不清了。
FormLogin.ShowModal;
if FormLogin.ModalResult<>mrOK then begin
Application.Terminate;
exit;
end;
//以下正常登陆。
end;
制作一个用于登陆的窗体,然后将它从工程的自启动中去掉,并在mainform中uses这个登陆窗口的文件,然后在mainform的create中调用该登陆窗口,如下:
uses
LoginForm;procedure TFormMain.OnCreate(...)
var
FormLogin:TFormLogin
begin
FormLogin:=TFormLogin.Create(Application);//或者是
//Application.Handle,记不清了。
FormLogin.ShowModal;
if FormLogin.ModalResult<>mrOK then begin
Application.Terminate;
exit;
end;
//以下正常登陆。
end;
但要加一个标志位,如果是第一次显示mainform的话,启动login,
但如果是第二次以上的话,就不显示(因为onactive会经常被触发)
工程文件:
Application.Initialize;
SplashForm:=TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
while SplashForm.Timer1.Enabled do
Application.ProcessMessages;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TLoginForm, LoginForm);
SplashForm.Hide;
SplashForm.Close;
Application.Run;
在启动时会先启动画面,然后启动登录框,但首先要设置MainForm中的各种按钮,菜单的Enable:=False.
登录成功后在Enable:=True;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:=false;//在此加一条语句
Application.CreateForm(TForm2, Form2);
Application.Run();
注意:
主Form为:Form1
登录Form为:Form2
确保主Form的Visible属性为false,登录Form的Visible为true.
Application.Initialize;
DataForm:=TDataForm.Create(application);
LoginForm:=TLoginForm.Create(application);
if LoginForm.ShowModal<>2 then
begin
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBoxForm, AboutBoxForm);
end
else
begin
LoginForm.Free;
DataForm.Free;
application.Terminate;
end; 在LoginForm中判断,干脆都给你写出来吧procedure TLoginForm.BtnOkClick(Sender: TObject);
var
AAdminUser,AUserPwd:string;
begin
AAdminUser:=ComUser.Text;
AUserPwd:=trim(EdtPwd.Text);
if (AAdminUser='') or (AUserPwd='') then
application.MessageBox('用户名和密码不能为空','出错信息',
MB_OK+MB_ICONERROR)
else if DataForm.AdminUser.Locate('AdminUser',AAdminUser,[]) then
if AUserPwd=DataForm.AdminUser.FieldByName('UserPwd').AsString then
ModalResult:=mrOK
else
begin
application.MessageBox('密码错误!','出错提示',MB_OK+MB_ICONERROR);
EdtPwd.Text:='';
end
else
application.MessageBox('用户不存在','出错提示',MB_OK+MB_ICONERROR);
end;
logonfrm:=Tlogonfrm.create(application);
logonfrm.showmodal;
if not (ModalResult=mrok) then exit;
logonfrm.free;
logonfrm:=nil;
我就是这么做的
LoginFlag: Boolean;
.......TForm1.OnCreate(Sender: TObject);
begin
LoginFlag := true;
end;TForm1.OnActive(Sender: TObject);
begin
if LoginFlag then begin
LoginFlag := false;
Form2 := TForm2.Create(Self);
//这里在注册窗口中进行验证的方法
if Form2.ShowModal <> mrOk then begin
Form2.free;
halt; //如果不正确,退出程序
end else
Form2.free; //正确则释放注册窗口
end;
end;好了,给我分吧