procedure TFrmLogin.Edit1Click(Sender: TObject);
begin
  FocusIndex := 1;
  SetInterFaceFocus(FocusIndex);
end;procedure TFrmLogin.BitBtn1Click(Sender: TObject);
var
  IniFile : TIniFile;
  FrmDownLoadData: TFrmDownLoadData;
begin
  Try
      if Not TestNetLink then begin
         Timer2.Enabled := False;
         FrmMain.MsgBox('网络连接已中断,请检查网络后重试!','系统提醒您',1,1);
         Timer2.Enabled := True;
         Exit;
      end else FrmMain.ComLinkDB('1');
      if (M_SysInfo.DBLinkBoolean) and (LoginValidate('',Trim(Edit1.Text),Trim(Edit2.Text),Trim(Edit3.Text))) then begin
          IniFile := TIniFile.Create(M_SysInfo.ExeFilePath + 'YcxCardiogramCollection.ini');
          IniFile.WriteString('WorkMode','DeptName',Trim(Edit1.Text));
          IniFile.WriteString('WorkMode','LoginId',Trim(Edit2.Text));
          IniFile.WriteString('WorkMode','LoginPW',Encypt(Trim(Edit3.Text)));
          IniFile.Free;
          M_SysInfo.LoginID := Trim(Edit2.Text);
          M_SysInfo.PassWord := Trim(Edit3.Text);
          SetIniFileDeptList;
          SetIniFileDeviceList;
          SetIniFileTestTypeList;
          if LoginMode = 'Login' then begin
             if M_SysInfo.WorkMode = 4 then  M_SysInfo.LoginMode := 2 //bb网络模式
             else M_SysInfo.LoginMode := 1  //网络模式
          end else begin
            {  if M_SysInfo.MsgID > 0 then FrmMain.MsgClientV1.UnRegister(M_SysInfo.MsgID);
              FrmMain.MsgClientV1.Register(M_SysInfo.ExeFilePath+'config_c');
              FrmMain.MsgClientV1.GetConnectID(M_SysInfo.MsgID);
              if M_SysInfo.MsgID <= 0 then begin
                Timer2.Enabled := False;
                FrmMain.MsgBox('消息服务器没有连接!','系统提醒您',1,1);
                Timer2.Enabled := True;
              end;  }
              if LoginMode = 'DownLoadLogin' then begin
               Try
                 self.Hide;
                 FrmDownLoadData := TFrmDownLoadData.Create(nil);
                 FrmDownLoadData.ShowModal;
                 FrmMain.ComLinkDB('2');           //下载完毕恢复连接状态
               Finally
                 FrmDownLoadData.Free;
               end;
             end;
          end;
         if  LoginMode = 'Login' then
         begin
         CloseStrate := '网络模式';//BitBtn1.Caption;
         end else
             CloseStrate := '确认';
          Close;
      end;
  Except
     Timer2.Enabled := False;
     FrmMain.MsgBox('登录失败!','系统提醒您',1,1);
     Timer2.Enabled := True;
  end;
end;那个M_SysInfo 从哪儿来的 有什么用? TestNetLink ?

解决方案 »

  1.   

    M_SysInfo 從你這段碼看,這是一個記錄類型的變量,而且可能是全局的。
      

  2.   

    1、Ctrl+ 鼠标左键,单击 M_SysInfo  ,可以看到他的定义位置,同时可以看到他是什么类型,如果看不到,有可能是编译成dcu供你使用了,有可能是一个record,也有可能是一个class ,如果是record的话,
    要使用需要 new(M_SysInfo )  ,如果是Class ,则需要M_SysInfo  := (M_SysInfo的类类型).create() ;
    M_SysInfo  :应该主要是用来存储数据使用,如果不定义一个record 或class,那么保存多个数据的时候,需要定义多个变量,主要是不容易维护 ;
    2、Ctrl+ 鼠标左键,单击 TestNetLink ,可以看到他的定义位置 ;TestNetLink 有可能是一个boolean型的变量,也有可能是一个返回值为boolean的函数 ;
      

  3.   

    M_SysInfo 在工程里搜下,看看定义,推荐2楼方法
      

  4.   

    谢谢大家!var
      M_SysInfo : PSysInfo;  这是什么类型?
      MacTransFile:LongBool;
      

  5.   

    同样的方法,搜索PSysInfo定义。
      

  6.   

    M_SysInfo : PSysInfo; 这是什么类型?
     
    指针,指向PSysInfo类型
      

  7.   

    代码不全呀,M_SysInfo 可能是个控件的“别名”,
    也可能是“自定义的过程或者函数”
      

  8.   


    然后就这样了,真是不太懂,以前学的C#,没见过指针,听说在C#中指针是被封装好了的,直接用。delphi 不一样....  能给我解释解释么?type
       PSysInfo = Record
         LoginMode : Integer;      //登录模式 (1:网络模式 2:本地模式)
      

  9.   

    PSysInfo 是record类型 类似c离得结构类型 
    TestNetLink 是一个函数 用来检测网络连接 返回值是布尔型
      

  10.   

    你想问啥? 你发的代码里没看到有指针类型的应用么;PSysInfo = Record  这是一个记录类型啊~指针类型一般是这么用的:PSysInfo = ^TSysInfo;
    TSysInfo = record
        LoginMode: Integer;
    end;
      

  11.   

    delphi指针 跟C类似PSysInfo = ^TSysInfo;
    TSysInfo = record
      LoginMode: Integer;
    end;var
       sys : psysinfo 
       a   : integer;   a := sys^.LoginMode;