![]() |
TListView + OwnerData + CustomDrawItem
Hallo,
ich hab da mal n Problem: ich hab n TListView mit OwnerData und CustomDrawItem/CustomDrawSubItem erstellt; ViewStyle Report die Daten werden auch korrekt dargestellt, also OnData füllt Item.Caption und SubItems entsprechend Item.Index wenn aber OnCustomDrawItem aufgerufen wird steht im übergebenen Item.Index (meistens) Sender.ItemIndex; also der Index das selectierten Eintrages; CustomDrawState hingegen wird korrekt übergeben bei nem 12 Zeiligen Listview ruft er 12x OnCustomDrawItem auf, aber jedesmal steht in item.index ne Null; nur für die erste Zeile ist cdsSelected in State bei OnCustomDrawSubitem liefert er korrekte Indecees ohne OwnerData läufts korrekt hat das schonmal wer gesehen, oder hab ich's selbst verbockt? nochmal konkreter: mit procedure Txx.CustomDrawItem(...); begin OutputDebugString(PChar(format('CustomDrawItem : %d %s %s',[item.Index,item.Caption, StateToStr(State)]))); end; procedure Txx.CustomDrawSubItem(...); begin OutputDebugString(PChar(format('CustomDrawSubItem : %d %d %s',[item.Index, subitem, item.Caption]))); end; bekomm ich mit OwnerData ca. folgenden DebugOutput CustomDrawItem : 0 1.Zeile [cdsSelected] CustomDrawSubItem : 0 0 1.Zeile CustomDrawItem : 0 1.Zeile [] CustomDrawSubItem : 1 0 2.Zeile CustomDrawItem : 0 1.Zeile [] CustomDrawSubItem : 2 0 3.Zeile CustomDrawItem : 0 1.Zeile [] CustomDrawSubItem : 3 0 4.Zeile CustomDrawItem : 0 1.Zeile [] CustomDrawSubItem : 4 0 5.Zeile ohne OwnerData: (und so erwarte ich es auch mit Ownerdata) CustomDrawItem : 0 1.Zeile [cdsSelected] CustomDrawSubItem : 0 0 1.Zeile CustomDrawItem : 1 2.Zeile [] CustomDrawSubItem : 1 0 2.Zeile CustomDrawItem : 2 3.Zeile [] CustomDrawSubItem : 2 0 3.Zeile CustomDrawItem : 3 4.Zeile [] CustomDrawSubItem : 3 0 4.Zeile CustomDrawItem : 4 5.Zeile [] CustomDrawSubItem : 4 0 5.Zeile sowohl mit als auch ohne Ownerdata werden die korrekten Strings im Listview angezeigt, ich hab aber keine Möglichkeit, die Zeilen entsprechend des Indexes einzufärben o.ä und natürlich ändert meine OnData-Fkt nicht den Item.Index mfg |
AW: TListView + OwnerData + CustomDrawItem
Hallo,
vielleicht hilft Dir ein Blick in die OH: Zitat:
Zitat:
|
AW: TListView + OwnerData + CustomDrawItem
ok, ich habs gefunden :
in OnCustomDrawItem / OnCustomDrawSubItem darf man nicht Sender.ItemIndex lesen die Information kann man ja auch aus State = cdsSelected holen zum Beweis lustiges Debuglog:
Code:
Debug-Ausgabe: OnDrawItemA : 0 Item#0 Prozess vlvdemo.exe (4868)
procedure Txx.OnCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin OutputDebugString(PChar(format('OnDrawItemA : %d %s',[item.Index, Item.Caption]))); DefaultDraw := sender.itemindex <> -6; // Lesezugriff auf ItemIndex -- DefaultDraw ist und bleibt immer true OutputDebugString(PChar(format('OnDrawItemB : %d %s',[item.Index, Item.Caption]))); end; Debug-Ausgabe: OnDrawItemB : 1 Item#1 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemA : 1 Item#1 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemB : 1 Item#1 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemA : 2 Item#2 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemB : 1 Item#1 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemA : 3 Item#3 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemB : 1 Item#1 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemA : 4 Item#4 Prozess vlvdemo.exe (4868) Debug-Ausgabe: OnDrawItemB : 1 Item#1 Prozess vlvdemo.exe (4868) sender.ItemIndex war 1; wenn sender.ItemIndex = -1 tritt der Effekt nicht auf mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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