procedure TForm1.Label1Click(Sender: TObject);
begin
if F= False then //F为一全局变量
form2.show
else
form3.show;end;form2为登陆窗体,在登陆验证通过后,怎样在登陆窗体(form2)与Form1窗体间通信?使得登陆验证通过后出现form3。
begin
if F= False then //F为一全局变量
form2.show
else
form3.show;end;form2为登陆窗体,在登陆验证通过后,怎样在登陆窗体(form2)与Form1窗体间通信?使得登陆验证通过后出现form3。
解决方案 »
- 关于提取计算机系统信息
- 显示服务器文件
- idtcpsrever discnnect 后是否释放资源
- 初学delphi的疑惑。。。。
- 小弟新来,问各位大大关于Delphi与Access 连接的问题
- 像“美萍”VOD这样的点播系统,它的音频视频数据是怎么传输的呢?
- 请问Application.terminated与halt有什么不同?
- 如何用一个XML文件的数据初始化一个T_BOOK表的数据
- 为什么Delphi在我的机子上运行不了,而在我朋友的机子上可以呢?
- 怎么打印报表????????
- Delphi automation 怎么和脚本(vba,js)传递数组
- 你好,我想请问一下你我用delphi做的软件,写的一个数据库备份功能,但是点击后却找不到数据库文件?你能帮我解决一下吗?
在FORM2的登录界面验证后,调用FROM3.SHOW
form3.show;
form2.close;
2.在form1中设定一全局变量vg_dl:boolean,在form1的相关处理中这样写
form1.vg_dl:=false;
form2.showmodal;
if form1.vg_dl=false then
messagebox(application.handle,'未通过身份验证','信息',mb_ok or mb_iconinformation)
else
form3.show;在form2的身份验证按钮中写代码
if 通过身份验证 then
form1.vg_dl:=true
else
form1.vg_dl:=false;
在form2的关闭按钮中写代码
form1.vg_dl:=false;
form2.close;
form3.show;
form2.close;
form2为登陆验证窗体,不可能在form2的身份验证按钮中写 form3.show;
procedure TForm1.Label1Click(Sender: TObject);
label
mylabel;
begin
mylabel:if F= True then
form3.show
else
form2.show; //登陆验证窗体
goto mylabelend;
这样改是希望form2.show验证通过后,继续执行goto mylabel,这样就会执行form3.show,但是登陆窗体验证通过后,程序并不能返回到原来form2.show; 后面的位置继续执行。
建立一个名为saide的全局变量,每点击不同的Label,为全局变量赋相应的值,如下所示:procedure TForm1.Label1Click(Sender: TObject);
begin
if F= False then
form2.show;
else
saide:='form3.show';
form3.show;
end;在登陆窗体中
procedure TForm2.Button1Click(Sender: TObject);
begin
//加一些验证登陆的代码
Form2.hide;
saide; //在这里用全局变量确定那一个窗体出现
end;可是编译通不过,请问怎么改?
[Error] Unit2.pas(32): Statement expected, but expression of type 'String' found
[Fatal Error] Unit1.pas(33): Could not compile used unit 'Unit2.pas'
写个进程吧。
procedure TForm1.Label1Click(Sender: TObject);
begin
if not F then //F为一全局变量
form2.show; if F then
form3.show;
end;
FORM1.F:=true;
然后再执行一次TForm1.Label1Click(Sender: TObject);
就行了!
除非不得已,不建议使用全局变量,那样以后修改更会搞不清楚在Form1中(主窗体?)打开登录窗体Form2,在Form2中验证用户密码等,根据通过与否确定是否显示Form3。
建议把调用等流程控制代码都放在同一处,这样要清晰一些参考方法,全部在Form1中控制:1、在Form2中定义一个属性,保存验证状态,如
FPassed: Boolean;
property Passed: Boolean read FPassed write FPassed;
在Form2中如验证通过则
FPassed := True;2、在Form1中调用
Form2 := TForm2.Create(Application);
Form2.Passed := False;
Form2.ShowModal;
if Form2.Passed then
Form3....
else
...;
Form2.Free;
program KBS;uses
Forms,
Windows,
MainF in 'MainF.pas' {frmMain},
SplashF in 'SplashF.pas' {frmSplash},
mainDM in 'mainDM.pas' {dmMain: TDataModule},
LoginF in 'LoginF.pas' {frmLogin};{$R *.RES}var
frmMain: TfrmMain;
dmMain: TdmMain;
begin
Application.Initialize;
//显示封面
SplashF.Show;
try
//创建需要的资源
Application.CreateForm(TdmMain, dmMain);
Application.CreateForm(TfrmMain, frmMain);
//...其它
finally
SplashF.Close;
end; if LoginF.Login() then //呼叫登录
Application.Run;
end.2.在登录的LoginF.pas中:
unit LoginF;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons;type
TfrmLogin = class(TForm)
pnl1: TPanel;
edUserName: TEdit;
lblUserName: TLabel;
edPasswd: TEdit;
lblPasswd: TLabel;
btnOK: TBitBtn;
btnCancel: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure btnOKClick(Sender: TObject);
private
{ Private declarations }
FTryTimes: Integer;
function CheckUserInfo(AUserName, APassword: string): Boolean;
public
{ Public declarations }
end;function Login: Boolean;implementation{$R *.DFM}function Login: Boolean;
begin
//动态创建登录窗口
with TfrmLogin.Create(nil) do
begin
//只有返回OK的时候认为登录成功
Result := ShowModal() = mrOk;
Free;
end;
end;function TfrmLogin.CheckUserInfo(AUserName, APassword: string): Boolean;
begin
//简单的验证,可以修改为其它的方式
Result := (AUserName = 'lihd' ) and (APassword = 'P@ssw0rd');
end;procedure TfrmLogin.FormCreate(Sender: TObject);
begin
//尝试登录的次数,初始化为0
FTryTimes := 0;
end;procedure TfrmLogin.btnOKClick(Sender: TObject);
begin
Inc(FTryTimes); //尝试登录的次数 + 1
if CheckUserInfo(edUserName.Text, edPasswd.Text) then
begin
//如果通过检查,返回OK
Self.ModalResult := mrOk;
end else
begin
if (FTryTimes > 2) then
begin
MessageBox(self.Handle, '你已经尝试登录3次,请联系系统管理员。', '错误', MB_OK + MB_ICONERROR);
Self.ModalResult := mrCancel;
Exit;
end; //通不过,报错
MessageBox(self.Handle, '错误的用户名或密码,请重新输入!', '错误', MB_OK + MB_ICONERROR);
edUserName.SetFocus();
edUserName.SelectAll();
end;
end;end.