我先写了主窗口,后写登录窗口,
但编译启动时,两个窗口同时出现,
我在OPTION里已设置主窗口,但还是如此,
这是为什么,如何解决,THANKS?

解决方案 »

  1.   

    检查两个窗口的visible是否有为true
      

  2.   

    在主窗口中用事件ONSHOW来调用登陆窗就行了
      

  3.   

    例子:
    -------------------------------------------------------
    dpr文件:
    Form_welcome := TForm_welcome.Create(nil);
    Application.Initialize;
    Application.ProcessMessages;
    Form_welcome.lblState.Caption := '正在初始化系统...      ';
    Form_welcome.Show;
    Application.ProcessMessages;
    Application.CreateForm(TfrmMain, frmMain);
    Form_welcome.lblState.Caption := '正在链接数据库...      ';
    Form_welcome.Free;
    Application.Run;Form_welcome的属性设置:
    BorderStyle := bsNone; // 无边框Form_welcome关闭之后会自动打开form_main,所以在form_main的OnShow事件添加一段显示form_login窗口的代码,代码如下:
    form_login.ShowModal;显示form_login窗口之后可以加入检验密码的代码
    正确:用Close关闭窗口(注意:只是关闭form_login窗口,关闭form_login窗口就会打开form_main窗口)
    错误:用exit返回当前登陆窗口
    如果不想登陆,用Application.Terminate来关闭整个程序
      

  4.   

    1. 项目单元如下:
    begin
      Application.Initialize;
      Application.ShowMainForm:=false; //程序不显示主窗口  
      Application.CreateForm(TForm_main, Form_main); //创建主窗口
      Application.Run;
    end.
    2. Main单元的OnCreate如下:
    begin
     FrmLog:= TFrmLog.Create(Application); //创建登陆窗口
     if FrmLog.ShowModal=mrOK then self.show //登陆的密码正确,则显示自己
     else Application.Terminate; //否则,程序结束
    end;
    3. login单元如下:
    var
      FrmLog: TFrmLog;
      ErrTime: Integer; //密码输入次数,全局变量implementation
    uses Main; //引用主窗口
    {$R *.dfm}procedure TFrmLog.FormCreate(Sender: TObject);
    begin
     ADOQuery1.Open; //查询密码
     ErrTime:=0; //给输入密码次数赋初值
    end;procedure TFrmLog.Button1Click(Sender: TObject);
    begin
     if ErrTime>=2 then
     begin
      ModalResult:=mrCancel; //密码错误3次,自动关闭,给主窗口返回值mrCancel
      Exit;
     end;
     if Edit1.Text<>ADOQuery1.FieldByName('pswd').AsString then
     begin //密码错误
      inc(ErrTime);
      MessageDlg('密码错误,请重新输入!',mtWarning,[mbOK],0);
      Edit1.Text:='';
      Exit;
     end;
     ModalResult:=mrOK; //密码正确,自动关闭,给主窗口返回值mrOK
    end;end.被ShowModal的窗体,只要有ModalResult:=[mrOK,mrCancel,mrAbort,..]等,就会自动关闭,并返回相应的值。如果点击右上角的X关闭之,则自动返回mrCancel。不妨把“取消“按钮的ModalResult属性设为mrCancel,这样,用户点击“取消”也会自动关闭窗口,并返回值mrCancel