登陆窗体 Log_F
主窗体   Main_F如果按以下来运行,那么Log_F为程序的主窗体,这样子的话,在密码验证后,Main_F.show;Log_F.hide;
Log_F是不能被关掉的。如果Log_F关掉的话整个程序就关掉了。还有一个问题就是Main_F最小化时是缩小在桌面的左下角而不是在任务栏啊。  Application.CreateForm(TLog_F, Log_F);
  Application.CreateForm(TMain_F, Main_F);  Application.Run;
如果反过来,Main_F做为主窗体,在登陆时就退出的话,程序会闪现一下,然后才关闭。  Application.CreateForm(TMain_F, Main_F);
  Application.CreateForm(TLog_F, Log_F);  Application.Run;
大家平时怎么处理这个问题的啊?

解决方案 »

  1.   


    ⒈开始一个新工程。给表格起名为MainForm,MainForm的单元起名为Main, 工程文 件起名为Test。
    ⒉在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件 的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。
    ⒊在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名 为Move。
    ⒋为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎 进入本系统”。
    5.下一步修改工程的源代码。选择View/Project Source,修改begin和end之间的 语句如下:
    程序清单Test.Dpr
    program Test
    uses
    forms,
    Main in 'MAIN.PAS'{MainForm},
    Move in 'Move.PAS'{MoveForm}{$R *.RES}begin
    MoveForm:=TMoveForm.Create(Application);{Create创建闪现窗口对象}
    MoveForm.Show;
    MoveForm.Update;
    Application.CreateForm(TMainForm,MainForm);
    MoveForm.Hide;
    MoveForm.Free;{Free从内存中释放对象}
    Application.Run;
    end.
      第一条语句创建了对象,该对象存在内存中,但还不能看见, 为了让它出现并更 新它的内容,调用对象的Show和Update成员函数:Show和Update。 当闪现窗口使 用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。
    6.如果此刻你编译和运行程序,MoveForm窗口一闪而过, 你可能未来得及看 清。为使MoveForm窗口显示几秒种,我们可为MainForm的OnCreate 事件创建一个 处理程序,延迟MoveForm窗口的显现时间。
    program TMainForm.FormCreate(sender:Tobject);
    var 
    currentTime:LongInt;
    begin
    currentTime:=GetTickCount div 1000;
    while ((GetTickCount div 1000)<(currentTime+3) do
    {不做任何事);
    end;
    end.
      GetTickCount函数返回窗口启动后过去的毫秒数,这个值除以1000 转化为秒数。 此时你编译运行程序,就能得到一个延迟3秒多的闪现窗口。
    为闪现窗口添加上Image部件,再对字体及窗口进行修饰,我们就能为应用程 序,创建一个精美的封面或在程序启动时显示重要提示。制作登录窗体一个很方便的方法就是主窗体作为主窗体,登录成功Hide掉就行了。
    如果登录窗体不可以作为主窗体,那么和闪现窗体一样的方法创建登录窗体,加在Application.Run;之前,MoveForm.Free;之后,
    用showmodal显示登录窗体
    我收藏的一点资料,大家一起分享哈
      

  2.   

    还有一个问题就是Main_F最小化时是缩小在桌面的左下角而不是在任务栏啊。
    这个问题可以用Raize控件包里面的RzTrayIcon控件完成
      

  3.   

    main做主窗体,在main显示的时候动态创建login窗体,总之自动创建的就保留主窗体和数据模块
      

  4.   

    贴个例子供参考吧procedure TMainForm.FormCreate(Sender: TObject);
    var
      LoginForm: TfrmLogin;
    begin
      Application.ShowMainForm := False;  LoginForm := TfrmLogin.Create(Self);
      if LoginForm.ShowModal = MrCancel then
      begin
        Application.Terminate;
        //......
      end
      else
      begin
        Application.ShowMainForm := True;
        //......  end;
      LoginForm.Free;
    end;
      

  5.   

    uses
      Forms,
      Controls,
      Unit1 in 'Unit1.pas' {Log_F};
      Unit2 in 'Unit2.pas' {Main_F};begin
      Application.Initialize;
      if TLog_F.Create(Application).ShowModal = mrOK then begin
        Application.CreateForm(TMain_F, Main_F);
      end;
      Application.Run;
    end.Unit2.pas 中增加几个事件,一个就是认证通过了返回 ModalResult := mrOK,一个就是在OnClose事件中增加 Action := caFree;