delphi – 获取变量

我获得了一个如何在创建主窗体之前创建登录屏幕的示例.
Howwever我不知道如何在登录屏幕关闭之前获取变量.我试图传递变量

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;

如果登录成功,则执行方法的实现需要填写这些详细信息.

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

所以对于TMainFormFrm,你会添加一个名为InitialiseWithLoginInfo的公共方法.

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,'Password Protected Delphi application');
  end;
end.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...