Delphi TList使用

关键代码:

  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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值