Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GDI+ wie Schriftgröße bei DrawText verändern? (https://www.delphipraxis.net/181172-gdi-wie-schriftgroesse-bei-drawtext-veraendern.html)

Tenobaal 21. Jul 2014 21:36

GDI+ wie Schriftgröße bei DrawText verändern?
 
Hallo,
mein Problem ist eigentlich recht simpel. :-D
Ich möchte eine Vektorgrafik beschriften, aber die Schriftgröße lässt sich nicht beeinflussen, sodass der Text abgeschnitten wird. :gruebel:
Im nachfolgenden Code habe ich versucht das Problem übersichtlich zu rekonstruieren. Wie in meinem Programm wird auf eine Image-Komponente gezeichnet.
Die interne Auflösung der Grafik (Window) ist 10x größer als die des Viewports bzw. Image-Clientbereichs.
Wenn die Zeile "Image1.Canvas.Font.Height:=1" auskommentiert wird, dann erscheint der Text sehr klein, was durch die höhere interne Auflösung des Bildes entsteht (logisch).
Befindet sich die Zeile "Image1.Canvas.Font.Height:=1" jedoch im Quellcode, dann wird der Text skaliert. Scheinbar spielt es aber keine Rolle, welcher Wert für "Height" eingegeben wird. Die Textgröße ist immer identisch. :shock:
Die Eigenschaft "Canvas.Font.Size" verhält sich genauso. Würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte. :thumb:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var dc:HDC; MyRect:TRect; pstr:PChar;
begin
dc:=Image1.Canvas.Handle;
SetMapMode(dc,MM_ISOTROPIC);
SetWindowExtEx(dc,Image1.Clientwidth*10,Image1.Clientheight*10,nil);
SetViewportExtEx(dc,Image1.Clientwidth,Image1.Clientheight,nil); // Clientwidth=600, Clientheight=600

//Beschriftung
MyRect:=Rect(10,10,200,200); //Abmessung bezieht sich auf Window! Nicht Viewport!
pstr:='Test'; //Irgentein Text
Image1.Canvas.Font.Height:=1; //Wenn auskommentiert Schrift sehr klein, Wert hat jedoch keinen Einfluss auf Schriftgröße
DrawText(dc, pstr, length(pstr),MyRect,DT_Top);
end;

EWeiss 21. Jul 2014 21:50

AW: GDI+ wie Schriftgröße bei DrawText verändern?
 
Zitat:

mein Problem ist eigentlich recht simpel.
Wenn es so einfach ist warum behebst du es dann nicht.

Zum Thema!
Kann nirgends erkennen wo du GDI+ verwendest.

DrawText hat nichts mit GDI+ zu tun. Oder?

gruss

Tenobaal 21. Jul 2014 22:13

AW: GDI+ wie Schriftgröße bei DrawText verändern?
 
Zitat:

Zitat von EWeiss (Beitrag 1266272)
Wenn es so einfach ist warum behebst du es dann nicht.

Weil Google mir keine Hilfe war und stundenlanges Probieren ebenfalls nicht geholfen hat.

Zitat:

Zitat von EWeiss (Beitrag 1266272)
Kann nirgends erkennen wo du GDI+ verwendest.
DrawText hat nichts mit GDI+ zu tun. Oder?

In meiner Literatur steht die Funktion unter GDI. Das "+" ist mir so rausgerutscht.

EWeiss 21. Jul 2014 22:23

AW: GDI+ wie Schriftgröße bei DrawText verändern?
 
Zitat:

Image1.Canvas.Font.Height
Hat halt nichts mit dem Size des Fonts zu tun ;)

Ob DrawText das wahre ist mag dahin gestellt sein.
Hab mal ein Beispiel angehängt.

Allerdings ändert dieses Beispiel auch nicht den Font-Size
sondern skaliert diesen nur.

Wenn du den Font-Size ändern willst würde ich eher zu
CreateFont/CreateFontIndirect und TextOut tendieren.


gruss

Tenobaal 22. Jul 2014 10:09

AW: GDI+ wie Schriftgröße bei DrawText verändern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, danke. Dein erstes Beispiel hat mich schon auf den richtigen Weg gebracht. Mein Programm ist allerdings sehr langsam geworden, nachdem der Text hinzugefügt wurde.
Werde dann mal TextOut probieren :thumb:

Edit: Hab das Programm nun mit TextOut realisiert und es ist wesentlich schneller geworden.
Delphi-Quellcode:
var myFont:HFONT;RectStr:TRect; dc:HDC;
//...    
myFont := CreateFont(RectStr.Height, 0, 0, 0, 0, 0, 0, 0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
         DEFAULT_QUALITY,DEFAULT_PITCH,'Arial');
OldFont:=SelectObject(dc,MyFont);
ExtTextOut(dc,RectStr.Left,RectStr.Top,ETO_CLIPPED,RectStr,pstr,Length(pstr),nil);
SelectObject(dc,OldFont);
DeleteObject(MyFont);

//...
http://www.delphipraxis.net/attachme...1&d=1406020162


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 Uhr.

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