![]() |
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 |
AW: Listox: ItemHeight <--> Font.height
Wenn du die Font.Size änderst, passt sich die ItemHeight doch automatisch an, oder?
|
AW: Listox: ItemHeight <--> Font.height
Ich hole mir die Höhe der Schrift mit
Delphi-Quellcode:
und setze dann ItemHeight = FH bzw. auf einen Wert im Bereich FH bis FH*2.5.
FH := ListBox.Canvas.TextHeight(' ');
|
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 |
AW: Listox: ItemHeight <--> Font.height
Zitat:
Zum Beispiel so:
Delphi-Quellcode:
Mit FontHeight(ListBox.Font) kriegst du die Höhe der Schrift.
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; 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. |
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 |
AW: Listox: ItemHeight <--> Font.height
Zitat:
|
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 |
AW: Listox: ItemHeight <--> Font.height
Zitat:
Anhand der Werte bei lbStandard kann man allerdings eine Formel von ca. ItemHeight := Round(-Font.Height*6/5) ableiten. |
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 06:52 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