关键代码:
TUserStatus = (usOnline, usOffline, usBusy, usLeave);
POnlineUser = ^TOnlineUser;
TOnlineUser = record
Name: string;
IP: string;
Status: TUserStatus;
end;
//=== TList ==================
{ 初始化 }
procedure InitOnlineUser;
{ 清空程序使用的内存 }
procedure FinaOnlineUser;
{ 开辟一个新的PInfo 指针,填入信息并返回指针将在DeleteOnlineUser 或FinaInfo 里释放 }
function NewOnlineUser(Name, IP: string; Status: TUserStatus): POnlineUser;
procedure EditOnlineUser(aIndex: Integer; Name, IP: string; Status: TUserStatus);
procedure AddOnlineUser(Name, IP: string; Status: TUserStatus);
procedure DeleteOnlineUser(aIndex: Integer);
function OnlineUserExists(Name, IP: string; var aIndex: Integer): Boolean;
//=== end ===================
var
FOnlineUserList: TList;
procedure TFormMain.InitOnlineUser;
begin
FOnlineUserList := TList.Create;
end;
procedure TFormMain.FinaOnlineUser;
var
I:Integer;
begin
for I:=0 to FOnlineUserList.Count-1 do
Dispose(POnlineUser(FOnlineUserList.Items[i]));
FOnlineUserList.Free;
end;
{ 开辟一个新的PInfo 指针,填入信息并返回指针将在Command_Delete 或FinaInfo 里释放 }
function TFormMain.NewOnlineUser(Name, IP: string;
Status: TUserStatus): POnlineUser;
var
P: POnlineUser;
begin
New(P);
p.Name := Name;
p.IP := IP;
p.Status := Status;
Result := P; { 返回的指针将被保存在List里 }
end;
procedure TFormMain.EditOnlineUser(aIndex: Integer; Name, IP: string;
Status: TUserStatus);
var
P: POnlineUser;
begin
if (aIndex<0) or (aIndex>FOnlineUserList.Count) then
Exit;
P := FOnlineUserList.Items[aIndex];
p.Name := Name;
p.IP := IP;
p.Status := Status;
end;
procedure TFormMain.AddOnlineUser(Name, IP: string; Status: TUserStatus);
begin
FOnlineUserList.Add(NewOnlineUser(Name, IP, Status));
end;
procedure TFormMain.DeleteOnlineUser(aIndex: Integer);
var
P: POnlineUser;
begin
if (aIndex<0) or (aIndex>FOnlineUserList.Count) then
Exit;
P := FOnlineUserList.Items[aIndex];
FOnlineUserList.Delete(aIndex);
Dispose(P);
end;
function TFormMain.OnlineUserExists(Name, IP: string;
var aIndex: Integer): Boolean;
var
i: Integer;
begin
Result := False;
aIndex := -1;
for I := 0 to FOnlineUserList.Count-1 do
begin
if (POnlineUser(FOnlineUserList.Items[i]).Name=Name) and
(POnlineUser(FOnlineUserList.Items[i]).IP=IP) then
begin
aIndex := i;
Result := True;
Break;
end;
end;
end;