首页 Delphi数据库编程讲座---第十讲 启动窗口,登录窗口设计

Delphi数据库编程讲座---第十讲 启动窗口,登录窗口设计

举报
开通vip

Delphi数据库编程讲座---第十讲 启动窗口,登录窗口设计Delphi数据库编程讲座---第十讲 启动窗口,登录窗口设计 , 作为一个完整的程序,启动窗口(又称为flash窗口)、用户登录窗口都是应该具备的。这里登录窗口与数据库有关,启动窗口的设 计与数据库无关,但为了整个数据库程序的完整性,心铃还是给大家 讲一下如何设计。 。 现在绝大部分软件在启动时都会首先出现显示版权、公司标志或 软件标志的一个窗口,有几秒种的延时,这就是启动窗口。这个启动 窗口一般来说有两个目的,上面说的是其一,是可视的,另外一个目 的是对于复杂的软件、大型软件、数据库软件,由于在启动时有...

Delphi数据库编程讲座---第十讲 启动窗口,登录窗口设计
Delphi数据库编程讲座---第十讲 启动窗口,登录窗口设计 , 作为一个完整的程序,启动窗口(又称为flash窗口)、用户登录窗口都是应该具备的。这里登录窗口与数据库有关,启动窗口的设 计与数据库无关,但为了整个数据库程序的完整性,心铃还是给大家 讲一下如何设计。 。 现在绝大部分软件在启动时都会首先出现显示版权、公司标志或 软件标志的一个窗口,有几秒种的延时,这就是启动窗口。这个启动 窗口一般来说有两个目的,上面说的是其一,是可视的,另外一个目 的是对于复杂的软件、大型软件、数据库软件,由于在启动时有大量 的初始化工作,有的程序可能需要十几秒的时间,如果不显示启动窗 口用户还可能以为电脑死机了呢,显示启动窗口既宣传一下软件又可 以让用户在程序初始化期间不致于感到心烦。 我们来研究一下这个启动窗口如何设计和运行。设计制做一般都 是在窗体上放置一个图片组件,让其充满整个窗体,调入已经设计好 的图片。然后设定此窗体的BorderIcons属性,将系统菜单、最大化最小化等按钮都取消,设定borderStyle属性为bsNone,即没有边框,这样运行后外观看来就是一幅图片。这种设计制做大家可以各显 神通。接下来一个值得思考的问题是如何让这个窗口在其他窗口初始 化之前就显示出来。这需要手工写代码来实现。我们在Project菜单 下执行“View Source”就可以看到程序是如何初始化的,一般是这种形式: program lklb; „ begin Application.Initialize; Application.Title := '劳保管理'; Application.CreateForm(TMainForm, MainForm); „ Application.CreateForm(Tflashwin, flashwin); Application.Run; end. 如果是这种形式肯定是不行的,因为flash窗体不可能在主窗体前运 行。下面是改写后的代码: var mydate:Tdatetime; {$R *.RES} begin flashwin:=Tflashwin.create(application); flashwin.show; flashwin.update; mydate:=gettickcount; while((GetTickCount-mydate) / 1000 <2) do; Application.Initialize; Application.Title := '社区卫生'; Application.CreateForm(TMainForm, MainForm); „ flashwin.Close; flashwin.free; Application.Run; 上面这段代码首先创建启动窗口,并延时两秒种后初始化程序,在主 窗口显示出来后再关闭启动窗口并释放内存。上面的代码可以再变通 一下:如果你的程序启动很慢,那么就把延时的两行代码删除吧,如 果你的程序启动很快就可以把延时时间再增加。上面的代码中启动窗 体的关闭代码写在Application.Run之前可充分保证在主窗口没显示之前启动窗口不会消失。 对多用户数据库程序来说,不同的用户有不同的权利,比如管理 员可以无任何限制、有的用户只有查询的权利没有修改的权利、有的 用户只可以录入数据但不能查询等等。所以在数据库程序启动时,需 要输入用户名和密码后才能进入,程序根据用户名找到用户的权限确 定哪些功能可以使用。大家首先看看心铃设计的一个登录窗口(图 19-1)。 图19-1登录窗口 登录窗口的设计可以是多种多样的,但一般应有用户名输入和密码输入两个文本框。心铃在设计上面这个登录窗口时是这么考虑的,登录窗口启动后自动将所有用户名列出,因为有用户喜欢用中文名,这样输入用户名时比较麻烦,况且用户名也不是保密的,主要用密码保护自己,所以用户名就无需再输入了,直接选择即可,只要密码输入正确即可。对于用户修改自己的密码和管理员管理用户这个功能,目前大部分数据库程序都放在了主窗口的菜单中,优点是用户可随时修改自己的密码,管理员可随时管理用户。心铃为了使得登录窗口能在别的程序中简单修改后重复使用,将所有的功能都集中到登录窗口了,缺点就是只能在登录时进行这些操作,不过一般这些操作不是很频繁的,所以所有功能放在登录窗口也不会造成太多的不方便。当用户输入正确的密码后,如果是管理员则提示是否进行一些诸如增加用户、权限修改等操作,如果回答“是”则激活下面的所有五个页面,如果不进行这些操作就直接进入主窗口了。如果是一般用户,则提示是否修改自己的密码,若回答“是”则只激活“修改密码”这个页面,其他四个页面是管理员专用,普通用户无法使用。这也是心铃设计的这个登录窗体的另一个缺点,就是每次登录时需要多按一次回车键,大家根据自己的喜好设计吧,无需学心铃的这种设计,只要大家掌握了原理就可以了。 在设计登录窗体之前,首先要保证数据库中要有一个用户数据表,数据表的记录应该至少有这么几个字段:用户名、密码、权限,其中密码最好是加密存放的。权限字段内容如何表示呢?可以有这么几个方 法:如果你的程序功能很多,比如有20项功能,用户可能有任意功能的组合,那么一般采用0、1这种方式表示,字段内容由20个0和 1组成的字符串构成,1代表有权限,0代表没有权限,从第一个字符开始对应相应的功能,这样程序就可判断出用户的权限了。如果程 序的功能分为几大块,比如查询、修改、查询修改,那么就可以简单 地设定,比如用A、B、C表示这三大功能。还有一种方式是上述两 种方式的结合,有点类似于组和单个用户双重控制的功能。 下面心铃先给出上面这个登录窗口的设计思路,读者在读懂思路后可 设计自己的登录方式。在窗体中加入数据库组件,在登录窗口启动后 将用户名读入到列表框中供用户选择自己的的名字,用户鼠标点击选 中自己的名称后自动将输入焦点移动到密码输入框中,用户可输入正 确密码后就可以进行密码修改或进入系统了。如是管理员可进行其他 一些操作。下面的五个页面是用PageCtrl实现的,在设计时是将五个页面都隐藏的,只有在用户输入正确的密码后需要进行操作时才根据 权限使得相应的页面显示出来。设定完毕按“退出”按钮可结束操作 进入主界面。为了操作方便,管理员要对用户进行操作时直接点击用 户名就可以自动将用户名添入到相应的输入框中。用户在退出登录窗 口时程序将根据用户的权限控制哪些按钮和菜单处于有效状态。 下面是部分程序代码供大家参考,程序中做了一个管理员万能密码, 以防当管理员忘记自己的密码后无法使用程序,但这是一个隐患,正 如当年WPS的万能密码一样,一旦被别人知道就再没有密码可言了, 对重要数据库程序建议不要采用这种方式,如果使用了万能密码,不 到万不得已时绝对不要使用。 “登录”按钮简化代码: procedure Tlogin.BitBtn1Click(Sender: TObject); begin s:=listbox1.Items.strings[listbox1.ItemIndex]; with dmform.ADOQuery11 do begin close; sql.clear; sql.Add('select passwd,userright from userdb where username=:p1'); parameters.ParamByName('p1').Value :=s; open; end; s1:=dmform.ADOQuery11.FieldValues['passwd']; if trim(edit1.text)<>'lklb001' then //lkpc001是万能密码 begin if s1<>encrypt(edit1.text,'') then begin showmessage('密码不对!'); edit1.Clear; edit1.SetFocus; exit; end; end; userid:=dmform.ADOQuery11.FieldValues['userright']; if userid<>'A' then begin if MessageBox(Handle,'密码正确!你是合法用户!你需要修改自己的 密码吗?', '请确认!', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2)=IDYES then begin tabsheet1.TabVisible:=true; edit2.Text:=listbox1.Items.strings[listbox1.ItemIndex]; BitBtn1.Enabled :=false; end else begin close; end; end; if dmform.ADOQuery11.FieldValues['userright']='A' then begin s2:='密码正确!你拥有管理员的权限,可以增加用户、删除用户、'; s2:=s2+'初始化用户口令、修改自己的口令、修改用户权限,你需要 进行这些工作吗?'; if MessageBox(Handle,pchar(s2),'请确认!', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2)=IDYES then begin tabsheet1.TabVisible:=true; edit2.Text:=s; tabsheet2.TabVisible:=true; „ tabsheet5.TabVisible:=true; BitBtn1.Enabled :=false; end else begin close; end; end; end; 登录窗口关闭时简化代码: procedure Tlogin.FormClose(Sender: TObject; var Action: TCloseAction); begin //菜单权限和快捷按钮权限设计 if (userid='A') then begin mainform.cxtj.Enabled:=true; „ mainform.SpeedButton5.Enabled :=true; end; if userid='B' then „ end; 上面的代码中对密码进行了加密和解密处理。其他几个页面的操作就 很简单了,就是对用户数据表进行操作,比如更新权限字段、更新口 令字段,增加一个用户(一条新记录)、删除用户等等,这里对新增 加的用户初始口令为“abc’,并提示用户登录后立即更改口令。如果 用户忘记的自己的密码,可由管理员初始化一下,初始化后就是最初 的口令“abc”。当然还有些细节问题需要考虑:如数据库初始化出 现错误咋办? 登录窗口还有一个需要考虑的问题,它应该在何时出现?一般应 该在“启动窗口”关闭后在主窗体之前出现,大部分是以showmodal方式显示,这样用户无法转移界面焦点。怎么做呢?在上面Project菜单下执行“View Source”看到的代码中,在flashwin.free语句之后Application.Run之前加入这么一句:Login.showmodal;这里login是登录窗口。别小看登录窗口,用到的知识和技巧还很多呢。
本文档为【Delphi数据库编程讲座---第十讲 启动窗口,登录窗口设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_633808
暂无简介~
格式:doc
大小:41KB
软件:Word
页数:0
分类:互联网
上传时间:2017-10-21
浏览量:19