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.
|
请发表评论