Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Schriftgröße berechnen
Tobi482 - Mi 06.06.07 19:17
Titel: Schriftgröße berechnen
Hi Leute,
ich hänge gerade etwas und komme nicht so recht weiter.
Ich benutzte gerade die GDI32.dll für die umsetzung eigener Controls in DirectX.
Dabei Zeichne ich einen Kasten(Button) den ich beschriften möchte. Der Button hat
eine Feste größe, die nicht verstellt werden darf. Der darauf gerenderte Text soll
immer genau auf den Button passen. Er muss also je nach Button.Width seine Textgröße
ändern.
z.B.
Button.Width = 200 Pixels
Das Wort "Drück Mich" braucht Textgröße x um auf den Button zu passen
Button.Width = 100 Pixels
in diesm Fall braucht der gleiche Text "Drück Mich" einen kleinern Schriftgrad als x
Delphi-Quelltext
1: 2: 3: 4:
| Function GetTextSize(Text:String; FontName:String; RectWidth:Integer):Integer; begin Result := ... end; |
Ich kriege diese Funktion einfach nicht mit Code gefüllt :(
Evtl kann mir einer von euch helfen
PS: GetTextExtentPoint32 ist der umgedrehte Fall
Mit freundlichen Grüßen
Tobi
Lossy eX - Mi 06.06.07 19:36
So etwas kannst du nicht abfragen. Normale vorgehensweise mit der GDI ist, dass du ein Font der Schriftgröße X erstellst, dieses auf einen DC zuweist und dann die Größe abfragst bzw Text ausgibst. Somit ist das was du vor hast technisch von der GDI nicht vorgesehen, da du eine Schriftgröße zu einer Breite haben möchtest.
Dir wird nichts übrig bleiben als von 1 an alle Schriftgrößen auszuprobieren bis du eine gefunden hast bei der der Text größer ist.
Wobei ich ehrlich gestehe, dass ich nicht so ganz verstehe was das Bringen soll. Also die Schriftgröße an das Element anzupassen. Soft nur dafür, dass du bei 5 Elementen 5 verschiedene Textgrößen erhälts und das sieht sicherlich nicht mehr gut aus.
Tobi482 - Do 07.06.07 16:28
Hi,
Danke für deine Antwort. Ist zwar nicht das was ich
mir gewünscht hatte, aber muss ich mich wohl mit
zufrieden geben^^. Das mit der Schleife und dem
Durchtesten hatte ich auch probiert. Ist etwas
unschön, da es eher einer Interpolation ähnelt,
als einer Berechnung.
Ich finde schon noch einen Weg. Habe GetTextExtentPoint32(GDI32.dll)
soweit wie möglich reversed und bin gerade dabei, die Funktion
von hinten aufzukrempeln. Was die compiler nicht alles für
einen Schrott optimieren -.-
Nochmals Danke
Gruß Tobi
Reinhard Kern - Fr 08.06.07 02:25
Tobi482 hat folgendes geschrieben: |
Hi,
Danke für deine Antwort. Ist zwar nicht das was ich
mir gewünscht hatte, aber muss ich mich wohl mit
zufrieden geben^^. Das mit der Schleife und dem
Durchtesten hatte ich auch probiert. Ist etwas
unschön, da es eher einer Interpolation ähnelt,
als einer Berechnung.
....
Gruß Tobi |
Hallo Tobi,
ganz so schlimm ist es nicht: es muss zwar nicht ganz korrekt sein, dass ein 10 Punkt-Font doppelt so gross ist wie ein 5 Punkt-Font der gleichen Schrift (!), aber annähernd schon, und zwar umso genauer, je grösser die Schrift ist.
Wenn also die Länge des Textes bei 20 Punkt um den Faktor 3 zu gross ist, so ist 20 / 3 schon eine sehr gute Näherung für die gesuchte Schriftgrösse.
wie gesagt, bei der gleichen Schrift - verschiedene zu vergleichen ist schon rein logisch sinnlos, da könntest du ja ein ganzes Universum von Schriften abklappern.
Gruss Reinhard
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!