Arakis - Mi 14.08.02 09:20
Hi,
vermutlich muss ich dich auch enttäuschen: Es gibt tatsächlich keinen eindeutigen Weg, die Höhe eines Items einzustellen. Die Infos, die ich gefunden habe redeten alle in den Dunst hinein, also unbrauchbar. Jedenfalls musst du einen TCustomListView erstellen, mehr hab ich nicht gefunden :cry:
Bis dann
MedanoCC - Mi 14.08.02 16:54
Titel: DIE ANTWORT !!
Also, falls es jemand interessiert :) , hier die Antwort:
Es ist nicht mehr im Nachhinein machbar !
Um dieses trotzdem handeln zu können, muss also die Windows Message WM_MEASUREITEM abgefangen werden, die an das dem ListView übergeordneten Fenster bzw. an den Besitzer des ListView gesendet wird.
Hier muss man nun den Zeiger "lParam" mit einem Record des Typs MEASUREITEMSTRUCT "verknüpfen" und so erhält man die Parameter der Nachricht WM_MEASUREITEM.
Aus dem Record kann man nun den Typ des zu erstellenden Controls feststellen, also in diesem Fall ein ListView und man kann dann mittels der Eigenschaften "itemHeight" die Höhe der Eintragszeilen festlegen.
(Für die, die hiermit noch nicht so bewandert sind, kleine Anmerkung: Der Record wird nach Beendigung des WindowProc an den Control, hier ListView, zurückgegeben und dieses wertet dann die eingestellten Eigenschaften aus).
So kann man also dann doch die Höhe der Einträge festlegen.
Um das ganze im Nachhinein festzulegen, muss man Windows einfach vorgauckeln, dass das Control komplett neu gezeichnet werden muss und schon greift WM_MEASUREITEM.
Übrigens: Dieses Vorgehen ist dasselbe, wie wenn ein Menü von Hand per OwnerDraw ohne VCL erstellt werden soll ;)
Mehr Infos in der WinAPI oder im Google nach "Listview Item height" suchen und den zweiten gefundenen Eintrag anzeigen :D
Soweit von mir von hier....
MedanoCC
P.S.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Procedure TBESITZER.WndProc(var Message: TMessage); var ItemStruct: PMEASUREITEMSTRUCT; begin with Message do case Msg of WM_MEASUREITEM: if wParam <> 0 then begin ItemStruct:= PMEASUREITEMSTRUCT( lParam ); if ItemStruct.CtlType = 102 then //ODT_LISTVIEW { Stellt die ListViews ein } ItemStruct.itemHeight:= 18; //Höhe der Einträge end; end; Inherited WndProc(Message); end; |