delphi子窗口先弹出,输入密码后再显示主窗口的formcreat事件

2025-03-07 03:13:49
推荐回答(4个)
回答1:

以一个全新项目来说,假设Form1为主窗体,Form2为登录窗体
,Form2上放一个CheckBox1 那么:
1.打开项目文件 Project1.dpr,按如下代码修改
2.打开 Unit2.pas 按后面代码修改

之后编译运行,钩上CheckBox1表示登录成功,否则表示登录失败,实际编程时可向 Form2.bLoginOK 赋值。
======================================================
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var
FrmLogin: TForm2;
begin
Application.Initialize;
FrmLogin := TForm2.Create(nil);
try
FrmLogin.ShowModal;
if not FrmLogin.bLoginOK then
Application.Terminate;
finally
FrmLogin.Free;
end;
Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TForm2, Form2);
Application.Run;
end.

=====================================================
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
CheckBox1: TCheckBox;
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
bLoginOK: Boolean;
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.CheckBox1Click(Sender: TObject);
begin
bLoginOK := CheckBox1.Checked;
end;

end.

回答2:

现设置一个全局变量(初始值为false),在登陆窗口中通过口令对全局变量进行赋值,口令对了,将变量设置为true,再打开主界面就可以了。不输入口令,就直接退出。
示例如下:
formcreat()
dl.showmodel;
if not passed
then exit ;
.......

回答3:

先在
{$R *.dfm}
uses unit2;
然后在主窗体的onshow事件里写
form2.showmodel;

回答4:

何不把输密码子窗口放到前面??