Witam. Mając gotowy wypełniony ListView chciałem go przesłac przez Sockety.Jest możliwosć wrzucenia wszystkich Captio i SubItems powiedzmy Do MemoryStream, a potem przesłać zawartość MemoryStream do Klienta powiedzmy Socket.SendStream(MemoryStrream) ? A potem klienta odczytać przysłany Stream i wpisać do ListView u klienta ??
Albo może mi ktoś podpowie jak przekształcic te procedury żeby nie zapisywały danych do pliku ,tylko do MemoryStream ,ktorego zawartosc potem wysle do klienta :
procedure WriteString(FStream: TStream; StringData: String);
var S: TStringStream;
Len: DWord;
begin
if StringData = '' then begin
Len := 0;
FStream.Write(Len, SizeOf(Len));
end else begin
S := TStringStream.Create(StringData);
try
Len := S.Size;
FStream.Write(Len, SizeOf(Len));
FStream.CopyFrom(S, Len);
finally
S.Free;
end;
end;
end;
procedure SaveItemToStream(Stream: TStream; const itm: TListItem);
var i, sCount: Integer;
begin
// zapis Caption
WriteString(Stream, itm.Caption);
// zapis liczby subitems
sCount := itm.SubItems.Count;
Stream.Write(sCount, SizeOf(sCount));
// zapis subitems
for i:=0 to sCount-1 do begin
WriteString(Stream, itm.Subitems[i]);
end;
end;
procedure SaveItemsToFile(lv: TListView; const aFile: String);
var i, iCount: Integer;
F: TFileStream;
begin
F := TFileStream.Create(aFile, fmCreate);
try
iCount := lv.Items.Count;
F.Write(iCount, SizeOf(iCount));
for i:=0 to iCount-1 do begin
// zapisywanie Item'a do strumienia
SaveItemToStream(F, lv.Items[i]);
end;
finally
F.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SaveItemsToFile(LV1, 'plik.txt');
end;
Chciałbym zapisać zawartość tego ListView do Memory Stream ,a nie do pliku.