请把下面的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
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
解决方案 »
- 请教delphi实现程序自效验
- 如何向菜单里动态添加子菜单
- 关于Socket的编程
- [我只有10分了]超级难题!!!我用MySQL3.32.21b,其中有个表a要经常写数据进去,当数据到一定量,数据表就只能读不能写,怎么办啊?
- 请问把int型,转换成string型的函数是什么???
- 在delphi中怎么把一个含有指针的记录数组写入文件?
- Erwin4.0的问题?
- 会者不难:我在程序中动态地创建access库及其表结构,请问我如何定义double类型的字段带2位小数?????
- 请问,怎么让程序不显示任务栏和窗口运行
- ★★ 真心付出,人民币500+专家分4000等你拿,并有源程序交换,帮我UP者,我也会给他一些源程序,呵呵,不过你要写明要那方面的 ★★
- 数据录入的错误提示:急急!!!
- Cport 串口编程 的使用方法或实例 急 急 急
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;
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
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);可能有错误,希望能对你有帮助