各位,我做了一个管理程序,用户的所有操作都已经完成,我觉得应该增加一个密码确认窗口,只有输入正确的帐号和密码,才能打开管理程序。于是我新建了一个密码确认窗口,但是,我不知道怎样才能让整个程序,先运行密码确认窗口。我记得以前看dpk文件时,上面有关于窗口create的事件(比如Application.createform(...));但是现在我无论如何也打不开dpk文件,只要指定打开它,系统总是弹出最先设计的Form1窗口。请问如何处理,才能让密码确认窗口和Form1主窗口同时显示,并且只有密码确认窗口激活,主窗口要在密码正确后方能激活?谢谢。

解决方案 »

  1.   

    菜单->project->options->auto-createform里调
      

  2.   

    project菜单的options里面可以调的!记住都放到右边的列表中
      

  3.   

    在左边的AUTO-CREATEFORM中,我将密码确认窗口(frmopelog)调整到主窗口(frmmain)前,然后按F9运行,结果首先弹出的仍然是frmmain窗口,只不过退出菜单不能用。我的密码确认窗口还是没有出现。
    请指教。谢谢。
      

  4.   

    然后在dpr中增加一句:Form_Login:=TForm_Login.Create(Application);
    这样应该可以吧。
    全部form指动态生成的。
      

  5.   

    第一种方法:菜单 Project -> Option -> Forms上设置
               Ctrl + Shift + F11 -> Forms上设置。第二种方法:在.dpr文件中设置先后顺序。第三种方法:在主窗口的OnCreate中这样写
    with TLoginForm.Create
    try
      ShowModal;
    finally
      Free;
    end;
      

  6.   

    将project/option/mainform 选中mainform  //即将mainform作为整个工程的主窗体
    主窗体总是最先创建,且是自动创建的;主窗体关闭时程序终止,所以不能将Form_login
    作为主窗体,将formlogin 放在 project/option/auto_create forms 中
    项目文件如下:
    begin
      Application.Initialize;
      Application.CreateForm(TForm_main, Form_main);
      Application.CreateForm(TForm_login, );
      form_login.ShowModal;
      Application.Run;
    end;
    运行程序最先弹出的是formlogin ,在登陆按钮判断密码是否正确
    if 通过验证 then
    begin 
      flag:=true;            (flag在Form_login中定义,private flag:boolean; 
                              在Form_login的oncreate事件中将flag出始为false;
                              用于确定是关闭Form_login然后打开mainform,还是
                              关闭整个应用程序)  
      Form_login.close;     (不用写:mainform.showmodal;如果Form_login被关闭且程序没有
                               application.terminate mainform会自动showmodal  )
    end else
    begin   
      showmessage('密码错误!请重新输入!');
      edit1.clear;
      edit1.setfocus;
      exit;
    end;
    在Form_login的onclose事件中写:
    if flag=false then
      application.terminate;     (如果没有通过用户验证flag=false,当点击Form_login
                                   的关闭按钮时,application.terminate)
                                 (如果flag=true 说明用户点击了登陆按钮且密码正确
                                   则关闭Form_login显示Form_main)
      

  7.   

    手功来...
    把AUTOCREATE列表清得只剩下一个启动窗口..
    然后用类生成实例对像来搞...
    这样你就可以控制了..
      

  8.   

    谢谢各位的帮助,但我想把问题说得更清楚点:
    1、现在,我通过file->open,已经不能单独打开dpr文件,每次打开它,系统总是弹出FormMain窗口(FormMain主窗口和dpr文件是在初次建立工程时出现的);2、在project->option->forms,对auto-create forms(放置FormMain、FormLog和一个数据模块DataModule)和Available forms(放置了一些通过点击FormMain窗口菜单弹出的窗口)进行一番调整后,按F9运行,FormMain窗口弹出,显示正常,点击菜单,想要弹出其他菜单,此时系统就弹出警告:
    “...Access violation at address 0048EE0F in module'USRNET.exe', read of address 00000000...”请问这是为什么?请指教,谢谢。
      

  9.   

    是晚了。
    上面基本通过,over
      

  10.   

    1、菜单view-->unit里面有你的工程文件,选择就 可以看它的代码了
    2、代码中有问题,贴出来看看?
      

  11.   

    1、终于看到了,谢谢(宁静至远||中央空调)大侠。
    2、我的代码没有问题,当我在project->option->forms中,将Available forms显示的所有窗口全部调整到auto-create forms中,程序正常运行。我还有最后一个问题:就是我以前看过一个源代码,他的dpr文件中实际create的窗口只有数据模块和主窗口两个(即两个Application.createform()),其他窗口的createform都不知道安排到哪里了。我的dpr文件则是将所有要用的窗口全在dpr文件中create了。现在的问题就是通过project->option->forms移动其他窗口到Available forms框中,将导致程序运行不正常,请问那个源代码是怎样实现的?谢谢。
      

  12.   

    在dpr文件中
    假定你的密码窗体为 LogInFrm  Application.Initialize;
      Application.ShowMainForm := False;
    ...
    ...
    ..
    ...
      LogInFrm.ShowModal ;
      if LogInFrm.IsPass then  // IsPass为自己定义的Public变量,
      begin
        Application.ShowMainForm := True;
        Application.Run;
      end
      else
         Application.Terminate ; 
      

  13.   

    看project source 
    Project-->open source
      

  14.   

    hkbarton(宁静至远||淡泊明志) 抢我风头,太不应该了
    来晚了
      

  15.   

    给你看个例子吧,呵呵,别忘了给分哦
    program NXUniCom;uses
      Forms,
      Windows,
      UnitMain in 'UnitMain.pas' {FrmMain},
      UnitLogin in 'UnitLogin.pas' {FrmLogin},
      UnitDM in 'UnitDM.pas' {DM: TDataModule},
      UnitYiBiao in 'UnitYiBiao.pas' {FrmYiBiao},
      FYIBIAOQUERY in 'FYIBIAOQUERY.pas' {frmYIBIAOQUERY},
      unitddiao in 'unitddiao.pas' {diandiao},
      qdiandiao in 'qdiandiao.pas' {queryddiao},
      Unitkufang in 'Unitkufang.pas' {kufang},
      querykufang in 'querykufang.pas' {qkufang},
      Unittranse in 'Unittranse.pas' {transe},
      querytranse in 'querytranse.pas' {querychuanshu},
      Unit1rizhi in 'Unit1rizhi.pas' {rizhi},
      qrizhi in 'qrizhi.pas' {queryrizhi};{$R *.res}begin
      Application.Initialize;
      Try
        Application.CreateForm(TDM, DM);
      Dm.DB.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\DB\UniCom.mdb;Mode=Share Deny None;';
        Dm.DB.Connected :=True;
      Except
        Application.MessageBox('不能连接到系统数据库!','错误',MB_OK OR MB_ICONERROR);
        Dm.Free;
        Application.Terminate;
      end;
      Application.CreateForm(TFrmMain, FrmMain);
      Application.Run;
    end.收倒没  不回再说
      

  16.   

    其它的在project->option->里面手动产生
      

  17.   

    第一种方法:菜单 Project -> Option -> Forms上设置
               Ctrl + Shift + F11 -> Forms上设置。