现在是有主窗体Fmain,登录窗体Fuser  数据连接窗体DataModule1,在工程选项的,主窗体上我已经选择了Fmain ,但最小化时还不是到任务栏,如果把登录窗体去了就可以,代码如下:
//工程单元:
begin
  Application.Initialize;
  Application.CreateForm(TFmain, Fmain);
  Application.Run;
end.//主窗体单元:
procedure TFmain.FormCreate(Sender: TObject);
begin
  DataModule1:=TDataModule1.Create(Application);
  Fuser:=TFuser.Create(Application);
  Fuser.ShowModal;
end;//登录单元
if ADOQuery1['密码']=Edit2.Text then
       begin
         usernum:=ADOQuery1.fieldbyname('权限').asstring;
          if usernum='普通成员' then
             i:=0
          else
          if usernum='管理员' then
             i:=1
          else
          if usernum='系统管理员' then
             i:=2;
         qxid:=i;
         myuser:=Edit1.Text;
         Fuser.Hide;
         Fmain.Show;
       end
       else
       begin
         MessageDlg('密码错误',mtError,[mbOK],0);
         Edit2.Text:='';
       end
以上都是连到调用其它单元的部分代码,其他无关代码没写出来,麻烦各位给看看要如何调用才正确

解决方案 »

  1.   

    Fuser.Hide; --->Fuser.Free; 
    Fmain.Show; 
      

  2.   

    //主窗体单元:
    procedure   TFmain.FormCreate(Sender:   TObject);
    begin
        DataModule1:=TDataModule1.Create(Application);
        Fuser:=TFuser.Create(Application);
        if Fuser.ShowModal=mrok then
           Fuser.free;
    end; 
      

  3.   

    2楼和3楼两位的基本一样,导致登录密码正确后直接无法显出Fmain主窗体,登进去后,没反应,但进程管理器中程序是在运行中,显不出来主窗体了,1楼的我看了窗体不是置前
      

  4.   

    看看主窗体的FormStyle,改为默认状态
      

  5.   

    http://download.csdn.net/detail/case5166/4421022简单写了个,希望能满足你的要求。
      

  6.   

    Fuser:=TFuser.Create(Application); 
        Fuser.ShowModal; 
    放到formshow里面处理.如果放到FormCreate,你的MainForm还是你的登陆窗口。
      Instance := TComponent(InstanceClass.NewInstance);
      TComponent(Reference) := Instance;
      try
        Instance.Create(Self);
      except
        TComponent(Reference) := nil;
        raise;
      end;
      if (FMainForm = nil) and (Instance is TForm) then
      begin
        TForm(Instance).HandleNeeded;
        FMainForm := TForm(Instance);
      end;
      

  7.   

    http://dlwt.csdn.net/fd.php?i=700144216214849&s=821b2d493ce31c98f71637f9c9167b9e这个是我把登录和主窗体上传上来,那位帮着看下,为什么不行呢,改了几次也改不了成
      

  8.   

    http://download.csdn.net/detail/zpc198600/4421621
    地址在这,上面可以直接复制下的
      

  9.   

    因为你最小化的不是主窗体Fuser才是主窗体,它第一次启动的,被Hide隐藏了,应该用Free
      

  10.   

    麻烦能否把我程 序下下来调试下,我试了用FREE不行,用FREE得出错而且还不能达到效果
      

  11.   

    把你的登录单元,全部动态创建到 工程单元,Showmodal显示登录单元!!试试吧!!
      

  12.   

     Application.CreateForm(TFmain,   Fmain); 
    说明 Fmain是主窗体. 也就是程序启动时创建的. Fuser:=TFuser.Create(Application); 
    改成 Fuser:= TFuser.Create(nil);
     Fuser.ShowModal;
     Fuser.Free;估后在 Fuser窗体的 FormClose事件里写
    Action:= caFree;
    Fuser:= nil;这样就OK了... 资源完美释放. 如果在你程序运行过程中还需要重新登录之类的.. 同样的代码.依然适合.
      

  13.   

    实在是麻烦大家了,后面的几位估计也是在猜问题呵,我晚上一不小心发现了错在那里,,其实跟上面的基本没关系,是我在Fuser窗体的 FormClose事件里写了关闭整个程序的代码,所以,如果用HIDE就正常显示但那样就达到不主窗体的效果,但用CLOSE或FREE的话,在FormClose里把程序关了,所以后面的也显不出来主窗体了,现在我把登录窗体的CLOSE事件去了,已经解决了,但还有一个问题:
    如果我点登录窗体上的关闭按扭就直接进主界面了,如何在点了关闭按扭时能退出程序而不是不用密码就进系统了(目前我是把窗体标题栏按扭全去了不显示,加一个取消按扭在不输入密码时可以退出)
      

  14.   

    zpc198600(白开水) 把你的QQ贴出来。
      

  15.   

      //因为本窗体不是主窗体了,为使窗体在最小化后在任务栏上,使用以下这句
      //把程序在任务栏的那个去掉
      SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
      //再设置当前窗体最小化到任务栏上
      SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle,GWL_EXSTYLE) or WS_EX_APPWINDOW);