![]() |
ListView ItemHeight
Wie komme ich an die korrekte höhe eines ListView Items?
bzw. kann diese an Hand des übergebenen Fonts berechnen wenn keine Möglichkeit besteht diese über Sendmessage zu erfahren. Wenn ich Trebuched MS und PointSize 12 verwende habe ich eine höhe von 17 und übergebe 19 (+ Ein Pixel oben\Unten) nur wie komme ich daran wenn sich der Font ändert. Eine Höhe einfach auf gut dünken einzugeben scheint mir nicht der richtige weg zu ein. Wobei diese sich auch wieder verändert wenn ein Image zum Row addiert wird. gruss |
AW: ListView ItemHeight
Bringt dich das weiter:
![]() Ich weiss allerdings nicht, in wie weit das bei der VCL funktioniert. |
AW: ListView ItemHeight
Zitat:
Werde wohl nicht drum herum kommen die Höhe abhängig vom Font über GdipMeasureString (boundingBox) zu ermitteln. Ist jetzt wider zusätzlicher aufwand aber was soll's gruss |
AW: ListView ItemHeight
Willst du das vorher wissen und selber die Höhe errechnen und die Itemhöhe setzen oder interessiert dich die Höhe des Items nach dem Ändern der Schrift?
Bei letzteren erhälst du die Höhe des Items über das TRect prc:
Delphi-Quellcode:
function ListView_GetItemRect(hWnd: HWND; i: Integer; var prc: TRect;
Code: Integer): Bool; begin if @prc <> nil then begin prc.left := Code; Result := Bool(SendMessage(hWnd, LVM_GETITEMRECT, i, LPARAM(@prc))); end else Result := Bool(SendMessage(hWnd, LVM_GETITEMRECT, i, 0)); end; |
AW: ListView ItemHeight
Zitat:
Delphi-Quellcode:
gruss
if FItemHeight = 0 then
begin ListView_GetItemRect(hListView, nItem, rc, LVIR_LABEL); FItemHeight := rc.Bottom - rc.top; end; |
AW: ListView ItemHeight
OPs.. Geht doch nicht.
Wenn ich einen höheren Fontsize sagen wir mal 16 verwende geht es wieder nicht. Bei 12 ist das kein Problem da bekomme ich die 19 so wie jetzt eingestellt. Bei 16 sind es 22 Wenn ich das über GDI+ mache bekomme ich die korrekt höhe erst beim zeichnen. Ich brauche sie aber früher. Wenn die höhe nicht exakt stimmt wird das falsche Item selektiert bzw. ein falscher Song abgespielt. Hmm... gruss |
AW: ListView ItemHeight
Hast du mal, versucht es über den Code zu versuchen, den ich gepostet habe? Bei mir funktioniert der. Allerdings funktioniert er unter iOS/Android nicht, wenn die Schriftgröße der Standardgröße entspricht :roll:
|
AW: ListView ItemHeight
Zitat:
Ich benötige die ItemHöhe aber vorher weil abhängig davon die Images gezeichnet werden die anzeigen ob ein Eintrag selektiert wurde bzw. beim drüberfahren auf den Items. Bei GDI+ habe ich das Problem das ich kein gültiges DC habe solange nichts gezeichnet wird. gruss |
AW: ListView ItemHeight
Edit: Quatsch!
|
AW: ListView ItemHeight
Zitat:
Zitat:
Nebenbei: Salopp gesagt! Ist der größte Mist mit dem ListView warum konnte man das nicht so wie bei der ListBox händeln. Extrem verkompliziert das ganze. gruss |
AW: ListView ItemHeight
Genau das ist doch der Vorteil des ListView, dass nur die sichtbaren Elemente auch vorhanden sind. Bei der ListBox sind immer alle vorhanden und brauchen damit viel Speicher und lange zum Erstellen.
|
AW: ListView ItemHeight
Zitat:
Wenn man alle nicht sichtbaren Einträge behandelt ist das kein Wunder es geht aber auch anders. (Ist aber nicht mein Problem) Vorteile sehe ich da bei dem ListView in dieser Hinsicht keine. Listbox
Delphi-Quellcode:
ListView
TopIndex := ListGetTopIndex(WinHandle);
Count := ListCount(WinHandle); for i := TopIndex to Count do begin
Delphi-Quellcode:
Unterschiede sehe ich da keine bei beiden müssen alle Einträge durchlaufen werden.
TopIndex := ListView_GetTopIndex(WinHandle);
Count := ListView_GetItemCount(WinHandle); for i := TopIndex to Count do begin Hingegen.. bei der abfrage von nur sichtbaren teilen werden die nicht sichbaren Teile nicht mehr gezeichnet beim Scrollen.
Delphi-Quellcode:
Wo ist da der Vorteil?
TopIndex := ListView_GetTopIndex(WinHandle);
Count := ListView_GetCountPerPage(WinHandle); for i := TopIndex to Count do begin Warum also gibt es kein LVM_SETTOPINDEX wie bei der ListBox LB_SETTOPINDEX.. sorry das ist Schmarrn. Hier muss man mit Pixeln rechnen abhängig vom Font.. bei der ListBox nicht nötig. Das gleiche mit der VScrollBar die kann man nicht abschalten und wenn man es tut lässt sich das ListView nicht mehr scrollen. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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