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. DDOS攻击详解

    导读 Ddos的攻击方式有很多种,最基本的Dos攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应. 在信息安全的三要素——“保密性”.“完整性”和“可用性”中,DoS( ...

  2. Python2.7-filecmp

    filecmp 模块,定义了比较文件或目录的函数,比较文件只会有 True 和 False 两种结果,比较目录会返回目录下相同的文件,不同的文件,出错的文件.比较文件也可以用 difflib 模块,d ...

  3. js基础知识整理

    一.javaScript,也称之为js,是专为网页交互设计的脚本语言.主要由以下三部分组成: 1)ECMAScript  由ECMA-262定义,提供核心语言功能. 2)DOM对象(document ...

  4. $Luogu P2029$ 跳舞 题解

    一道不是十分水的\(dp\). 首先我们考虑\(dp\)方程的构造.起初我定义的状态是\(dp_{i,j}\)表示前\(i\)个格子,总共跳了\(j\)次的最大得分.但事实上它并不可以转移,因为我们不 ...

  5. (二)基于阿里云的MQTT远程控制(购买阿里云,在云端安装MQTT,测试MQTT远程通信)

    QQ名称为Friday~的网友把他自己买MQTT的过程截图发给了我,今天就说一下如何购买阿里云,安装MQTT可以参考 http://www.cnblogs.com/yangfengwu/p/77646 ...

  6. day51

    JS基础操作 一.分支结构 1.if语句 if 基础语法 if (条件表达式) { 代码块; } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通表达式 // 0 ...

  7. Java Web乱码分析及解决方案

    1.  什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服 ...

  8. Android应用安全之WEB接口安全

    Android应用安全不仅包括客户端的安全,也包括web接口的安全.移动App中的Web接口安全主要分为以下几块: 1.SQL注入漏洞 这是一个不能再常见的漏洞类型了,由于App的特性,开发人员认为使 ...

  9. 20155234《网路对抗》Exp9 WEB安全基础

    20155234 Exp9 Web安全基础 基础问答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意 ...

  10. 20155308《网络对抗》Exp9 Web安全基础实践

    20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...