在dpr单元中
Application.Initialize; frmSplash:=TfrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Update; LoginForm := TLoginForm.Create(Application);
LoginForm.Show;
frmSplash.Hide;
frmSplash.Free; Application.Run;
Application.Initialize; frmSplash:=TfrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Update; LoginForm := TLoginForm.Create(Application);
LoginForm.Show;
frmSplash.Hide;
frmSplash.Free; Application.Run;
解决方案 »
- delphi 一个加解密程序。大神们看看 错在那?
- 如何屏蔽stringgrid的SelectCell事件
- telnet的问题?命令分开发送可以,一次发送不行?
- 惊天大秘密: (微软真无耻) 目前微软推广的ERP Attain 居然是用Delphi开发的,而且这套系统的二次开发语言是纯Pascal语法!
- 我的Blog文章:我的前沿科学(科学史上最新发现!将轰动整个学术界 )
- ■■■■■使用Servers页中的OutlookApplication时报告“类没有注册”怎么回事?
- 请问:我要对一个可执行文件的内容(二进制)进行修改,意思就是在后面添加一些无关紧要的内容,而不影响程序的执行,该怎么做呢?
- 在程序中如何得到本机的名称?(来者有分)
- 报错“尚未调用CoInitilize”。
- Ado报“bof或Eof其中一个为真“错误怎么解决?
- 一个奇怪的SQLServer问题。。。
- 如何做一个TImage中图片的镜像?
Application.Initialize; frmSplash:=TfrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Update; LoginForm := TLoginForm.Create(Application);
LoginForm.Show;
frmSplash.Hide;
frmSplash.Free; Application.Run;
frmSplash.Show;
frmSplash.Update; LoginForm := TLoginForm.Create(Application);
LoginForm.Show;
frmSplash.Hide;
frmSplash.Free; Application.Run;
可以的
你可一让一个From响应另一个事件,
提前调用另一个From,不就解决了吗?
Application.Initialize;
Application.CreateForm(TfrmLogin, frmLogin);
frmLogin.showmodal;
if frmLogin.ModalResult=1 then
begin
frmLogin.Free;
Application.CreateForm(Tfrmmain, frmmain);
end
else
frmLogin.Free;
Application.Run;
2、在主窗体的OnShow事件中写代码。
3、显示Login窗口的代码应写(口令输入窗体应该使用模态方式打开)
if Loging.ShowModal = mrOk then
//用户名和口令已通过校验,进入主窗体
else begin
Close; //用户按取消或口令输入不正确
Application.Trimalate;
end;
4、TLogin窗口的“确定”按钮中检测用户名和口令,如正确返回mrOk;
“取消”按钮返回 ModalResult := mrCancel;
或者直接设置它的Kind = mrCancel
Forms,
UnitDM in 'UnitDM.pas' {DM};
Unit2 in 'Unit2.pas' {Formlogin};
Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TDM, DM);//CreateLogin是显示登录筐的函数,在登录筐的unit中定义
//语句是
//Result := false;
//Formlogin := TFormLogin.Create(nil);
//FormLogin.ShowModel;
//Result := FormLogin.LoginSucc;
//FormLogin.free;
//////////////////////////////////////// if CreateLogin then
begin
Application.CreateForm(TForm1, Form1);
Application.Run else
Application.close;
end.
1.单独的登录窗体, 完成登录功能, 其对外只提供一个接口函数:
function Login(var aUserID: String) : Boolean;
外部只要调用此函数即可完成登录2.应用程序的DPR文件中调用这个函数,完成登录,成功则进入主循环,否则,退出.3.如果觉得方法还不错,就给分吧!!
unit uLogin;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, uPublic_Rights;type
TfrmLogin = class(TForm)
Label1: TLabel;
Label2: TLabel;
edUserID: TEdit;
edPassword: TEdit;
btnOK: TBitBtn;
btnCancel: TBitBtn;
procedure edUserIDKeyPress(Sender: TObject; var Key: Char);
procedure edPasswordKeyPress(Sender: TObject; var Key: Char);
procedure btnOKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
m_RetryNum : Integer;
{ Private declarations }
public
{ Public declarations }
end;function Login(var aUserID: String) : Boolean;implementation{$R *.DFM}function Login(var aUserID: String) : Boolean;
var
frmLogin: TfrmLogin;
begin
Result := False;
aUserID := '';
frmLogin := TfrmLogin.Create(nil);
try
if frmLogin.ShowModal = mrOk then
begin
Result := True;
aUserID := frmLogin.edUserID.Text;
end;
finally
FreeAndNil(frmLogin);
end;
end;procedure TfrmLogin.FormCreate(Sender: TObject);
begin
m_RetryNum := 1;
end;procedure TfrmLogin.edUserIDKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then edPassword.SetFocus();
end;procedure TfrmLogin.edPasswordKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then btnOK.Click;
end;procedure TfrmLogin.btnOKClick(Sender: TObject);
var
aUserRights: TUserRights;
begin
ModalResult := mrNone;
if edUserID.Text = '' then
begin
Application.MessageBox('您没有输入用户代号,请你输入后再试!','提示',mb_OK + MB_ICONINFORMATION);
edUserID.SetFocus();
exit;
end;
aUserRights := TUserRights.Create(edUserID.Text);
try
if not aUserRights.IsValidUser(edPassword.Text) then
begin
Inc(m_RetryNum);
if m_RetryNum > 3 then
begin
ModalResult := mrNo;
Application.MessageBox('对不起,您已三次输错用户代号或密码.系统将退出.','提示',mb_OK + MB_ICONSTOP);
end else
begin
Application.MessageBox('对不起,您输入的用户代号或密码有误,请您重新输入.','提示',mb_OK + MB_ICONWARNING);
edUserID.SetFocus();
end;
end else ModalResult := mrOK;
finally
FreeAndNil(aUserRights);
end;
end;//DPR文件
program RecordClient;uses
Windows,
Forms,
uMain in 'uMain.pas' {frmMain},
uLogin in 'QXGL\uLogin.pas' {frmLogin},
.......var
aUserID: String;
bLogined: Boolean;
begin Application.Initialize;
Application.Title := 'XXXX';
bLogined := False; if InitADOConnection() then //如果连接数据库成功则登录,否则退出
begin
bLogined := Login(aUserID);
end else
begin
Application.MessageBox('无法连接到数据库,请与管理员联系. 系统将退出.', '提示', MB_OK+MB_ICONSTOP);
end; //如果登录成功,则进入系统,否则程序结束
if bLogined then
begin
;
// 1.建立主窗体
Application.CreateForm(TfrmMain, frmMain);
........ // 6.进入消息循环
Application.Run;
end;end.
首先你这个工程有没有设置mainform?如果说设置了,那么这个主form在验证完成后你怎么处理?(请你注意,我这里需要实现的是一个form分流问题,就是说在验证完成后我也不知道会进入哪个form,比如如果权限是"超级管理员"进入form1,“管理员”进入form2,“一般用户”进入from3,而不是单纯的说验证通过后就继续主form).另外
Application.Initialize;
Application.Title := 'XXXX';
bLogined := False;
这里的两个变量,是否就是全局变量?
var
s :string
b :boolean;
begin
s :='password';
b := InputQuery('Input Box', 'Prompt', s)
if b then
begin
Application.CreateForm(TfrmMain, frmMain);
.....
......run end;
end;
DM都不能作为主窗体。你在Application.Create 之前可以用 TFrom.Create
创建窗体,而不作为主窗体。
if bLogined then
begin
;
// 1.建立主窗体
if aUserID= 'AAA' then Application.CreateForm(TfrmMain_AAA, frmMain)
else if aUserID = 'BBB' then Application.CreateForm(TfrmMain_BBB, frmMain)
else if aUserID = 'CCC' then ....... ........ // 6.进入消息循环
Application.Run;
end;end.
也就是说,你用Application.CreateForm()创建的第一个窗体将成为主窗体,你可以不用管Project Options中设定的主窗体!Delphi以你的Dpr程序为准!另外,如果执行了Application.Run;程序才会进入主线程的消息循环中,如果不执行这个,程序就会直接结束!呵呵,祝你进步!!