AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView ItemHeight

Ein Thema von EWeiss · begonnen am 12. Jan 2017 · letzter Beitrag vom 13. Jan 2017
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

ListView ItemHeight

  Alt 12. Jan 2017, 08:21
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

Geändert von EWeiss (12. Jan 2017 um 08:25 Uhr)
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: ListView ItemHeight

  Alt 12. Jan 2017, 10:24
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: ListView ItemHeight

  Alt 12. Jan 2017, 11:06
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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: ListView ItemHeight

  Alt 12. Jan 2017, 11:13
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;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: ListView ItemHeight

  Alt 12. Jan 2017, 11:54
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: ListView ItemHeight

  Alt 12. Jan 2017, 12:02
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

Geändert von EWeiss (11. Jul 2019 um 16:45 Uhr)
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: ListView ItemHeight

  Alt 12. Jan 2017, 12:28
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: ListView ItemHeight

  Alt 12. Jan 2017, 12:38
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
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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: ListView ItemHeight

  Alt 13. Jan 2017, 08:58
Edit: Quatsch!

Geändert von TiGü (13. Jan 2017 um 09:02 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: ListView ItemHeight

  Alt 13. Jan 2017, 09:06
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

Geändert von EWeiss (13. Jan 2017 um 09:08 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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