Einzelnen Beitrag anzeigen

alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#1

Canvas does not allow drawing ?

  Alt 22. Jul 2006, 19:37
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;
  Mit Zitat antworten Zitat