请把下面的vb代码转换成delphi代码,谢谢!Private Sub CCUDX_OnUserList(ByVal saUsers As Variant)
    Dim user As ccudxCtl.CUserInfo
    cmbUserList.Clear
    cmbOffUsers.Clear
    For i = LBound(saUsers) To UBound(saUsers)
        Set user = saUsers(i)
        If user.UserStatus = ONLINE Or user.UserStatus = BUSY Then
            cmbUserList.AddItem (user.UserName)
            cmbUserList.ItemData(cmbUserList.ListCount - 1) = user.UserId
        ElseIf user.UserStatus = OFFLINE Then
            cmbOffUsers.AddItem (user.UserName)
            cmbOffUsers.ItemData(cmbOffUsers.ListCount - 1) = user.UserId
        End If
    Next i
    
    If cmbUserList.ListCount > 0 Then
        cmbUserList.ListIndex = 0
    End If
    If cmbOffUsers.ListCount > 0 Then
        cmbOffUsers.ListIndex = 0
    End If
End Sub

解决方案 »

  1.   

    你是vb不懂,还是Delphi不懂?
      

  2.   

    给你打个框架,具体内容自己添加
    type
      TUserStatus =  (ONLINE, BUSY, OFFLINE);
      TUserList = class(TList) //保存ItemData中的数据
        FUserNameList: TStringList; //保存UserName
        FListIndex: Integer;
      private
        function GetItemData(Index: Integer): string;
        procedure SetItemData(Index: Integer; const Value: string);
        function GetListCount: Integer;
        function GetListIndex: Integer;
        procedure SetListIndex(const Value: Integer);
      public
        procedure Clear;
        procedure AddItem(UserName: string);
        property ItemData[Index: Integer]: string read GetItemData write SetItemData;
        property ListCount: Integer read GetListCount;
        property ListIndex: Integer read GetListIndex write SetListIndex;
      end;
      CUserInfo = class(TObject)
        FUserStatus: TUserStatus;
        FUserName: string;
        FUserId: string;
      private
        procedure SetUserId(const Value: string);
      public
        property UserStatus: TUserStatus read FUserStatus;
        property UserName: string read FUserName write FUserName;
        property UserId: string read FUserId write SetUserId;
      end;var
      cmbUserList: TUserList;
      cmbOffUsers: TUserList;procedure CCUDX_OnUserList(saUsers: array of CUserInfo);
    var
      user: CUserInfo;
      i: Integer;
    begin
      cmbUserList.Clear;
      cmbOffUsers.Clear;
      For i := Low(saUsers) To High(saUsers) do
      begin
        user := saUsers[i];
        If (user.UserStatus = ONLINE) Or (user.UserStatus = BUSY) Then
        begin
          cmbUserList.AddItem (user.UserName);
          cmbUserList.ItemData[cmbUserList.ListCount - 1] := user.UserId;
        end else if user.UserStatus = OFFLINE Then
        begin
          cmbOffUsers.AddItem (user.UserName);
          cmbOffUsers.ItemData[cmbOffUsers.ListCount - 1] := user.UserId;
        end;
      end;  If cmbUserList.ListCount > 0 Then
        cmbUserList.ListIndex := 0;
      If cmbOffUsers.ListCount > 0 Then
        cmbOffUsers.ListIndex := 0;
    End;{ TUserList }procedure TUserList.AddItem(UserName: string);
    beginend;procedure TUserList.Clear;
    beginend;function TUserList.GetItemData(Index: Integer): string;
    beginend;function TUserList.GetListCount: Integer;
    beginend;function TUserList.GetListIndex: Integer;
    beginend;procedure TUserList.SetItemData(Index: Integer; const Value: string);
    beginend;procedure TUserList.SetListIndex(const Value: Integer);
    beginend;{ CUserInfo }procedure CUserInfo.SetUserId(const Value: string);
    begin
      FUserId := Value;
    end;
      

  3.   

    Private Sub CCUDX_OnUserList(ByVal saUsers As Variant)
        Dim user As ccudxCtl.CUserInfo
        cmbUserList.Clear
        cmbOffUsers.Clear
        For i = LBound(saUsers) To UBound(saUsers) do
            Set user = saUsers(i);
            If user.UserStatus = ONLINE Or user.UserStatus = BUSY Then
              begin
                cmbUserList.keyItem (user.UserName);
                cmbUserList.Itemindexof(cmbUserList.ListCount - 1) = user.UserId;
              end;
            Else 
              begin
                cmbOffUsers.AddItem (user.UserName);
                cmbOffUsers.ItemData(cmbOffUsers.ListCount - 1) = user.UserId;
              end
             
        If cmbUserList.ListCount > 0 Then
            begin
              cmbUserList.itemindexof = 0
            end;
        End 
        If cmbOffUsers.ListCount > 0 Then
            begin
              cmbOffUsers.itemindexof = 0
            end;
       
    End Sub
      

  4.   

    偶也不是太懂,大概说说.估计转得没问题的不太容易
    1.不太好转的:  (1)
      Dim user As ccudxCtl.CUserInfo   
      有点象CoClass,CoClass在VB中的实现与Delphi中不一样.
      说不定要这样:
      var user: IDispath;
      begin
        ...
        user := ...;
      (2)
      saUsers As Variant
      Delphi中Variant没有VB中类型转换的那么潇洒自如,因为VB是弱类型的语言,
      比如VB中ASC("ABC")它也不出错,
      再如这样的居然也行:
      dim bVar as Boolean
      bVar="True"
      而这在Pascal、C中几乎是不可想象的。  举一个例子:
      var insertionPnt: Variant;
      begin
        ...
        insertionPnt:= VarArrayCreate([0,2], varDouble);
        //这样insertionPnt的上下限就是0到2了,而不使用LBound和UBound   2.  其它的只要语法对得上、换成相应的属性和方法就是可以的.比如  (1)
        If cmbUserList.ListCount > 0 Then
            cmbUserList.ListIndex = 0
      改成
          If cmbUserList.Count > 0 Then
            cmbUserList.itemIndex := 0;  (2)   
        cmbOffUsers.AddItem (user.UserName)
      改成
        cmbOffUsers.AddItem (user.UserName,cmbOffUsers);可能有错误,希望能对你有帮助