改工程文件,参阅http://www.csdn.net/expert/topic/523/523644.xml
uses logdlg;
....
var Auser,Apass:string;
...
while (Auser<>'aaa') or Apass<>'111' do
mylogindialog('登陆',Auser,Apass);
....
uses logdlg;
....
var Auser,Apass:string;
...
while (Auser<>'aaa') or Apass<>'111' do
mylogindialog('登陆',Auser,Apass);
....
在FormMain Create的时候写入一下代码
try
Formlogin := TFormLogin.Create(self);
FormLogin.ShowModal;
StatusBar1.Panels[8].Text := FormLogin.LoginUserName;
finally
FormLogin.Free;
end;然后再FormLogin的FormCloseQuery下写入
if ModalResult = MROK then
begin
你进行判断的句子;
if 用户判断正确 then
canclose := true
else
canclose := false
end
else
begin
if application.Messagebox('……','……'+ mb_YesNo) = IDYes then
application.Terminate;
end;你自己可以试一试,不明白的再问
unit
forms,windows,sysutils
var
name,password:string;
begin
application.initialize;
application.title:='你的程序名';
form2:=tform2.create(application);
form2.show;
form2.update;
if edit1.text='登陆名' and edit2.text='密码' then begin
application.createform;
form2.hide;
form2.free;
application.run;
end else begin application.messagebox//显示信息
halt;终止程序
end;
谢谢了,给分吧!!
这样可以如果用户名或密码不对,循环,不至于退出unit Gd_Login;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls, DB, DBTables;type
TFmLogin = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
OKBtn: TButton;
CancelBtn: TButton;
NameEd: TEdit;
PwdEd: TEdit;
TbOp: TTable;
TbLog: TTable;
procedure FormCreate(Sender: TObject);
procedure OKBtnClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure CancelBtnClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
FmLogin: TFmLogin;implementationuses Gd_Main;
{$R *.dfm}procedure TFmLogin.FormCreate(Sender: TObject);
begin
Left := (Screen.Width-Width) div 2;
Top := (Screen.Height - Height) div 2;
end;procedure TFmLogin.FormActivate(Sender: TObject);//在这里,这样可以如果用户名或密码不对,循环,不至于退出
begin
NameEd.SetFocus;
TbOp.Active := True;
TbOp.First;
while not TbOp.Eof do begin
if TbOp.FieldValues['Flag'] = True then begin
NameEd.Text := TbOp.FieldValues['姓名'];
PwdEd.SetFocus;
Break;
end;
TbOp.Next;
end;
TbOp.Active := False;
end;procedure TFmLogin.OKBtnClick(Sender: TObject);
begin
if TbOp.Active = False then TbOp.Active := True;
TbOp.First;
if TbOp.Locate('姓名',NameEd.Text,[]) then begin
if (TbOp.FieldValues['密码'] = null) or (TbOp.FieldValues['密码'] = PwdEd.Text) then begin
// MessageBox(Self.Handle,'密码正确!','提示',MB_OK+MB_ICONEXCLAMATION);
//修改操作员库
// RecNo := TbOp.RecNo;
sName := NameEd.Text;
sPwd := PwdEd.Text;
nPrivilege := TbOp.FieldValues['权限'];
TbOp.First;
while not TbOp.Eof do begin
TbOp.Edit;
Tbop.FieldValues['Flag'] := False;
TbOp.Post;
TbOp.Next;
end;
TbOp.First;
if TbOp.Locate('姓名',NameEd.Text,[]) then begin
TbOp.Edit;
TbOp.FieldValues['Flag'] := True;
TbOp.Post;
end;
TbOp.Active := False; // 记录行为
if TbLog.Active = False then TbLog.Active := True;
TbLog.Edit;
TbLog.Append;
TbLog.FieldValues['姓名'] := NameEd.Text;
TbLog.FieldValues['日期'] := Now;
TbLog.FieldValues['动作'] := '登录';
TbLog.Post;
TbLog.Active := False; Close;
end
else begin
MessageBox(Self.Handle, '密码不正确,请重新输入!','错误提示',MB_OK+MB_ICONEXCLAMATION);
PwdEd.SetFocus;
TbOp.Active := False;
end;
end
else begin
MessageBox(Self.Handle, '没有该用户!','错误提示',MB_OK+MB_ICONEXCLAMATION);
NameEd.SetFocus;
TbOp.Active := False;
end;
if TbOp.Active = True then TbOp.Active := False;
if TbLog.Active = True then TbLog.Active := False;
end;procedure TFmLogin.CancelBtnClick(Sender: TObject);
begin
Application.Terminate;
end;end.
应在工程文件中写登陆窗口代码
原理是:登录对话框并非主窗口,所以最好用ShowModel模态显示,
可以写一个类似于MessageDlg的函数,这样很好用。
在project里面写也可以!