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 Sortierung: Markierung auf ausgewähltem Icon beibeh (https://www.delphipraxis.net/59514-listview-sortierung-markierung-auf-ausgewaehltem-icon-beibeh.html)

K-Asche 23. Dez 2005 13:00


ListView Sortierung: Markierung auf ausgewähltem Icon beibeh
 
Hi@all,

beim sortieren eines ListViews über den Spaltenkopf, möchte ich das , dass ausgewählte Item markiert bleibt.

Wie könnte man das realisieren?

Gruß

Karsten

Martin K 23. Dez 2005 13:24

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
1. ListViews: Kann das eine ListBox sein ?
2. Item oder Icon - was meinst du nun?

Also ich gehe mal davon aus, dass das markierte Item, also der ItemIndex, nach dem Sortieren deiner ListBox wieder markiert werden soll.

Das könntest du so machen:
Merke dir den Inhalt des markierten Items, suche nach dem Sortieren nach diesem Item und markiere es.
Delphi-Quellcode:
var s: String; i: Integer;
begin
  s:=ListBox1.Items[ListBox1.ItemIndex];
  //sortieren
  i:=0;
  while s<>ListBox1.Items[i] do Inc(i);
  ListBox1.ItemIndex:=i;
end;
In Etwa müsste das so gehen...

K-Asche 23. Dez 2005 13:34

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
Danke probier ich mal aus:)

K-Asche 23. Dez 2005 13:48

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
Sorry hab nur den Source gelesen.
Ist eine TListView keine Box, darum funkt der Code so auch nicht. Und ich meine Items, TListItems um genau zu sein.

marabu 23. Dez 2005 13:53

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
Hallo Karsten,

das Prinzip ist immer dasselbe. Meine ListViews sind alle virtuell. Ich merke mir vor dem Sortieren das identifizierende Merkmal des gerade fokusierten Items, sortiere meine Datenliste und bestimme dann die neue Position des Items anhand des zwischengespeicherten Merkmals. Wenn du ohne Multiselect arbeitest, dann kannst du an Stelle des fokusierten auch das selektierte Item nehmen.

Grüße vom marabu

Martin K 23. Dez 2005 13:59

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
Sorry, habe nich nie mit ListView gearbeitet... :oops:

Aber theoretisch müsste das dann so gehen:
Delphi-Quellcode:
var s: TListItem; i: Integer;
begin
  s:=ListView1.Items[ListView1.ItemIndex];
  //sortieren
  i:=0;
  while s<>ListView1.Items[i] do Inc(i);
  ListView1.ItemIndex:=i;
end;

K-Asche 23. Dez 2005 14:08

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
@marabu
Irgendwie hab ich gerad nicht die geringste Ahnung wie ich vorgehen muss. Bin ja noch Anfänger in Delphi :)
In C++ gibt es eine SetItemState - Methode der man einfach den Index mitgibt welches Item markiert sein soll.
Gibt es so was auch in Delphi?

@Martin K
Hab ich auch gedacht! Nur arbeitet er hier die While Schleife gar nicht erst ab.

K-Asche 23. Dez 2005 14:28

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
So Funktioniert es jetzt:

Delphi-Quellcode:
Var TL : TListItem;
    S  : String;
    I  : Integer;
begin
  TL := lvTermine.Items[lvTermine.ItemIndex];
  S  := TL.Caption;
  I  := 0;
  //Sortierung
  while S <> lvTermine.Items[I].Caption do Inc(I);
  lvTermine.ItemIndex := I;
End;

Martin K 23. Dez 2005 15:23

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
Wie gesagt, ich habe zwar nicht viel Ahnung von ListViews, aber wenn ich mir den Code so anschaue, müsste man ihn noch vereinfachen können:
Delphi-Quellcode:
Var S : String;
    I : Integer;
begin
  S := lvTermine.Items[lvTermine.ItemIndex].Caption;
  I := 0;
  //Sortierung
  while S <> lvTermine.Items[I].Caption do Inc(I);
  lvTermine.ItemIndex := I;
End;
Da sparst du dir dann eine Variable !

Gruß, Martin

marabu 23. Dez 2005 16:32

Re: ListView Sortierung: Markierung auf ausgewähltem Icon be
 
Hallo ihr beiden,

hier noch was zum Kennenlernen:

Delphi-Quellcode:
procedure TDemoForm.lvTermineColumnClick(Sender: TObject;
  Column: TListColumn);
var
  sCaption: string;
  index: integer;
begin
  index := lvTermine.ItemIndex;
  if index > -1 then
    sCaption := lvTermine.ItemFocused.Caption;
  lvTermine.CustomSort(nil, Column.Index);
  if index > -1 then
    with lvTermine do
      ItemFocused := FindCaption(0, sCaption, false, true, false);
end;
Die Sortierung geschieht hier im Ereignis OnCompare() der nicht virtuellen ListView.

Weihnachtsgrüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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