AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI+ wie Schriftgröße bei DrawText verändern?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Tenobaal · begonnen am 21. Jul 2014 · letzter Beitrag vom 22. Jul 2014
Antwort Antwort
Tenobaal

Registriert seit: 9. Mai 2013
21 Beiträge
 
Delphi XE5 Professional
 
#1

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

  Alt 21. Jul 2014, 22:36
Hallo,
mein Problem ist eigentlich recht simpel.
Ich möchte eine Vektorgrafik beschriften, aber die Schriftgröße lässt sich nicht beeinflussen, sodass der Text abgeschnitten wird.
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.
Die Eigenschaft "Canvas.Font.Size" verhält sich genauso. Würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte.

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;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

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

  Alt 21. Jul 2014, 22:50
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
  Mit Zitat antworten Zitat
Tenobaal

Registriert seit: 9. Mai 2013
21 Beiträge
 
Delphi XE5 Professional
 
#3

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

  Alt 21. Jul 2014, 23:13
Wenn es so einfach ist warum behebst du es dann nicht.
Weil Google mir keine Hilfe war und stundenlanges Probieren ebenfalls nicht geholfen hat.

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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

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

  Alt 21. Jul 2014, 23:23
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

Geändert von EWeiss (11. Jul 2019 um 17:07 Uhr)
  Mit Zitat antworten Zitat
Tenobaal

Registriert seit: 9. Mai 2013
21 Beiträge
 
Delphi XE5 Professional
 
#5

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

  Alt 22. Jul 2014, 11:09
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

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
Miniaturansicht angehängter Grafiken
mitzahlen.png  

Geändert von Tenobaal (22. Jul 2014 um 11:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:52 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