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 ListView Eintrage verschieben (alternativ: kopieren) (https://www.delphipraxis.net/5184-listview-eintrage-verschieben-alternativ-kopieren.html)

Mat 27. Mai 2003 01:24


ListView Eintrage verschieben (alternativ: kopieren)
 
Hi,


ich habe ein Problem mit der ListView-Komponente:

der ViewStyle ist 'vsRecord'. Nun moechte ich die Eintraege manuell sortieren, also 'einen hoch' oder 'einen runter'.

Da ich dazu garnichts gefunden habe, hab ich probiert, den gerade ausgewaehlten Eintrag einfach mit AddItem zu kopieren, um dann anschliessend das Original zu loeschen..

In der Theorie klingt das ganz gut, aber leider klappt's nicht so richtig.. :(

Delphi-Quellcode:
  selected_item := ListView_Address.Selected;
  pos := ListView_Address.Items.IndexOf(selected_item);

  ListView_Address.Items.AddItem(selected_item, pos);

  ListView_Address.Items.Delete(pos + 1);
wenn ich dann den entsprechenden Button druecke, erhalte ich
'Access Violation at address 00000000. Read of address 00000000'


Das wirft mich als Einsteiger doch so ziemlich aus der Bahn.. :)

hat jemand eine Idee?


Danke
Mat

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

Luckie 27. Mai 2003 01:34

Hilfe -> TCustomListview -> OnCompare.
Ist sogar mit Code-Beispiel.

Zitat:

Da ich dazu garnichts gefunden habe, [..]
Dazu fällt mir jetzt eigentlich gar nichts mehr ein. :| Du hast weder in der Delphi-Hilfe gekuckt, noch die Foren-Suche benutz, noch in der Code-Library gekuckt, noch kannst du Google bemüht haben. Bei Google mit "delphi listview sortieren" gesucht und kuck mal, was der erste Link liefert...
http://www.google.de/search?q=delphi...a=lr%3Dlang_de
Genau, einen Beitrag aus der Delphipraxis in der Code-Library. :x

Christian Seehase 27. Mai 2003 01:49

Moin Mat,

erst einmal herzlich willkommen in der Delphi-PRAXiS.

Hier mal ein Beispiel, wie Du eine Zeile mit Hilfe eines Buttons nach oben verschieben kannst.

Delphi-Quellcode:
procedure TfrmMAIN.Button1Click(Sender: TObject);

var
  liTo : TListItem;

begin
  // Ist keiner oder der oberste Eintrag ausgewählt gibt's nichts zu tun
  if ListView1.Selected = nil then exit;
  if ListView1.Selected.Index = 0 then exit;
  // Eine neue Zeile über der markierten einfügen
  liTo := ListView1.Items.Insert(ListView1.Selected.Index-1);
  // die gewählte Zeile dort hinkopieren
  liTo.Assign(ListView1.Selected);
  // und dann löschen
  ListView1.Items.Delete(ListView1.Selected.Index);
end;

Mat 27. Mai 2003 02:41

Danke Chris, So funktionierts!!

@Luckie
ich wusste garnicht, das mein Rechner so offen ist, dass du mir bei der arbeit zuschauen kannst.
ich habe sehrwohl bei google, in der hilfe und hier im forum gesucht..
allerdings nicht nach 'listview sortieren', da ich ja nicht sortieren, sondern verschieben sollte.
Das Beispiel bei TCustomListView habe ich nicht gefunden, aber das zeigt ja auch das Veraendern von Spalten.

Wo wir also schon bei kindischen Anschuldigungen sind, du hast meinen Post nicht richtig gelesen! :)


Mat

Luckie 27. Mai 2003 11:22

Ok, dann haben wir uns mißverstandenund ich muß mich entschuldiegen.

Aber das habe ich unter "manuellen sortieren" verstanden, da man ja auch im Objekt-Inspektort die Sortierung voreinstellen kann. Hättest du geschrieben: "Wie kann ich einen Listviewitem per Button-Klick nach oben oder unten verschieben?" Dann wäre deutlicher geworde, was du meinst bzw. willst.

Mat 28. Mai 2003 14:56

aber chris hat mich verstanden! :D ok, ok war nur spass


is ja quatsch zu streiten, danke trotzdem fuer die hilfe

vielleicht schieb ich nochmal ne frage zur automatischen sortierung ein:

neben meinem listview gibt's drei knoepfe. einen zum hochschieben, einem zum runterschieben und einen zum komplett automatischen sortieren (steht sinnvollerweise 'abc' drauf :) )

zum sortieren benutze ich einfach

Listview1.SortStyle := (wie auch immer da automatisch heisst :) )
womit ja auch bestehende Eintrage sortiert werden

und danach setz ich den SortStyle einfach wieder auf manuell, wobei ja die bestehenden Eintraege nicht mehr veraendert werden, aber alle neuen Eintraege wieder hintenrangehangen werden.


Mir funktioniert das, aber irgendwie scheint das zu einfach... kann man das so lassen, oder gibt's elegantere Moeglichkeiten


Danke

Mat


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.

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