AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Listox: ItemHeight <--> Font.height

Ein Thema von Mattze · begonnen am 3. Sep 2018 · letzter Beitrag vom 4. Sep 2018
Antwort Antwort
Seite 1 von 2  1 2   
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Listox: ItemHeight <--> Font.height

  Alt 3. Sep 2018, 09:14
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
9.304 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 3. Sep 2018, 09:36
Wenn du die Font.Size änderst, passt sich die ItemHeight doch automatisch an, oder?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
945 Beiträge
 
Delphi XE2 Professional
 
#3

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

  Alt 3. Sep 2018, 09:49
Ich hole mir die Höhe der Schrift mit FH := ListBox.Canvas.TextHeight(' '); und setze dann ItemHeight = FH bzw. auf einen Wert im Bereich FH bis FH*2.5.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

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

  Alt 3. Sep 2018, 10:14
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
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
945 Beiträge
 
Delphi XE2 Professional
 
#5

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

  Alt 3. Sep 2018, 10:33
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#6

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

  Alt 3. Sep 2018, 11:24
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
9.304 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 3. Sep 2018, 11:49
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#8

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

  Alt 3. Sep 2018, 12:27
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
9.304 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 3. Sep 2018, 12:45
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#10

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

  Alt 3. Sep 2018, 15:49
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf