Hi,
wollte gerade die daten aus einer Tlistview übers internet verschicken und wollte einen möglichst eleganten weg gehen, dazu wollte ich meine listview in einen string umwandeln verschicken und dann wieder einlesen hier ist das ergebnis:
Delphi-Quellcode:
Type
TListViewStringConverter = Class Helper For TListView
private
function GetAsString: String;
procedure SetAsString(const Value: String);
Public
Property AsString : String Read GetAsString Write SetAsString;
End;
{ TListViewStringReader }
function TListViewStringConverter.GetAsString: String;
Var
sList,sRow : TStringList;
i : Integer;
Begin
sList := TStringList.Create;
sRow := TStringList.Create;
Try
sList.Delimiter := '\';
sRow.Delimiter := '#';
For i := 0 To Items.Count-1 do Begin
sRow.Clear;
sRow.Add(Items[i].Caption);
sRow.AddStrings(Items[i].SubItems);
sList.Add(AnsiQuotedStr(sRow.DelimitedText,'"'));
End;
Finally
sRow.Free;
Result := SList.DelimitedText;
sList.Free;
End;
End;
procedure TListViewStringConverter.SetAsString(const Value: String);
Var
sList,sRow : TStringList;
i : Integer;
item : TListItem;
Begin
sList := TStringList.Create;
sRow := TStringList.Create;
Items.Clear;
Try
sList.Delimiter := '\';
sList.DelimitedText := Value;
sRow.Delimiter := '#';
For i := 0 To sList.Count-1 do Begin
sRow.DelimitedText := AnsiDequotedStr (sList[i],'"');
Item := Items.Add;
Item.Caption := sRow[0];
sRow.Delete(0);
Item.SubItems.Assign(sRow);
End;
Finally
sRow.Free;
sList.Free;
End;
End;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
s : String;
begin
s := ListView1.AsString;
ListView1.AsString := s;
end;
Die Anzahl der Spalten ist nicht relevant,
Es werden alle Zeilen (ohne Überschriften) gespeichert und geladen.
mfg smallsmoker
p.s.: Danke an alzaimar für den Code.