Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ListView ItemHeight (https://www.delphipraxis.net/191404-listview-itemheight.html)

EWeiss 12. Jan 2017 07:21

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

bra 12. Jan 2017 09:24

AW: ListView ItemHeight
 
Bringt dich das weiter:

https://community.embarcadero.com/bl...in-10-1-berlin

Ich weiss allerdings nicht, in wie weit das bei der VCL funktioniert.

EWeiss 12. Jan 2017 10:06

AW: ListView ItemHeight
 
Zitat:

Zitat von bra (Beitrag 1358701)
Bringt dich das weiter:

https://community.embarcadero.com/bl...in-10-1-berlin

Ich weiss allerdings nicht, in wie weit das bei der VCL funktioniert.

Nope NonVcl nicht VCL..
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

TiGü 12. Jan 2017 10:13

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;

EWeiss 12. Jan 2017 10:54

AW: ListView ItemHeight
 
Zitat:

Zitat von TiGü (Beitrag 1358709)
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;

Ahh Danke dann kann ich mir den GDI+ Kram sparen.
Delphi-Quellcode:
  if FItemHeight = 0 then
  begin
    ListView_GetItemRect(hListView, nItem, rc, LVIR_LABEL);
    FItemHeight := rc.Bottom - rc.top;
  end;
gruss

EWeiss 12. Jan 2017 11:02

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

bra 12. Jan 2017 11:28

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:

EWeiss 12. Jan 2017 11:38

AW: ListView ItemHeight
 
Zitat:

Zitat von bra (Beitrag 1358720)
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:

Es wird nicht funktionieren weil dafür das ListView sichtbar sein muss (in dem von dir verlinkten Beispiel).
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

TiGü 13. Jan 2017 07:58

AW: ListView ItemHeight
 
Edit: Quatsch!

EWeiss 13. Jan 2017 08:06

AW: ListView ItemHeight
 
Zitat:

Zitat von TiGü (Beitrag 1358768)
Edit: Quatsch!

Zitat:

Ist hListView ein Handle auf die ListView oder auf das ListItem?
Die Funktion erwartet das Handle eines einzelnen ListItem.
Erwartet das ListView Handle und gibt den Rect des Item zurück ;)

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr.
Seite 1 von 2  1 2      

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