后再优化和完善
// 修
改历史: 2006-07-10
// 修改描述: 成功地将ListView的OnData事件的List对象移入此类中
// 修改历史: 2006-07-11
// 修改描述: 重大重构:将此类分成两个类:TLVSoftSocket-->TLVSoftSocket和TLVQuickSocket
// 以遵循SRP原则
//------------------------------------------------------------------------------
unit unLVQuickSocket;
interface
uses
ComCtrls,Classes,SysUtils,Windows,
unLVQuickClass,unLVDefine;
type
TLVQuickSocket = class(TLVQuickClass)
private
protected
class function CheckFound(const pData:Pointer;const aKey:variant):boolean;override;
class procedure ProcOnDataDetail(const pData:Pointer;var Item: TListItem);override;
public
constructor Create();
destructor Destroy();override;
procedure InitListView(var lvTemp:TListView);
//快速方法
//暂时这样增加,以后在重构到基类中
procedure AddToLVSocketQuick(const aSocketStatus:TSocketStatusInfo;var lvTemp:TListView);
procedure UpdateLVSocketQuick(const aUniqueID:integer;const aSocketStatus:TSocketStatusInfo;var lvTemp:TListView);
procedure DeleteLVSocketQuick(const aUniqueID:integer;const aSocketStatus:TSocketStatusInfo;var lvTemp:TListView);
procedure DeleteAllLVSocket(var lvTemp:TListView);
procedure OnDataEvent(Item: TListItem);
function GetDataCount():integer;
end;
implementation
...{ TLVQuickSocket }
procedure TLVQuickSocket.AddToLVSocketQuick(
const aSocketStatus: TSocketStatusInfo;var lvTemp:TListView);
begin
AddItemDataToListView(@aSocketStatus,sizeof(aSocketStatus),lvTemp);
end;
class function TLVQuickSocket.CheckFound(const pData: Pointer;
const aKey: variant): boolean;
var
p:^TSocketStatusInfo;
begin
p := pData;
Result := (p.UniqueID = aKey);
end;
constructor TLVQuickSocket.Create;
begin
inherited Create();
end;
procedure TLVQuickSocket.DeleteAllLVSocket(var lvTemp: TListView);
begin
DeleteAllListView(lvTemp);
end;
procedure TLVQuickSocket.DeleteLVSocketQuick(const aUniqueID:integer;
const aSocketStatus: TSocketStatusInfo;var lvTemp:TListView);
begin
DeleteItemDataToListView(aUniqueID,@aSocketStatus,sizeof(aSocketStatus),lvTemp);
end;
destructor TLVQuickSocket.Destroy;
begin
inherited Destroy;
end;
function TLVQuickSocket.GetDataCount(): integer;
begin
Result := Self.GetLVListCount();
end;
procedure TLVQuickSocket.InitListView(var lvTemp: TListView);
begin
InitListViewColumns(SocketStrBuffer,SocketWidthBuffer,lvTemp);
end;
procedure TLVQuickSocket.OnDataEvent(Item: TListItem);
begin
Self.OnDataToListView(Item);
end;
class procedure TLVQuickSocket.ProcOnDataDetail(const pData: Pointer;var Item: TListItem);
var
pSock
et:^TSocketStatusInfo;
begin
//这两个有什么不同?
//CopyMemory(pSocket,pData,sizeof(TSocketStatusInfo));
pSocket := pData;
Item.Caption := IntToStr(pSocket.GroupID);
Item.SubItems.Add(IntToStr(pSocket.UniqueID));
Item.SubItems.Add(pSocket.IPAddress);
Item.SubItems.Add(pSocket.SubItemName);
Item.SubItems.Add(pSocket.LoginTime);
Item.SubItems.Add(pSocket.SendNumber);
Item.SubItems.Add(pSocket.RecNumber);
Item.SubItems.Add(pSocket