Ich weiss der Thread ist alt, aber vielleicht kommt jemand (zB über die Suchfunktion) hierher.
Ich möchte auch den Inhalt einer Listview editieren - und bin zu folgender (Not-)Lösung gekommen:
Wenn die zu editierende Spalte fix ist, kann man zum Beispiel eine Inputbox verwenden und die Eingabe dann in's Listview zu schreiben.
Delphi-Quellcode:
procedure Change_Cell (AListView: TListView; const ARowIndex, AColIndex: Integer; const ANewContent: string);
// change content of a listview cell. colIndex 0 = leftmost column (caption)
var
vItem: TListItem;
begin
if aRowIndex < 0 then exit;
if aRowIndex+1 > AListView.Items.Count then exit;
// check ist wichtig. Denn bei ungültigem Index kommt sonst eine Zugriffsverletzung.
vItem := AListView.Items[ARowIndex];
if (AColIndex < 0) or (AColIndex > vItem.SubItems.Count) then
begin
messageDlg('Column doesnt exist.' , mtError, [mbOK], 0);
exit;
end;
// change content of the listview:
// lets use 0,1,2,3,... and translate to: caption,0,1,2,...
if AColIndex=0 then
vItem.Caption := ANewContent
else
vItem.SubItems[AColIndex-1] := ANewContent;
end;
procedure TForm1.ListView1Click(Sender: TObject);
var temp : string;
i:integer;
begin
if assigned(ListView1.Selected) then
begin
temp := inputbox('Fenstertitel','Enter name:','');
i := listview1.Selected.Index;
Change_Cell(ListView1, i, column, temp);
end;
end;
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten
API wie ein Stolperstein wirken.