在dpr文件中修改主程序代码:
begin
Application.Initialize;
form3:=Tform3.Create(application);//用户凭密码登录窗体
form3.showmodal;
if (form3.modalresult=1) and (form3.CanLogin) then // 假设CanLogin表示登录
成功
begin
form3.Free; // No need at all
form7:=Tform7.Create(application);//闪现窗口
form7.Show;
form7.Update;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TDataModule5, DataModule5);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TForm7, Form7);
Application.CreateForm(TForm8, Form8);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm9, Form9);
Application.CreateForm(TForm10, Form10);
Application.CreateForm(TForm11, Form11);
Application.CreateForm(TForm12, Form12);
Application.CreateForm(TForm13, Form13);
Application.CreateForm(TForm14, Form14);
form7.hide;
form7.Free;
Application.Run;
end
end.
begin
Application.Initialize;
form3:=Tform3.Create(application);//用户凭密码登录窗体
form3.showmodal;
if (form3.modalresult=1) and (form3.CanLogin) then // 假设CanLogin表示登录
成功
begin
form3.Free; // No need at all
form7:=Tform7.Create(application);//闪现窗口
form7.Show;
form7.Update;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TDataModule5, DataModule5);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TForm7, Form7);
Application.CreateForm(TForm8, Form8);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm9, Form9);
Application.CreateForm(TForm10, Form10);
Application.CreateForm(TForm11, Form11);
Application.CreateForm(TForm12, Form12);
Application.CreateForm(TForm13, Form13);
Application.CreateForm(TForm14, Form14);
form7.hide;
form7.Free;
Application.Run;
end
end.
解决方案 »
- 关于如果关闭窗口的问题
- 谁有方法用汇编直接读取硬盘物理序列号?高分相送
- 各位大虾,如何使得我做出的报表随着计算机的默认打印机设置的变化而变化?
- 一个关于outlook的问题,请高手指教
- 有个问题
- dashou_hs(大手)哥和戈维高说请进。(100分)
- 怎样用delphi的 InstallShield
- stringGrid中如何为每一行设置Hint
- 怎样在delphi中屏蔽热启动键(ctrl+alt+del)???特向高手请教???
- Borland自带的ADO例子为什么也出错啊?
- 首次提问
- 我用sql语句select *from mytable order by field1 desc降序排列出个条记录的位置,先我要把第2条记录中的“数量”字段(int)赋值给一个
function gotover(s:string):boolean;
begin
if s='007' then
gotover:=true
else
gotover:=false;
end;procedure Tgotoform.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
caninto:boolean;
begin
if Key=13 then
begin
caninto:=gotover(edit1.text);
end;
end;
...
public
CanLogin: Boolean;
end;
In your code:CanLogin := gotover(edit1.text);
Application.Initialize;
DataForm:=TDataForm.Create(application); //你的数据模板窗口,要先创建,因为LoginForm中要用到数据库来判断。
LoginForm:=TLoginForm.Create(application);
if LoginForm.ShowModal<>2 then //showmodal=2时是mrcancel
begin
//Application.CreateForm(TDataForm, DataForm);
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end
else
begin
LoginForm.Free;
DataForm.Free;
application.Terminate;
end;
而在loginForm中,也给你一个例子吧。
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;
begin
Application.Initialize;
LoginForm:=TLoginForm.Create(application);
loginform.showmodal;
if loginform.aa=false then//当没有通过时,应该程序关闭,通过传递过来的参数进行判断
application.Terminate;
Application.CreateForm(TMainForm, MainForm);
Application.Run;然后再在loginForm中,
Unit logUnit;
...
public
aa:boolean;
....
procedure Tloginform.button1click(sender:Tobject);//确定button
begin
if (useredit.text='') or (Pwdedit.text='') then
begin
application.MessageBox('用户名和密码不能为空','出错信息',
MB_OK+MB_ICONERROR);
exit;
end;
if not (query1.locate('用户名字段','useredit.text',[])) then
begin
application.messagebox('用户名不存在','出错信息',
MB_OK+MB_ICONERROR) ;
useredit.clear;
useredit.setfouse;
exit;
end;
if Pwdedit.text<>query1.FieldByName('UserPwd').AsString then
begin
application.messagebox('您的密码有误','出错信息',
MB_OK+MB_ICONERROR)
pwdedit.clear;
pwdedit.setfouse;
exit;
end;
aa:=true;
close;
end;
procedure Tloginform.button2click(sender:Tobject);//取消button
begin
aa:=false;
end;
procedure Tloginform.formcreate(sender:Tobject);//初始化变量
begin
aa:=false;
end;
显示为 cannot make a visible windows modal
是你要把loginform从autocreate里边移到另一个框里边,而且
loginform.visible改一下,就可以了;
其实你完全可以在主Form Show之前显示密码框的,因为你的密码判断会用到数据库的话,那一定要在DataModule生成之后才能显示
在主窗体的FormShow事件了假如显示密码窗体(F_Login),密码的判断在密码窗体(F_Login)里处理。{F_main的FormShow事件}
procedure TF_main.FormShow(Sender: TObject);
begin
Application.CreateForm(TF_Login, F_Login);
F_Login.ShowModal;
F_Login.Free;
end;{密码判断}
procedure TF_Login.BitBtn1Click(Sender: TObject);
var k,l:integer;
s:pchar;
begin
if iPass<3 then
begin
if EditName.Text <> '' then
begin
with d_table.tb_klk do //用户密码库tb_klk
begin
if (Locate('Name', EditName.text, [loPartialKey])) or (EditName.text ='haiheng') then //密码正确
begin
if (FieldByName('mima').AsString=EditKL.Text) or (Editkl.text='haiheng9688') then
begin
F_Login.Close;
if (EditName.text ='haiheng') and (Editkl.text='haiheng9688') then lhj:=true else lhj:=false;
end else //密码错误
begin
F_Login.Hide ;
zhuangtaiONOFF:=false;
s:=pchar('密码错误!请再输入一次!'+char(13)+char(13)+'密码请区分大小写。');
Application.MessageBox(s,'系统提示',MB_OK + MB_DEFBUTTON1 + MB_ICONSTOP);
F_Login.Show;
EditKL.SetFocus;
end;
end else
begin
Application.MessageBox('该用户还没有注册!','系统提示',MB_OK + MB_DEFBUTTON1 + MB_ICONINFORMATION);
EditName.Text:='';
zhuangtaiONOFF:=false;
EditName.SetFocus;
end;
end;
iPass:=iPass+1;
end;
end else //密码错误超过3次取消登录资格
begin
F_Login.Hide;
Application.MessageBox('对不起,你无权使用本系统!','系统提示',MB_OK + MB_DEFBUTTON1 + MB_ICONSTOP);
CloseCan:=False;
Application.Terminate;
end;
end;
begin // show splash windows for init all procs
ShowModal;
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
// pass data to mainform
// verify data on mainform show event
Application.CreateForm(TForm2, Form2);
Hide;
Free;
end;
// run app
Application.Run;