Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Canvas does not allow drawing ? (https://www.delphipraxis.net/73713-canvas-does-not-allow-drawing.html)

alienous 22. Jul 2006 18:37


Canvas does not allow drawing ?
 
hi,

vielleicht ist das ja ne dämliche frage, aber irgendwie steh ich gerade aufm schlauch...

jedenfalls möchte ich gerne mit einer funktion die optimale schriftgröße eines textes ermitteln, damit dieser genau in ein definiertes rechteck passt...

eigentlich ganz easy, habe ich vorher auf einer tgraphics32 komponente schön gezeichnet, und es hat auch funktioniert.
jetz dachte ich mir, wieso ne ganze komponente hernehmen, wenn ich doch nur das canvas brauch. also schnell umgeschrieben, und das resultat ist der oben im topic stehende fehler!

woran liegt das? kann ich nich einfach auf so ein canvas zeichnen? muss ich dafür die graphicskomponente hernehmen?

danke


Delphi-Quellcode:
function CalcFontHeight(PFont : TFont; PRect : TRect; PMin, PMax:Integer; PText : WideString):integer;
var HilfRect : TRect;
    i : Integer;
    HCanvas: TCanvas;
begin
  HCanvas := Tcanvas.Create;
  HilfRect := PRect;
  i := PMax;
  HCanvas.Font := PFont;
  HCanvas.Font.Height := PMAx;
  DrawtextW(HCanvas.Handle, PWideChar(UTF8Decode(pText)),Length(UTF8Decode(pText)), HilfRect, DT_WORDBREAK or DT_NOPREFIX or DT_EDITCONTROL or DT_NOCLIP or DT_CALCRECT);

  while ((i > PMin) and (HilfRect.Bottom > PRect.Bottom)) do
  begin
    dec(i);
    HilfRect := PRect;
    HCanvas.Font.Height := i;
    DrawtextW(HCanvas.Handle, PWideChar(UTF8Decode(pText)),Length(UTF8Decode(pText)), HilfRect, DT_WORDBREAK or DT_NOPREFIX or DT_EDITCONTROL or DT_NOCLIP or DT_CALCRECT);
  end;

   result := HCanvas.Font.Height;
   HCanvas.Free;
end;

mkinzler 22. Jul 2006 18:40

Re: Canvas does not allow drawing ?
 
Die Klasse TCanvas scheint keinen physikalischen Grafikkontext zu implemnetieren.

3_of_8 22. Jul 2006 18:41

Re: Canvas does not allow drawing ?
 
Du willst die Höhe eines Textzuges bestimmen?

Warum benutzt du nicht Canvas.TextHeight?

Der_Unwissende 22. Jul 2006 18:44

Re: Canvas does not allow drawing ?
 
Hi,
ich bin mir auch nicht sicher ob die Klasse TCanvas das tun sollte. Jedenfalls kannst du natürlich leicht mit einer lokalen Variable arbeiten, aber ein direkter TCanvas ist nur mässig sinnvoll. Welche Auflösung hat der denn? Und welche Größe?
Nimm lieber ein anderes Objekt, dass zum Zeichnen geeignet ist und einen eigenen Canvas erzeugt, ein TBitmap. Du hast nicht das Problem das hier auftritt und benötigst keine Graphics32 Komponente.

Gruß Der Unwissende

alienous 22. Jul 2006 18:51

Re: Canvas does not allow drawing ?
 
ok, dann machich das mit der alten methode, dachte nur, das ich so eventuell resourcen spare, aber ok.

@3of8, ich will einen textblock in ein bestimmtes rechteck zeichnen, der text soll dabei passend umgebrochen werden. der text is natürlich variablel...


ok danke für die infos!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz