Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Usereingaben im TListView (https://www.delphipraxis.net/144254-usereingaben-im-tlistview.html)

messie 3. Dez 2009 11:20


Usereingaben im TListView
 
Moin,

ich wollte Userzugriffe auf ein ListView im Report-Style zulassen, so dass dort Daten eingegeben und geändert werden können.

Geht aber nicht. Es gibt aber eine property ReadOnly und ein Hilfekapitel, was das Editieren beschreibt.

Kann mal jemand das Brett vor meinem Kopf abschrauben bzw die Wand wegschieben? :wall:

Grüße, Messie

DelphiBandit 3. Dez 2009 11:42

Re: Usereingaben im TListView
 
Hallo,

also bei mir eben zusammengeklickt und ist editierbar. Ist allerdings ein wenig tricky das Teil zu überreden, dass wir in den Editmodus wechseln wollen.

Die Listview muß natürlich auch Items beinhalten, die man editieren kann. Ohne gehts imho nicht, die müsste man vorher mit lv.Items.Add hinzufügen.

Mehrfacher Mausklick geht (RS2007) meist, F2-Taste bei mir gar nicht. Obwohl man das ja nachrüsten könnte und bei F2 das Teil in den Editmodus schaltet.

Delphi-Quellcode:
procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_F2 then
     ListView1.Items[0].EditCaption;
end;

nanix 3. Dez 2009 11:42

Re: Usereingaben im TListView
 
Explain it a bit more i also use listview and i might help..

messie 3. Dez 2009 12:18

Re: Usereingaben im TListView
 
Zitat:

Zitat von HondaGL1
Ist allerdings ein wenig tricky das Teil zu überreden, dass wir in den Editmodus wechseln wollen.

Ja, das Ding scheint verbeamtet zu sein und ist zur Dienstzeit nur schwer wach zu bekommen. :mrgreen:
Wenn ich im Ereignis OnEditing einen modalen Aufruf (ShowMessage'Tach!') einbaue, ist der Editiermodus anschließend aktiv. :wiejetzt:


Ich kann es jetzt so lösen:
Delphi-Quellcode:
procedure TForm1.ListView1Click(Sender: TObject);
begin
  if assigned(ListView1.Selected) then
  begin
    ListView1.Selected.EditCaption;
  end;
end;
Ich würde gerne dasselbe auch für die SubItems machen. Gibt es da einen Ansatz?

@nanix: Problem was to activate the edit mode. This is fixed but I even would like to use the edit-mode for subitems, too


Danke, Messie

Luckie 3. Dez 2009 12:38

Re: Usereingaben im TListView
 
Ich glaube Subitems kann man nicht editieren. Wäre ein StringGrid keine Alternative? Dies ist dafür - unteranderem - gedacht.

nanix 3. Dez 2009 12:41

Re: Usereingaben im TListView
 
:) Yes you cant edit subitems..

messie 3. Dez 2009 12:57

Re: Usereingaben im TListView
 
Zitat:

Zitat von Luckie
Ich glaube Subitems kann man nicht editieren. Wäre ein StringGrid keine Alternative? Dies ist dafür - unteranderem - gedacht.

Ja, Du hast recht: soeben gefunden

Zitat:

Zitat von MSDN
Im Gegensatz zu ListViewItem-Objekten können ListViewItem.ListViewSubItem-Objekte nicht direkt vom Benutzer bearbeitet werden.

Ich werde wohl ein StringGrid nehmen. Ist 'ne Frage der Optik, weil ich die Listviews bereits mehrmals verwendet habe. Das sieht schon anders aus...

Grüße, Messie

hoika 3. Dez 2009 13:13

Re: Usereingaben im TListView
 
Hallo,

dann nimm den Allestöter TVirtualStringTree.


Heiko

isilive 9. Dez 2016 22:13

AW: Usereingaben im TListView
 
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz