登录框问题(50分)

  • 主题发起人 moneytea
  • 开始时间
M

moneytea

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望我的程序在刚刚运行的时候,在主窗体弹出之前,弹出一个登录框。
所以我在那个登录框的creatform函数中用 form1.active:=false;
form1就是主窗体,但是编译的时候他就说 can not assign read-only 属性
如果我要实现上述登录框功能应该怎样做呢?
 
.dpr文件:
==================================
program Project1;

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

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
if form2.ShowModal = 1 then
begin

form2.hide;
form2.Free;
Application.Run;

end;

end.

登录窗口:
=======================================
unit Unit2;

interface

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

type
TForm2 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);
begin

if edit1.Text = '123' then
begin
modalresult:=1;
if form1<>nil then form1.Show;
end;

end;

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

end.
 
对啊 active是个只读属性 表示窗体活动否,你为什么要这样呢?你可以这样啊
try
form1.create(self) ;
form1.showmodal ;
 
简单办法:建立一个登录窗体form1一个主窗体main
然后在主窗体的onshow事件中写入如下代码:
begin
F_main.createfrom(Tf_form1,f_form1);
f_form1.showmodal;
end;
当然,你只要把form1的position设置为awayontop,这样就可以屏蔽主窗体了
 
两个窗口FormMain在auto create,FormLogin在Available里。
在程序文件中:
Application.Initialize;
FormLogin:=TFormLogin.Create(Application);
if FormLogin.ShowModal=MrOk then
begin
Application.CreateForm(TFormMain, FormMain);
Application.Run;
end;


FormLogin里验证完密码后加 ModalResult:=MrOk;
取消里用 ModalResult:=MrCancel;
 
把登陆做成DLL吧
 
如果要登录框出现在主窗体之前,必须修改工程文件(.dpr);
首先,建立主窗体,登录窗体;属性不用特别设置;
其次,修改工程文件;如下:
begin
Application.Initialize;
EntryFrm:=TEntryFrm.Create(Application);
if EntryFrm.ShowModal=mrOK then
begin
Application.CreateForm(TMainFrm, MainFrm);
end;
EntryFrm.Free;
Application.Run;
end.

注意:在登录单元内如果确定登录失败了,要调用application.terminate;
 
把主窗口和登录窗口都设为普通窗口,然后在主窗口的show事件中f_login.showmodal;
设置f_login的返回值,或者登录失败就直接退出程序。
这样最简单了,不用特别控制。
 
多人接受答案了。
 
顶部