Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listox: ItemHeight <--> Font.height (https://www.delphipraxis.net/197770-listox-itemheight-font-height.html)

Mattze 3. Sep 2018 09:14

Listox: ItemHeight <--> Font.height
 
Hallo,

gibt es bei der Listbox eigentlich einen Zusammenhang zwischen ItemHeight und Font.height.
Sprich: Wie roß sollte ItemHeight in Abhänggigkeit von Font.height sein?
Ich schätze momentan, es wäre am besten, wenn:
ItemHeight = -Font.height + 8;

Ob das stimmt???

Gruß
Mattze

Uwe Raabe 3. Sep 2018 09:36

AW: Listox: ItemHeight <--> Font.height
 
Wenn du die Font.Size änderst, passt sich die ItemHeight doch automatisch an, oder?

Amateurprofi 3. Sep 2018 09:49

AW: Listox: ItemHeight <--> Font.height
 
Ich hole mir die Höhe der Schrift mit
Delphi-Quellcode:
FH := ListBox.Canvas.TextHeight(' ');
und setze dann ItemHeight = FH bzw. auf einen Wert im Bereich FH bis FH*2.5.

Mattze 3. Sep 2018 10:14

AW: Listox: ItemHeight <--> Font.height
 
Hallo,

erstmal zu Uwe:
Font.height passt sich bei Änderung von FFont.size automatisch an.
ItemHeight aber nicht. Das ist davon formal unabhängig!

Zu Amateurprofi:
Leider kann ich das TextHeight vom Lsitbox.Canvas nicht benutzen. Zu der Zeit, wo ich es brauche, habe ich nur Font.size bzw. Font.height. Ich "spiele"mit mehreren Fonts in einer eigenen Komponente von TCustomListbox.

Mit meiner Version bin ich eigentlich recht zufrieden und das "+ 8" scheint auch zu stimmen.
Scheint!!!??? Ich frage dennoch. Sicherheitshalber!!!

Gruß Mattze

Amateurprofi 3. Sep 2018 10:33

AW: Listox: ItemHeight <--> Font.height
 
Zitat:

Zitat von Mattze (Beitrag 1412310)
Hallo,

erstmal zu Uwe:
Font.height passt sich bei Änderung von FFont.size automatisch an.
ItemHeight aber nicht. Das ist davon formal unabhängig!

Zu Amateurprofi:
Leider kann ich das TextHeight vom Lsitbox.Canvas nicht benutzen. Zu der Zeit, wo ich es brauche, habe ich nur Font.size bzw. Font.height. Ich "spiele"mit mehreren Fonts in einer eigenen Komponente von TCustomListbox.

Mit meiner Version bin ich eigentlich recht zufrieden und das "+ 8" scheint auch zu stimmen.
Scheint!!!??? Ich frage dennoch. Sicherheitshalber!!!

Gruß Mattze

Die Höhe der Schrift kannst du auch ohne ListBox.Canvas holen.
Zum Beispiel so:

Delphi-Quellcode:
FUNCTION FontHeight(Font:TFont):Integer;
var DC:HDC; OldFont:HFONT; Metrics:TTextMetric;
begin
   DC:=GetDC(0);
   try
      OldFont:=SelectObject(DC,Font.Handle);
      GetTextMetrics(DC, Metrics);
      SelectObject(DC,OldFont);
   finally
      ReleaseDC(0,DC);
   end;
   Result:=Metrics.tmHeight;
end;
Mit FontHeight(ListBox.Font) kriegst du die Höhe der Schrift.
Das von Dir verwendete FontHeigth + 8 halte ich für etwas unglücklich.
Bei sehr kleinem Font.Size werden die Zeilen (für meinen Geschmack) zu hoch, dagegen bei sehr großem Font.Size eventuell zu niedrig.

Mattze 3. Sep 2018 11:24

AW: Listox: ItemHeight <--> Font.height
 
Hallo,

danke für den Tipp zur Ermittlung der Schrifthöhe.
Offenbar habe ich aber nicht richtig beschrieben, worum es mir eigentlich geht.
Es geht mir nämlich eigentlich nicht um die Höhe der Schrift. Die habe ich mit -Font.height in Pixeln.
Mir geht es um die sinnvolle Breite der Zeile, wenn man so will "des Balkens" bei der Anwahl.
Also eigentlich über die Pixel, die über und unter der Schrift in der Zeile sind.
Die 8 (4 oben, 4 unten) habe ich daher, dass ich das mal mit einem Pixellineal ausgemessen habe. Da scheint das 8 Pixel mehr als die Schriftgröße zu sein.
Vielleicht sind es aber auch nur 6 oder nicht konstant oder oder...
Besser: Wie kann man das berechnen? Eigentlich wohl eine Art MeasureItem. Leider habe ich dazu bisher in den Quellen der Listbox usw. nix gefunden. (Ich habe Delphi 7 pro)

Gruß
Mattze

Uwe Raabe 3. Sep 2018 11:49

AW: Listox: ItemHeight <--> Font.height
 
Zitat:

Zitat von Mattze (Beitrag 1412310)
Font.height passt sich bei Änderung von FFont.size automatisch an.
ItemHeight aber nicht. Das ist davon formal unabhängig!

Vielleicht reden wir von verschiedenen Dingen. Ich mache ein neues VCL-Form Projekt in Delphi 10.2.3 Tokyo auf und platzieren eine TListBox auf das Form. Jetzt habe ich bei der ListBox ein ItemHeight = 13, Font.Size = 8 und Font.Height = -11. Ändere ich nun Font.Size auf 10, dann bekomme ich Font.Height = -13 und ItemHeight = 16.

Mattze 3. Sep 2018 12:27

AW: Listox: ItemHeight <--> Font.height
 
Hallo Uwe,

Du hast recht - und unrecht.
Das hängt mit dem Style zusammen.
Ist der lbStandard, kann man ItemHeight nicht setzen. Es wird automatisch entsprechend Font.size (Font.height) gesetzt.
Ist der Style lbOwnerDrawVariable wird der Itemheight "setzbar" und nix ist mehr mit automatisch.
Jedenfals sieht es bei mir momentan so aus...

Die anderen Styles habe ich jetzt nicht probiert...

Gruß
Mattze

Uwe Raabe 3. Sep 2018 12:45

AW: Listox: ItemHeight <--> Font.height
 
Zitat:

Zitat von Mattze (Beitrag 1412326)
Ist der lbStandard, kann man ItemHeight nicht setzen. Es wird automatisch entsprechend Font.size (Font.height) gesetzt.
Ist der Style lbOwnerDrawVariable wird der Itemheight "setzbar" und nix ist mehr mit automatisch.

Das ist richtig. Bei lbOwnerDrawVariable kann ja auch jedes Item eine eigene Height haben. In dem Fall entscheidest du ja auch selbst, wie das Item gezeichnet wird.

Anhand der Werte bei lbStandard kann man allerdings eine Formel von ca. ItemHeight := Round(-Font.Height*6/5) ableiten.

Mattze 3. Sep 2018 15:49

AW: Listox: ItemHeight <--> Font.height
 
Hallo Uwe,

vielen Dank für Deine Mühe. So habe ich auch versucht, das hinzubiegen.
Klappt nicht, muss noch anders sein!
Bsp:
Font.size<=8 ---> ItemHeight bleibt 13
Font.size=11 ---> ItemHeight bleibt 16 (bei 6/5 wäre es 18) usw.

(Ich hoffe, ich habe mich nicht verrechnet.)

Ich kriege da zurzeit kein gültiges Ergebnis raus...

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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