delphi 登陆窗口的问题 [问题点数:30分,结帖人tianhuo_soft]
http://bbs.csdn.net/topics/200053917
有两个窗口
formLogin是登陆窗口,formMain是主窗口
我想让formMain显示出来,并且formLogin窗口关闭或者隐藏
这牵扯到 如果是关闭 在formMain就不用去管formLogin的问题了
如果是隐藏那formMain就还要关闭formLogin窗口
我是这样想的 本人对delphi的机制不太了解~!
我在formLogin中添加
formMain:=formMain.Create(Application);
formMain.ShowModal;
formLogin.Close;
这样并没有隐藏formLogin窗口,是不是还要加什么语句~!
感谢您对这个问题的回答~!
dpr里面这么写(uses Controls)
begin
Application.Initialize;
Application.CreateForm(TformMain, formMain);
formLogin = TformLogin.Create(Application);
if formLogin.ShowModal = mrOk then
begin
formLogin.Release;
Application.Run;
end;
end.
我的工程文件是这样的
Application.Initialize;
Application.CreateForm(TformMain, formMain);
Application.ShowMainForm := false;
Application.Run;
我的想法是先创建formMain窗口 在从formMain的OnCreate事件中创建formLogin窗口
formLogin:=TformLogin.Create(Application);
formLogin.ShowModal;
当正确输入用户名和密码后
formLogin.Free;
formLogin:=nil;
formMain.ShowModal;
这样有个问题是 当关闭formMain后并没有关闭formLogin
procedure Tform1.formcreate(sender:Tobject);
begin
formLogin:=TformLogin.Create(self);
try
if formlogin.showmodal<>mrok then
close;
finally
formlogin.free;
end;
end;
工程文件中是这样的.
begin
Application.Initialize;
F_pos_start := tF_pos_start.Create(application);
F_pos_start.show;
F_pos_start.Update;
Sleep(2000);
F_pos_start.Close;
Application.Title := '大药房连锁管理系统-连锁店端';
Application.CreateForm(TF_pos_main, F_pos_main);
Application.CreateForm(TF_pos_login, F_pos_login);
.............................
Application.CreateForm(TF_pos_select_unit, F_pos_select_unit);
Application.CreateForm(TF_pos_check_stock, F_pos_check_stock);
F_pos_Main.Visible := true; //显示主窗体
F_pos_login.ShowModal; //显示登录窗体
Application.Run;
end.
释放在 登录成功的时候 做个 free 什么的不就行了吗?或者 oncolose 里 action:=cafree;
建议采用MDI,这样就可以实现楼主意思了
在工程文件中只创建主窗体,
然后在主窗体中在进行登陆对话框的创建,完毕后释放。
不明白你的意思是什么
我说下自己的例子。。
MainForm 主窗体
LoginForm 登录窗体
在MainForm的FormShow事件里判断当前是否已经登录
如果么有。。就LoginForm.ShowModal;
在LoginForm的FormClose事件里判断当前是否已经登录
如果么有。。就Application.Terminate
你把LoginForm设为主窗体。。。然后判断用户名 密码
验证通过 MainForm 显示。。。 loginform 释放
应该是这样的!~!~!
ShowModal 是显示模式窗体的,只有该窗体关闭后才能执行下面关闭语句
窗体隐藏的方法的Hide
Self.Hide; //先隐藏
frmMain := TForm.Create(Application);
frmMain.ShowModal;
handle_1,handle_2:hwnd;
begin
//数据库文件检测
If (not fileexists(ExtractFilePath(ParamStr(0))+'up.mdb')) or (not fileexists(ExtractFilePath(ParamStr(0))+'handset.mdb')) Then
Begin
messagebox(0,'系统文件丢失,请重新安装!','提示',MB_OK);
Application.Terminate;
End;
Application.Initialize;
//获取窗口句柄
handle_1:=findwindow('TForm_handset_Login',nil);
handle_2:=findwindow('TForm_handset_Main',nil);
If (handle_1=0) and (handle_2=0) Then
Begin
//启动登录窗口
Form_handset_Login:=TForm_handset_Login.Create(Application);
Form_handset_Login.ShowModal;
If (Form_handset_Login.ModalResult=mrok) Then
Begin
Application.Title := '手机通讯录';
Application.CreateForm(TForm_handset_Main, Form_handset_Main);
Application.CreateForm(TDM, DM);
Application.Run;
End;
End
Else
messagebox(0,'手机通讯录已经运行!','提示',MB_OK);
end.
unit handset_Login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, StdCtrls, Mask, RzEdit, RzLabel, ExtCtrls, RzPanel,
DB, ADODB;
type
TForm_handset_Login = class(TForm)
RzGroupBox1: TRzGroupBox;
RzLabel1: TRzLabel;
RzLabel2: TRzLabel;
RzEdit1: TRzEdit;
RzEdit2: TRzEdit;
RzBitBtn1: TRzBitBtn;
RzBitBtn2: TRzBitBtn;
ADOQuery_Login: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure RzBitBtn1Click(Sender: TObject);
procedure RzBitBtn2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RzEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure RzEdit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_handset_Login: TForm_handset_Login;
j:integer=1;
E:boolean=False;
implementation
uses AES;
const
Keys='z1a2x2d3cf34r5f5g6h7jk8';
{$R *.dfm}
{------------------------------------------------------------------------------}
//1 初始化:联据数据库
{------------------------------------------------------------------------------}
procedure TForm_handset_Login.FormCreate(Sender: TObject);
const
PassWord='q1w2e3r4t5y6u7i8o9p0';
var
MyPath:string;
begin
RzEdit1.Clear;
RzEdit2.Clear;
//----------------------------连接数据库----------------------------------------
MyPath:=ExtractFilePath(ParamStr(0));
adoQuery_Login.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
MyPath+'up.mdb;Jet OLEDB:Database Password='+
PassWord+';Persist Security Info=False';
end;
{------------------------------------------------------------------------------}
//2 判断
{------------------------------------------------------------------------------}
procedure TForm_handset_Login.RzBitBtn1Click(Sender: TObject);
var
UserName,PassWord:string;
begin
ADOQuery_Login.Close;
ADOQuery_Login.SQL.Clear;
ADOQuery_Login.SQL.Add('select *from Login');
ADOQuery_Login.Open;
If ADOQuery_Login.RecordCount>0 Then
Begin
ADOQuery_Login.First;
UserName:=DecryptString(ADOQuery_Login.FieldValues['UserName'], Keys);
PassWord:=DecryptString(ADOQuery_Login.FieldValues['PassWord'], Keys);
If (Trim(UserName)=Trim(RzEdit1.Text)) and (Trim(PassWord)=Trim(RzEdit2.Text)) Then
Begin
Self.ModalResult:=mrok;
End
Else
Begin
If j=3 Then
Begin
Messagebox(handle,'非法登录!','系统提示',MB_OK+MB_ICONERROR);
ADOQuery_Login.Close;
Application.Terminate; //退出系统
End;
MessageBox(handle,'用户名或密码不正确,请重新填写!','提示',MB_OK+MB_ICONINFORMATION);
j:=j+1;
RzEdit1.Clear;
RzEdit2.Clear;
RzEdit1.SetFocus;
End;
End;
end;
{------------------------------------------------------------------------------}
//3 退出
{------------------------------------------------------------------------------}
procedure TForm_handset_Login.RzBitBtn2Click(Sender: TObject);
begin
E:=True;
Close
end;
{------------------------------------------------------------------------------}
//4 退出判断
{------------------------------------------------------------------------------}
procedure TForm_handset_Login.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
If E=True Then
Begin
ADOQuery_Login.Close;
Application.Terminate;
End
end;
{------------------------------------------------------------------------------}
//5 切换焦点
{------------------------------------------------------------------------------}
procedure TForm_handset_Login.RzEdit1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
If key=vk_return Then
RzEdit2.SetFocus
end;
{------------------------------------------------------------------------------}
//6 切换焦点
{------------------------------------------------------------------------------}
procedure TForm_handset_Login.RzEdit2KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
If key=vk_return Then
RzBitBtn1Click(Sender);
end;
end.
program handset;
uses
Forms,
windows,
SysUtils,
controls,
handset_Main in 'handset_Main.pas' {Form_handset_Main},
MyData in 'MyData.pas' {DM: TDataModule},
handset_Edit in 'handset_Edit.pas' {Form_handset_Edit},
handset_Search in 'handset_Search.pas' {Form_handset_Search},
handset_QZ in 'handset_QZ.pas' {Form_handset_QZ},
handset_LX in 'handset_LX.pas' {Form_handset_LX},
handset_Login in 'handset_Login.pas' {Form_handset_Login},
handset_Safety in 'handset_Safety.pas' {Form_handset_Safety};
{$R *.res}
var
handle_1,handle_2:hwnd;
begin
//数据库文件检测
If (not fileexists(ExtractFilePath(ParamStr(0))+'up.mdb')) or (not fileexists(ExtractFilePath(ParamStr(0))+'handset.mdb')) Then
Begin
messagebox(0,'系统文件丢失,请重新安装!','提示',MB_OK);
Application.Terminate;
End;
Application.Initialize;
//获取窗口句柄
handle_1:=findwindow('TForm_handset_Login',nil);
handle_2:=findwindow('TForm_handset_Main',nil);
If (handle_1=0) and (handle_2=0) Then
Begin
//启动登录窗口
Form_handset_Login:=TForm_handset_Login.Create(Application);
Form_handset_Login.ShowModal;
If (Form_handset_Login.ModalResult=mrok) Then
Begin
Application.Title := '手机通讯录';
Application.CreateForm(TForm_handset_Main, Form_handset_Main);
Application.CreateForm(TDM, DM);
Application.Run;
End;
End
Else
messagebox(0,'手机通讯录已经运行!','提示',MB_OK);
end.
delphi 登陆窗口的问题 [问题点数:30分,结帖人tianhuo_soft]的更多相关文章
- 银行排队问题之单队列多窗口加VIP服务(30 分)
银行排队问题之单队列多窗口加VIP服务(30 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选 ...
- 未能加载文件或程序集“Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=30a [问题点数:40分,结帖人u010259408]
未能加载文件或程序集“Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=30a [问题点数:40分,结帖人u01025 ...
- jquery插入第一个元素? [问题点数:20分,结帖人zsw19909001]
jquery插入第一个元素? [问题点数:20分,结帖人zsw19909001] JavaScript code ? 1 2 3 4 5 <div id="contain" ...
- delphi 中Adoquery ,在打开时能否让记录指针不移动? [问题点数:40分,结帖人microd]
delphi 中Adoquery ,在打开时能否让记录指针不移动?由于数据集Adoquery 时,它的针指称动会废时,能否在打开完成之前不让记录指针不移动.打开完毕之后再回复移动? 这样用:self. ...
- 在使用ADOQuery删除数据时的处理 [问题点数:100分,结帖人isdxsc]
在使用ADOQuery删除数据时的,希望在他的事件BeforeDelete进行一些判断,符合要求的进行删除,不符合要求的终止这个删除行为,请问应该用什么语句呢?还有个比较奇怪的现象也一起请教:DBGr ...
- MVC 中@Html.DropDownListFor() 设置选中项 这么不好使 ? [问题点数:40分,结帖人lkf181]
http://bbs.csdn.net/topics/390867060 由于不知道错误原因在哪 我尽量把代码都贴出来吧:重点是:在 Controller 类里 我给 SelectListItem集合 ...
- ZT 怎么样才算熟悉设计模式? [问题点数:40分,结帖人jiaoyun007]
http://bbs.csdn.net/topics/390448668?page=1#post-394406161 近日面试,因为个人简历里有“熟悉设计模式”这句话,面试官边侃侃发问了:什么是装饰模 ...
- C3P0连接池问题,APPARENT DEADLOCK!!! Creating emergency..... [问题点数:20分,结帖人lovekong]
采用c3p0连接池,每次调试程序,第一次访问时(Tomcat服务器重启后再访问)都会出现以下错误,然后连接库需要很长时间,最终是可以连上的,之后再访问就没问题了,请高手们会诊一下,希望能帮小弟解决此问 ...
- java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim [问题点数:40分,结帖人wangxiaohua_001]
14:56:10.093 WARN!! Error for /butterfly/plugins/zhonghang/UsefulData/save_usefuldata.bshjava.lang.N ...
随机推荐
- Vue购物车
index.html <!DOCTYPE html><html> <head> <meta charset="utf-8&quo ...
- POJ3468(线段树区间求和+区间查询)
https://vjudge.net/contest/66989#problem/C You have N integers, A1, A2, ... , AN. You need to deal w ...
- A. Pride
You have an array a with length n, you can perform operations. Each operation is like this: choose t ...
- jqgrid 获取选中行主键集合
如何获取选中行的主键集合呢? 使用 getGridParam(selarrrow) 方法可获取所有选中行的主键集合. 注意:此处的主键集合是指-设置为主键的列(key: true).再次提醒:一个j ...
- 2017-2018-2 20155204《网络对抗技术》EXP5 MSF基础应用
一.基础问题回答 用自己的话解释什么是exploit,payload,encode exploit:利用靶机系统中的一些漏洞进行攻击的过程,除去前期准备的工作,这一步是实施攻击. payload:载荷 ...
- 20155323刘威良《网络对抗》Exp4 恶意代码分析
20155323刘威良<网络对抗>Exp4 恶意代码分析 实践目标 1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...
- LoRa---她的简介和她的专业术语
LoRa是LPWAN(低功耗广域网)通信技术的一种,其作用距离超过 15 公里,连接节点可达 100 万个.低功耗与长距离极限的组合可将最大数据速率提升至每秒 50千比特(Kbps). LoRa 是 ...
- 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面
这一篇我将会以人人网的引导界面为实例来展开详细的讲解,人人网的引导界面比较的新颖,不同于其他应用程序千篇一律的靠滑动来引导用户,而是以一个一个比较生动形象的动画效果展示在用户们的面前,有一种给人眼前一 ...
- 杂谈---这些大忌,你在面试的时候发生过吗?(NO.1)
面试是大部分人的人生当中难免会遇到的一件事,那么具体在面试当中有哪些忌讳呢? 说到面试,在这里尤其特指技术岗位的面试,很多时候,结果并不仅仅取决于你的技术广度与深度,亦或是你的笔试 ...
- Dictionary 对象
Dictionary 对象 对象的存储数据键/项对. 语法 Scripting.Dictionary 说明 Dictionary对象相当于 PERL 关联数组. 项目,可以是任何形式的数据,存储在数组 ...