该应用程序有一个登录表单和一个主表单。
应用程序的DPR文件包含代码,以先加载登录表单,当登录表单返回成功登录时,创建和加载主表单。
当用户通过主表单中的菜单命令注销时,它应关闭主表单并加载登录表单。
仅当用户在主表单中选择退出(或者在登录表单中取消)时,应用程序才会退出。
是否可以使用应用程序的DPR文件中的代码来实现这一点?
以下是目前存在的代码:
program H;
uses
Forms,
SysUtils,
Registry,
MidasLib,
Dialogs,
Controls,
uDatamod in 'uDatamod.pas' {datamod: TDataModule} ,
uMain in 'uMain.pas' {fMain} ,
uMtlUpd in 'uMtlUpd.pas' {fMtlUpd} ,
uReportPrv in 'uReportPrv.pas' {fReportPrv} ,
uCamera in 'uCamera.pas' {fCamera} ,
uConfig in 'uConfig.pas' {fConfig} ,
uFuncs in 'uFuncs.pas',
uLogin in 'uLogin.pas' {fLogin} ,
uAdmin in 'uAdmin.pas' {fAdmin};
// MidasLib is required.
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.Title := 'HTech';
if ((ParamCount = 1) and (UpperCase(ParamStr(1)) = '/CONFIG')) or
(getHServerHostName = EmptyStr) then
begin
Application.CreateForm(TfConfig, fConfig);
Application.Run;
end
else
begin
if not testHServerConnection then
begin
ShowMessage('Error: Could not connect to HServer');
Exit;
end;
Application.CreateForm(Tdatamod, Datamod);
while not TerminateApplicationFlag do
begin
fLogin := TfLogin.Create(Application);
try
if fLogin.ShowModal = mrOk then
begin
LoggedInEmployeeID := fLogin.FEmployeeID;
LoggedInEmployeeNm := fLogin.edtFirstName.Text + ' ' +
fLogin.edtLastName.Text;
AdminLogin := fLogin.FAdminUser;
FinanceLogin := fLogin.FFinanceUser;
end
else
begin
FreeAndNil(fLogin);
FreeAndNil(Datamod);
Exit;
end;
finally
// FreeAndNil(fLogin);
end;
if AdminLogin then
Application.CreateForm(TfAdmin, fAdmin)
else
begin
FreeAndNil(fLogin);
if not Assigned(fMain) then
Application.CreateForm(TfMain, fMain);
fMain.FHServerHost := getHServerHostName;
end;
Application.Run;
end;
end;
end.
上面的代码问题在于,经过一次迭代后(用户在主表单中执行注销之后),应用程序退出(控制返回到操作系统),因为"fLogin.ShowModal"在不显示登录窗体的情况下退出。以下是从主表单获取的代码:
Procedure LogoutProcedure;
begin
TerminateApplicationFlag := False;
Close;
end;
Procedure ExitProcedure;
begin
TerminateApplicationFlag := True;
Close;
end;
我遇到了困难,希望能得到任何建议或更正来让它工作起来。
提前感谢。
敬礼,
Steve Faleiro
TLoginForm.Create
进行创建。不要使用Application.CreateForm
。使用ShowModal
显示它。当它返回时,决定是否继续。如果继续,创建您的主窗体,这次使用Application.CreateForm
。然后调用Application.Run
。很抱歉这全部都是注释,但是一个过于热心的管理员已经关闭了问题,尽管我可以理解您的问题。 - David Heffernan