Socket.SendStream i ListView

0

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.

0
lsd100 napisał(a)

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.

Soory, za odkopywanie tematu, ale mam taki sam problem z TreeView. Pomocy :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0