我写好了一个MDI程序,现需要在MDI显示前出现登录窗口
以便判断登录名及密码,和用户权限,
请问如何解决!
多谢了

解决方案 »

  1.   

    我只谈谈个人想法:
    可以使登陆窗口与MDI 的MAI 主窗口都设为自动创建
    然后在MID 的MAI 窗口的CREAT 事件中调用登陆窗口,此时再做权限判断
      

  2.   

    楼上所说的,也可以,但是登录窗口与MDI主窗口 一起显示啊,且登录窗口不输入
    用户名密码也可以被关掉。
      

  3.   

    MDI自动,登陆创建,在MDI的onpaint里创建,
    设置一个全局变量(用户名)如gs_username;
    在显示登陆的时候判断
    if gs_username<>'' then
    .....登陆显示
    在登陆成功后设置gs_username=你的用户名
    就可以了,
      

  4.   

    program RecordManage;uses
      Forms,
      SysUtils,
    var
        vIndex : Integer;{$R *.res}begin
      Application.Initialize;
      Application.Title := '档案管理系统';
      FlashFrm := TFlashFrm.Create(Nil);
      FlashFrm.Show;
      FlashFrm.Update;
      DataModuleFrm := TDataModuleFrm.Create(Nil);
      FlashFrm.Update;
      for vIndex := 1 to 10 do
      begin
        Sleep(200); //1000 = 1S
        FlashFrm.Update;
      end;
      LoginFrm := TLoginFrm.Create(Nil);
      FlashFrm.Update;
      FlashFrm.Free;
      LoginFrm.ShowModal;
    {  loginFrm里边写事件就可以了。
      还有,这个loginFrm要设置为普通的窗体,不要设置为MDI子窗体。}
      Application.CreateForm(TMainFrm, MainFrm);
      

  5.   

    先谢楼上的,可是我有点不明白,
    1.gs_username全局变量定义在哪个窗体内?何时给它赋值。
    2.能实现先出现登录窗体,登录后再出现主窗体的效果吗?不好意思,如果你能给出个小例子就更好了
    在此先谢过了
      

  6.   

    to : ihihonline(小小→聆听那颗陨落的流星(031220)按你的办法做了,program 里代码如下:begin
      if startExe('进销存管理系统') then begin
        Application.Initialize;
        Application.Title :='进销存管理系统';
       Application.CreateForm(TDm, Dm);
      Application.CreateForm(TMainFm, MainFm);
      LoginFm :=TLoginFm.create(nil);
      loginfm.Showmodal;  Application.CreateForm(TMainFm, MainFm);
      //dm.ShopCon.Connected := True;
      Application.Run;
      end;可是提示”cann't not make a visible widows modal“如果我改loginfm.show;
    则loginfm不显未而只接进入到MDI主窗体啊。
    请问怎么回事啊
      

  7.   

    gs_username全局变量可以定义在你的mdi窗体中,你的登陸窗口不要讓系統自動創建,
    (在project-->options-->antuo create forms中不出現即可),然後在
    祝窗口的onshow事件中創建登陸窗口,並判斷用戶名和密碼,如果正確把輸入的用戶名賦值給
    祝窗口中的變量,然後根據權限創建菜單
      

  8.   

    to: yantao14(yt)
    1.我要在登录窗口的确定BUTTON时判断用户名和密码,如果正确则赋给GS_USERNAME
    可是其它的呢,我还是不太明白.....希望你能我个例子。非常感谢!
      

  9.   

    MDI自动,登陆创建,在MDI的onpaint里创建,
    设置一个全局变量(用户名)如gs_username;
    在显示登陆的时候判断
    if gs_username<>'' then
    .....登陆显示
    在登陆成功后设置gs_username=你的用户名
    //
    gs_username你可以在数据模块中定义啊
    登录成功后你可以将gs_username设置你进入的用户名,然后关闭登录窗口
    你在程序中还可以使用“注销”功能,这时将gs_username='',登录窗口又会出现了gs_username前加上数据模块的名称,如   数据模块名称.gs_username
    清楚了吗,你先做,在说
      

  10.   

    在program里,格式如下:  Application.Initialize;
      form2 := tform2.create(application);
      form2.showmodal;  Application.CreateForm(TForm1, Form1);
      Application.Run;form2是登陆窗口,设置为不要自动创建,form1是主窗口
      

  11.   

    请问你在输入用户、密码那个窗体的时候按ALT+F4会出现什么状况?
      

  12.   

    按你的办法做了,program 里代码如下:begin
      if startExe('进销存管理系统') then begin
        Application.Initialize;
        Application.Title :='进销存管理系统';
       Application.CreateForm(TDm, Dm);
      Application.CreateForm(TMainFm, MainFm);  //将这句去掉就可以了
      LoginFm :=TLoginFm.create(nil);
      loginfm.Showmodal;  Application.CreateForm(TMainFm, MainFm);
      //dm.ShopCon.Connected := True;
      Application.Run;
      end;可是提示”cann't not make a visible widows modal“如果我改loginfm.show;
    则loginfm不显未而只接进入到MDI主窗体啊。
    请问怎么回事啊
      

  13.   

    to : aiq(aiq) 我在MDI主窗体中加入如下代码:
    procedure TMainFm.FormPaint(Sender: TObject);
    begin
      LoginFm :=TLoginFm.create(mainfm);
      if dm.Login_UserName<>'' then begin 
        loginfm.Show;
      end else begin
        dm.Login_UserName:='';
        loginfm.Close ;
      end;
    end;
    可是主窗体显示出来了同时显示了登录窗口,我想得到如下登录顺序:先显示登录窗口再显示
    MDI主窗口。
    上边的代码如果我把loginfm.showmodal便报错:cann't make a visible windows modal;
    loginfm不是自动创建,在project->option-》loginfm不自动创建登录窗口的确定按钮代码如下:
    procedure TLoginFm.BtnOkClick(Sender: TObject);
    var sPower:string;
    begin
      sPower :=Login(EtLoginid.Text,EtPW.Text);
      if sPower='' THEN begin
        msg('密码错误!','错误',2,0);
        exit;
      end else if sPower='0' then begin //一般操作 员
        mainfm.N1.Visible :=false;
        loginfm.close;
      end else if sPower='1' then begin //管理员权限
        loginfm.close;
      end;
      dm.Login_UserName:=EtLoginID.Text ;end;你能给我一个小例子吗
    非常感谢。
      

  14.   

    if startExe('进销存管理系统') then 是干什么用的?
      

  15.   

    1. 判断过程不在项目单元里写,在Form_login里写
    2. 项目单元如下:
    begin
      Application.Initialize;
      Application.ShowMainForm:=false; //程序不显示主窗口  
      Application.CreateForm(TForm_main, Form_main);
      Application.CreateForm(TForm_money, Form_money);
      //注意,Form_money的visible必须为false
      Application.Run;
    end.
    3. Main单元的OnCreate如下:
    begin
     Form_login:= TForm_login.Create(Application); //创建登陆窗口
     if Form_login.ShowModal=mrOK then self.show //登陆的密码正确,则显示自己
     else Application.Terminate; //否则,程序结束
    end;
    4. login单元的Button的onClick如下:
    begin
     if 密码正确 then ModalResult:=mrOK  //密码正确,关闭自己,返回值mrOK
     else //除了ModalResult:=mrOK以外,随你写了
    end;被ShowModal的窗体,只要有ModalResult:=[mrOK,mrCancel,mrAbort,..]等,就会自动关闭,并返回相应的值。
      

  16.   

    按楼上的步骤做了,
    还是提示error : cann't make a visible widows modal
      

  17.   


    3. Main单元的OnCreate如下:
    begin
     Form_login:= TForm_login.Create(Application); //创建登陆窗口
     form_login.showmodal; //密码正确错误全在登陆窗口中判断,关闭程序也在登陆窗口中完成,main窗体只负责调用登陆窗口,并显示自身
    end;
      

  18.   

    提示error : cann't make a visible widows modal
    你肯定在这之前设置了窗体的show,单步调试一下看看
      

  19.   

    将Login窗体的Visible设为false即可