Есть проблема с сим компонентом.
При добавлении в цикле в него строк, все предыдущие строки получают те же данные что и последняя.
Код:
//************** UPDATEGAMES **********************
procedure TUpdThread.Execute;
var
W: TWords;
Sl: TStringList;
I, ITemp: Integer;
begin
Sl := TStringList.Create;
W := TWords.Create;
try
Sl.Text := frmmain.http.Get('http://'+frmLogin.cbServer.Text+'/wormageddonweb/GameList.asp?Channel='+StringReplace(frmLogin.cbchan.Text,'#','',[]));
frmmain.games.Clear;
frmmain.lvGames.Clear;
for I := 1 to Sl.Count-2 do begin
if (Pos('<GAMELIST',Sl[I]) = 0) and (Sl[I] <> '') then begin
W.Text := Sl[I];
Node:=frmmain.games.GetFirstChild(frmmain.games.RootNode);
frmmain.games.BeginUpdate;
while Node <> nil do begin
Data:=frmmain.games.GetNodeData(Node);
if Data.GID = W[7] then break;
Node:=frmmain.games.GetNextSibling(Node);
end;
if Node = nil then Node:=frmmain.games.InsertNode(frmmain.games.RootNode, amAddChildLast);
Data:=frmmain.games.GetNodeData(Node);
Data^.Pad:=StrToIntDef(W[6],2);
Data^.Flag:={StrToIntDef(W[4],49)}0;
Data^.Games:=W[1];
Data^.Hoster:=W[2];
Data^.Ip:=W[3];
Data^.GID:=W[7];
frmmain.games.InvalidateNode(Node);
frmmain.games.EndUpdate;
with frmmain.lvGames.Items.Add do begin
if W[6] = '1' then
ImageIndex := 84 { Locked host }
else
ImageIndex := 85; { Unlocked host }
SubItemImages[Subitems.Add('')] := StrToInt(W[4]);
SubItems.Add(W[1]);
SubItems.Add(W[2]);
SubItems.Add(W[3]);
SubItems.Add(W[7]);
end;
end;
end;
except
end;
W.Free;
Sl.Free;
//Synchronize(Execute);
end;
//********************************************** MAINFRM **************************
procedure TfrmMain.gamesFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var Data: TDataNode;
begin
Data:=Games.GetNodeData(updategames.Node);
Data^.Pad:=0;
Data^.Flag:=0;
Data^.Games:='';
Data^.Hoster:='';
Data^.Ip:='';
Data^.GID:='';
end;
//*********************************************
procedure TfrmMain.gamesGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var Data: TDataNode;
begin
Data:=Sender.GetNodeData(updategames.Node);
case Column of
1:CellText:=IntToStr(Data^.Pad);
2:CellText:=IntToStr(Data^.Flag);
3:CellText:=Data^.Games;
4:CellText:=Data^.Hoster;
5:CellText:=Data^.Ip;
6:CellText:=Data^.GID;
end;
end;
//**************************************************
{ Структура }
type
TDataNode=^TData;
TData=record
Pad: Integer;
Flag: Integer;
Games: String;
Hoster: String;
Ip: String;
GID: String;
end;
Суть: