delphi登录窗口关闭主窗口也关闭?怎么办啊?

unitA1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Form... unit A1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
UserTxt: TEdit;
PSWTxt: TEdit;
CancelBtn: TButton;
OKBtn: TButton;
Panel1: TPanel;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure UserTxtKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure PSWTxtKeyPress(Sender: TObject; var Key: Char);
procedure OKBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses A2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Label3.Caption:='用户名:Admin'+#13+'密码:123';
end;

procedure TForm1.UserTxtKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then
PSWTxt.SetFocus;
end;

procedure TForm1.PSWTxtKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
begin
OKBtn.SetFocus;
Exit;
end;
if(Key<#48)or(Key>#57) then
Key:=#0;
end;

procedure TForm1.OKBtnClick(Sender: TObject);
begin
if(UserTxt.Text='Admin')and(PSWTxt.Text='123') then
Form2.Visible:=True
else
begin
Label3.Caption:='错误!。'+#13+'用户名为:Admin'+#13
+'密码为:123'+#13+'注意大小写,请重新再试。';
CancelBtn.Click;
end;

end;

procedure TForm1.CancelBtnClick(Sender: TObject);
begin
UserTxt.Text:='';
PSWTxt.Clear;
UserTxt.SetFocus;
end;

end.
在哪加什么代码,登录成功后登录窗口关闭主窗口不关闭?
展开
 我来答
天马座的流星拳
推荐于2016-10-31
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

这个问题有两种实现方式,看哪种适合你。

方案一:窗体隐藏法。

这个方案其实说起来很简单,即在登录窗口使用时Create并显示,不使用时Close并Free。程序以主窗口为调用各窗口的主窗体,程序运行时即创建该窗口。


方案二:修改DPR中调用顺序法

这里,是一个未修改工程属性和代码和DPR文件,与后面的做个比较:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {frmMain},
  Unit2 in 'Unit2.pas' {frmLogin};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmLogin, frmLogin);
  Application.Run;
end.

下面,你需要先修改工程属性,点击菜单Project -> Options,在Forms属性页中,将自动创建的窗口Auto-create Forms中清掉非必要的窗体,特别是主窗体和登录窗体,这样Main Form 处也就空了。点击OK返回后,相应的,DPR单元也发生了改变,我们还要对他书写代码,这里不细说了。

然后,修改登录窗口,在窗体类的后面,var的前面增加一个函数声明,并在实现他,见下面的代码例子:

// 上面的代码不贴出来了
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  // 登录窗体调用方法, 使用这个方法可以减少调用处的代码量, 也方便统一的对该窗体进行操作
  function ShowLoginForm(): Boolean;

var
  frmLogin: TfrmLogin;

implementation

{$R *.dfm}

function ShowLoginForm(): Boolean;
begin
  frmLogin := TfrmLogin.Create(nil);
  try
    // 获取窗体返回值, 下面被屏蔽的代码在功能上与本行是一样的
    Result := FormLogin.ShowModal=mrOk;
//    if Form2.ShowModal = mrOk then
//      Result := True     // 若窗体返回mrOk, 表示登录成功, 本函数返回True
//    else
//      Result := False;   // 若窗体没有返回mrOk, 表示登录失败, 本函数返回False
  finally
    FreeAndNil(FormLogin);
  end;
end;
// 这里的代码就只贴这么多,怎么在点击按钮时设置ShowModal的返回值,具体看源代码文件包吧。

然后,我们返回DPR单元文件,对他进行修改。

在代码

  Application.Initialize;
  Application.Run;

之间,增加对Login窗体中增加的这个窗体的调用,并判断他的返回值。

  Application.Initialize;
  if not ShowLoginForm() then      // 若该函数返回False, 则登录不成功
    Exit;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;

好了,具体可以看我上传的附件里的源码。不过源码里的东西更多一些,因为我很早就上传到CSDN里了,不需要积分,也不会屏蔽下载的,那里的下载地址是: download。csdn。net/detail/ouyongke/6002261 


PS:这里没法上传,不知道为什么,没办法了。

典榴格C
推荐于2018-03-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
其实登陆窗体很好写的,只不过你思路不是很好,帮你写你个列子吧,Form1为主窗体,Form2为登陆窗体:

form1的 uses添加 unit2;

在form1的OnShow 事件写代码:

procedure TForm1.FormShow(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
Form2.ShowModal;
form2.Free;
end;

这个就是主窗体的代码,就这个就足够了!

下面是登陆窗口的代码:
登陆窗口设计为两个Edit组件,分别用来输入账号和密码!
两个Button组件,button1为确定 button2为取消

定义一个全局变量 例如: I: integer=0;

单击确定按钮:

procedure TForm2.Button1Click(Sender: TObject);
begin
if (Trim(Edit1.Text)='账号')and(Trim(Edit2.Text)='密码') then
begin
I := 1;
close;
end
else
begin
showmessage('用户名或密码错误。');
I := 0;
end;
end;

单击取消按钮:

procedure TForm2.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;

登陆窗口Onclose事件:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Int=0 then
Application.Terminate;
end;

你可以测试一下!
这样就可以实现你想要的。。其他的你再加上你自己的代码就可以了!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mit1208
2010-09-27
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
在DPR文件内
主窗口一般使用Application.createform创建.
登陆窗口使用Form2:=TForm2.create(Application);创建
这样在登陆窗口判断登陆信息成功的时候.使用Form2.Free可以正常释放掉.
然后显示主窗口.
可以从网上找些登陆窗口这样的实例代码看一下就明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhl_529
2015-09-28
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
那说明登录窗体是这个应用程序的主窗口。应该把主窗体设置为指定窗口,然后在该窗口创建时弹出登录窗口
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2db262e5f
2010-09-26
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
在dpr里,把主窗口设置为mainform
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式