Autor Beitrag
Tobi482
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135



BeitragVerfasst: Mi 06.06.07 19:17 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Tobi482 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 08.06.07 02:25 
user profile iconTobi482 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