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;