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]的更多相关文章

  1. 银行排队问题之单队列多窗口加VIP服务(30 分)

    银行排队问题之单队列多窗口加VIP服务(30 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选 ...

  2. 未能加载文件或程序集“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 ...

  3. jquery插入第一个元素? [问题点数:20分,结帖人zsw19909001]

    jquery插入第一个元素? [问题点数:20分,结帖人zsw19909001] JavaScript code   ? 1 2 3 4 5 <div id="contain" ...

  4. delphi 中Adoquery ,在打开时能否让记录指针不移动? [问题点数:40分,结帖人microd]

    delphi 中Adoquery ,在打开时能否让记录指针不移动?由于数据集Adoquery 时,它的针指称动会废时,能否在打开完成之前不让记录指针不移动.打开完毕之后再回复移动? 这样用:self. ...

  5. 在使用ADOQuery删除数据时的处理 [问题点数:100分,结帖人isdxsc]

    在使用ADOQuery删除数据时的,希望在他的事件BeforeDelete进行一些判断,符合要求的进行删除,不符合要求的终止这个删除行为,请问应该用什么语句呢?还有个比较奇怪的现象也一起请教:DBGr ...

  6. MVC 中@Html.DropDownListFor() 设置选中项 这么不好使 ? [问题点数:40分,结帖人lkf181]

    http://bbs.csdn.net/topics/390867060 由于不知道错误原因在哪 我尽量把代码都贴出来吧:重点是:在 Controller 类里 我给 SelectListItem集合 ...

  7. ZT 怎么样才算熟悉设计模式? [问题点数:40分,结帖人jiaoyun007]

    http://bbs.csdn.net/topics/390448668?page=1#post-394406161 近日面试,因为个人简历里有“熟悉设计模式”这句话,面试官边侃侃发问了:什么是装饰模 ...

  8. C3P0连接池问题,APPARENT DEADLOCK!!! Creating emergency..... [问题点数:20分,结帖人lovekong]

    采用c3p0连接池,每次调试程序,第一次访问时(Tomcat服务器重启后再访问)都会出现以下错误,然后连接库需要很长时间,最终是可以连上的,之后再访问就没问题了,请高手们会诊一下,希望能帮小弟解决此问 ...

  9. 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 ...

随机推荐

  1. oracle 在存储过程或函数中得到异常sql

    BEGIN SQLSTR := 'UPDATE TBL ...'; EXECUTE IMMEDIATE SQLSTR; EXCEPTION WHEN OTHERS INSERT INTO LOG_TA ...

  2. Eclipse-设置保存时自动给变量加final

    也是针对checkstyle的,在代码检查规范时,所有的变量必须是final.为了解决这个问题,通过以下的设置可以在eclipse保存时,自动给没有加final的变量加上final. Window-& ...

  3. Linux服务-openssh

    目录 1. 使用 SSH 访问远程命令行 1.1 OpenSSH 简介 1.2 SSH 版本 1.3 SSH 认证方式 1.4 openSSH 的工作模式 1.5 Secure Shell 示例 1. ...

  4. 20155202张旭 Exp5 MSF基础应用

    20155202张旭 Exp5 MSF基础应用 实践内容 本次实验我使用的攻击方式: 1.针对office软件的主动攻击:--MS10-087: 2.MS10-002漏洞对浏览器攻击 3.针对客户端的 ...

  5. 20155330 《网络对抗》 Exp2 后门原理与实践

    20155330 <网络对抗> 实验二 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 在网站上下载非官方软件,所下载的软件中携带伪装过的后门程序. 例举你 ...

  6. WPF编程,通过Path类型制作沿路径运动的动画另一种方法。

    原文:WPF编程,通过Path类型制作沿路径运动的动画另一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/d ...

  7. python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  8. CS229笔记:支持向量机

    考虑一个分类问题,用\(1\)表示正类标签,用\(-1\)表示负类标签,引入假设函数\(h\): \[ \begin{align*} g(z) &= \begin{cases} 1 & ...

  9. 最简单的XML用法

    在传递数据时,XML和JSON是最常用的数据格式,SQL Server从很早的版本就开始支持XML格式,而对于JSON格式,SQL Server从2016版本开始支持.大多数数据库系统并没有升级到SQ ...

  10. AngularJS + CoffeeScript 前端开发环境配置详解

    AngularJS 号称 '第一框架' ('The first framework') 确实是名不虚传.由其从jQuery中完全转入AngularJS后就有无法离开他的感觉了.虽然AngularJS的 ...