如何设计用户登陆后进入主界面?(50分)

  • 主题发起人 主题发起人 simpsonhe
  • 开始时间 开始时间
S

simpsonhe

Unregistered / Unconfirmed
GUEST, unregistred user!

用户登陆需用户名和密码,他们都放在数据库;关键是在用户名和密码正确后进入主界面,
怎么关连?怎么把登陆窗体关掉然后再打开主窗体???
各位能不能给一些思路或者方法小弟!?小弟是初学者!
谢谢!
 
搜索论坛把!很多这种问题

主要在项目文件里面做手脚!
 
创建一个登录窗体把
FormStyle 属性设为 fsStayOnTop,
在主窗体的FormActivate事件中
procedure TMainForm.FormActivate(Sender: TObject);
begin
LoginForm.ShowModal;
end;

具体密码验证则在你的登录窗体里实现
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=957372
 
不要把登陆窗口做成主窗口
程序启动时让主窗口隐藏,让登陆窗口显示
登陆后关闭登陆窗口,让主窗口显示
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=906881
-------------------------------------------------------------
问题:密码输入三次的问题?? ( 积分:100, 回复:18, 阅读:162 )
分类:数据库-文件型 ( 版主:cAkk, 吴剑明 )
来自:小城月光, 时间:2002-2-4 21:41:00, ID:906881 [显示:小字体 | 大字体]
[:(]各位大虾,我编的程序密码输入窗口放在主窗口的onpaint事件中,但老出错,主窗口dyform关不掉,请教!!!
procedure Tdyform.FormPaint(Sender: TObject);
var i,bn:integer;

begin
i:=1;
if password=false then //密码窗口是否显示
begin
password:=true;
repeat
bn:=formdl.ShowModal ;//第二次执行就出错??
if bn=mrok then //确定
if formdl.kl.text='zgc' then
i:=100
else
begin
i:=i+1;
if i>3 then
dyform.Close
else
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
end
else if bn=mrcancel then
begin
i:=100;
dyform.Close ;
end;
until i>3;
end;



来自:tseug, 时间:2002-2-4 21:49:00, ID:906895
每当dyForm关闭时,又会触发OnPaint事件的!


来自:crazycock, 时间:2002-2-4 22:00:00, ID:906913
begin
i:=1;
if password=false then //密码窗口是否显示
begin
password:=true;
repeat
bn:=formdl.ShowModal ;//第二次执行就出错??_____________________当然要出错了,已经执行过一次了。
if bn=mrok then //确定
if formdl.kl.text='zgc' then
i:=100
else
begin
i:=i+1;
if i>3 then
dyform.Close
else
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
end
else if bn=mrcancel then
begin
i:=100;
dyform.Close ;
end;
until i>3;
end;
对于要求密码输入的窗体,最好放到OnShow里面或者在OnCreate里写比较好。


来自:ugvanxk, 时间:2002-2-4 22:01:00, ID:906916
你干脆用个 确定按钮为enable=false,当输入正确 enable=true
或 用全局变量 当错误时,k1.text:=''提示重新输入


来自:小城月光, 时间:2002-2-4 22:58:00, ID:907033
[?]各位大虾我换了的写法放在确定按钮中,但还有问题,请教!!
procedure Tformdl.qdButtonClick(Sender: TObject);
var i:integer;

begin
i:=0;
repeat
//程序第二次执行repeat时好像停不下来,所以连续三次出现出错提示???
if kl.text='zgc' then
begin
formdl.close;
dyform.show;
end
else
begin
i:=i+1;
if i>3 then
close
else
begin
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
kl.text:='';
kl.SetFocus ;
end
end;


until i>3;



来自:tseug, 时间:2002-2-4 23:25:00, ID:907074
if kl.text='zgc' then
begin
formdl.close; //改成 formdl.Hide试试
dyform.show;
end
else



来自:Yakuu, 时间:2002-2-4 23:45:00, ID:907105
Hide
正确了再free掉


来自:小城月光, 时间:2002-2-5 11:30:00, ID:907838
楼上的大虾:小弟我按照你们的办法作了可还是不行,问题在于第一次出错提示后程序并没
有等待kl.text的第二次输入,而是直接执行repeat下面的语句所以连续三次出现messagelg
提示信息,怎么办?请教!!!




来自:tseug, 时间:2002-2-5 11:31:00, ID:907840
把代码发给我看看吧. tseug@263.net


来自:catbrother, 时间:2002-2-5 11:40:00, ID:907877
改在onshow里面也可以啊,密码不对用exit就行了!


来自:LiWD, 时间:2002-2-5 11:40:00, ID:907878
我有作过这方面的程序,不过,处理方法和你的不一样,如果需要,可发给你.lwd@netease.com


来自:小城月光, 时间:2002-2-5 14:54:00, ID:908321
tseug:代码已发送,请查收!!
liwd:很希望看到你的代码,如果密码有用户验证权限设置更好,谢谢!
我的地址:moontowns@163.com


来自:jrq, 时间:2002-2-5 15:29:00, ID:908400 | 编辑
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
//combobox1输入用户名 edit1输入密码
if (edit1.text='') and (combobox1.text='')
then
begin
messagedlg('没有输入信息,请您输入信息!',mtinformation,[mbok],0);
combobox1.SetFocus;
exit;
end
else
begin
if (edit1.text='') then
begin
messagedlg('请您输入密码!',mtinformation,[mbok],0);
edit1.SetFocus;
exit;
end
else
if (combobox1.text='') then
begin
messagedlg('请您输用户名!',mtinformation,[mbok],0);
combobox1.SetFocus; exit;
end
end;

if (edit1.text<>'')and(combobox1.text<>'')
then
begin
table2.open; //以超级用户身份打开
if edit1.text=Table2.FieldByName('超级密码').AsString then
begin
form1.show;
form3.close;
table2.Close;
end
else
begin
table1.open; // 以普通用户身份打开
if edit1.text=Table1.FieldByName('密码').AsString then
begin
form1.show; //口令正确,进入系统
form3.close;
table1.Close;
end
else
if number<=1 then //密码不正确
begin
number:=number+1;
messagedlg('密码输入错误!请您再输入一次!请注意“用户名”与“口令”是否匹配!',mtinformation,[mbok],0);
edit1.text:='';
edit1.SetFocus;
//table1.Close; //注意此时不能用 table1.Close语句关掉table1表,因为还要用到
end
else
if number>1 then //密码输入次数为三次时,取消进入系统
begin
messagedlg('口令输入错误!您没有权限登录系统!系统禁止您进入!请按“ OK ”按钮退出系统!',mtError,[mbok],0);
ComboBox1.text:='';
Edit1.text:='';
table1.Close;
form3.close;
form3.free;
application.Terminate; //退出系统
end;
end;

end;
end;

这是我很久以前学习delphi时写的一段小程序~

翻了半天终于找到(看来养成保存资料的习惯是多么的重要~ :)
你看看能否帮上忙?


来自:tseug, 时间:2002-2-5 16:27:00, ID:908612
这样该就可以了, 没有初始化nCheck变量, 你自己加吧.
unit yhdl;

interface

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

type

Tformdl = class(TForm)
Label1: TLabel;
kl: TEdit;
qdButton: TButton;
qxButton: TButton;
procedure qxButtonClick(Sender: TObject);
procedure qdButtonClick(Sender: TObject);
procedure qdButtonKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
nCheck : Integer;
public

{ Public declarations }
end;

var
formdl: Tformdl;
s:char;
f:text;
implementation

uses mainform

{$R *.DFM};

procedure Tformdl.qxButtonClick(Sender: TObject);
begin
formdl.close;
end;

procedure Tformdl.qdButtonClick(Sender: TObject);
begin
Inc(nCheck);
if nCheck < 3 then
begin
if kl.text='zgc' then
begin
formdl.close;
dyform.show;
end
else
begin
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
kl.text:='';
kl.SetFocus ;
end;
end
else
begin
Close;
end;
end;

procedure Tformdl.qdButtonKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=$70 then
begin
formdl.release;
dyform.show;
end
end;
end.




来自:cfx, 时间:2002-2-5 16:29:00, ID:908618
为什么放在ONPAINT
里面
应该放在ONCREATE或者ONSHOW里面的


来自:小城月光, 时间:2002-2-5 19:59:00, ID:909126
1.放在onpaint里是我从王小华的《delphi5应用程序设计实例》中学来的,我发现源程序可能有错,是否正确??作者不要生气哦:)
2.以下是我改进的代码,有两个问题请高手回答!!!
3.谢谢tseug,小弟是初学者,Inc(nCheck)看不懂???
4.form.realease与form.close form.free有何区别??
unit yhdl;

interface

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

type

Tformdl = class(TForm)
Label1: TLabel;
kl: TEdit;
qdButton: TButton;
qxButton: TButton;
procedure qxButtonClick(Sender: TObject);
procedure qdButtonClick(Sender: TObject);
procedure qdButtonKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public

{ Public declarations }
end;

var
formdl: Tformdl;
s:char;
f:text;
i:integer;//i在这儿定义但如何赋值为0???又不能放在Tformdl.qdButtonClick中
implementation

uses mainform

{$R *.DFM};

procedure Tformdl.qxButtonClick(Sender: TObject);
begin
formdl.close;
end;

procedure Tformdl.qdButtonClick(Sender: TObject);


begin
if kl.text='zgc' then
begin
formdl.free;//在这句前我加上formdl.close结果dyform窗体出不来,为什么??
dyform.show;
end
else
begin
i:=i+1;
if i>2 then
begin
messagedlg('你是非法用户!!,退出系统!!',mtwarning,[mbok],0);
formdl.close;
formdl.free;
end
else
begin
if i=1 then
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0)
else if i=2 then
messagedlg('您输入的密码不正确,还有一次机会!!',mtwarning,[mbok],0);
kl.text:='';
kl.SetFocus ;
end
end;
end;


来自:zhumoo, 时间:2002-2-5 21:59:00, ID:909353
听课。


来自:tseug, 时间:2002-2-6 9:00:00, ID:909882
Inc(nCheck) 相当于 nCheck := nCheck + 1; 只不过效率高些


来自:小城月光, 时间:2002-2-6 11:47:00, ID:910601
谢谢各位大虾,小弟送分!!


 
多人接受答案了。
 
后退
顶部