gpt4 book ai didi

delphi - 获取变量

转载 作者:行者123 更新时间:2023-12-03 15:46:42 24 4
gpt4 key购买 nike

我获得了一个有关如何在创建主表单之前创建登录屏幕的示例。但是我不知道如何在登录屏幕关闭之前获取变量。我正在尝试传递变量

SelectedUserName : String;
SelectedUserIdNo, SelectedCoyId : Integer;

从loginfrm到mainform进行进一步处理。

任何想法。

提前致谢。

主要代码如下:

program Pac;

{$R *.res}

uses
ExceptionLog, Forms,
MainForm in 'Main\MainForm.pas' {MainFormFrm} ,
Datamodule in 'Main\Datamodule.pas' {DataModuleFrm: TDataModule} ,
Login in 'Security\Login.pas' {LoginFrm};

begin
if tLoginFrm.Execute then
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainFormFrm, MainFormFrm);
Application.CreateForm(TDataModuleFrm, DataModuleFrm);
Application.Run;
end
else
begin
Application.MessageBox
('You are not authorized to use the application. The password is "delphi".',
'Password Protected Delphi application');
end;
end.

我的登录代码是:

unit Login;

interface

uses
Windows, .. .. ..;

type
TLoginFrm = class(TForm)
Label1: TLabel;
ButtOk: TButton;
ButtCancel: TButton;
cxMaskEditUserId: TcxMaskEdit;
cxMaskEditPw: TcxMaskEdit;
ButtReset: TButton;
Label2: TLabel;
QueryUser: TMSQuery;
MSConnectionMain: TMSConnection;
procedure ButtOkClick(Sender: TObject);
procedure CheckMenuAccess;
procedure ButtResetClick(Sender: TObject);
procedure FormShow(Sender: TObject);
public
SelectedUserName: String;
SelectedUserIdNo, SelectedCoyId: Integer;
{ Public declarations }
class function Execute: boolean;
end;

implementation

uses DataModule, MainForm, OutletListing;

{$R *.dfm}

class function TLoginFrm.Execute: boolean;
begin
with TLoginFrm.Create(nil) do
try
Result := ShowModal = mrOk;
finally
Free;
end;
end;

procedure TLoginFrm.FormShow(Sender: TObject);
begin
MSConnectionMain.Connected := True;
end;

procedure TLoginFrm.ButtOkClick(Sender: TObject);
begin
{ Verify users are in list of users }
With QueryUser Do
Begin
Active := False;
if cxMaskEditUserId.EditValue = Null then
ParamByName('UserId').Clear
ELSE
ParamByName('UserId').AsString := cxMaskEditUserId.EditValue;
if cxMaskEditUserId.EditValue = Null then
ParamByName('Userpassword').Clear
ELSE
ParamByName('Userpassword').AsString := cxMaskEditPw.EditValue;
Active := True;
If (FieldByName('UserId').IsNull) or
(cxMaskEditUserId.EditValue = Null) Then
Begin
cxMaskEditUserId.EditValue := Null;
cxMaskEditPw.EditValue := Null;
cxMaskEditUserId.SetFocus;
End
Else
Begin
OutletListingFrm := TOutletListingFrm.Create(Self);
SelectedUserIdNo := FieldByName('UserIdNo').AsInteger;
SelectedUserName := FieldByName('UserName').AsString;
OutletListingFrm.SelectedUserId := FieldByName('UserIdNo').AsInteger;
IF OutletListingFrm.ShowModal = mrOk THEN
BEGIN
SelectedCoyId := FieldByName('CoyId').AsInteger;
ModalResult := mrOk;
END
ELSE
ModalResult := mrCancel;
OutletListingFrm.Free;
End;

End;

end.

最佳答案

创建一条记录,其中包含要从登录表单返回的信息:

type
TLoginInfo = record
SelectedUserName: string;
SelectedUserIdNo: Integer;
SelectedCoyId: Integer;
end;

然后从登录类的Execute方法返回这样一条记录:

function Execute(out LoginInfo: TLoginInfo): Boolean;

如果登录成功,那么Execute方法的实现需要填写这些详细信息。

然后将信息传递到主窗体。您不能在对 Application.CreateForm 的调用中执行此操作。因此,您需要在 TMainFormFrm 上使用不同的方法,该方法可以在创建主表单后调用。该方法将接收成功登录返回的 TLoginInfo 记录。

因此,您将向 TMainFormFrm 添加一个名为 InitialiseWithLoginInfo 的公共(public)方法。

procedure InitialiseWithLoginInfo(const LoginInfo: TLoginInfo);

那么您的 .dpr 文件将如下所示:

var
LoginInfo: TLoginInfo;

begin
if tLoginFrm.Execute(LoginInfo) then
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainFormFrm, MainFormFrm);
MainFormFrm.InitialiseWithLoginInfo(LoginInfo);
Application.CreateForm(TDataModuleFrm, DataModuleFrm);
Application.Run;
end
else
begin
Application.MessageBox
('You are not authorized to use the application. The password is "delphi".',
'Password Protected Delphi application');
end;
end.

关于delphi - 获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14303213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com