Ideja je da se nakon iscrtavanja nekog stringa (preuzetog iz RichEdit komponente) u Canvasu dobije tacna sirina stringa. Radi se o TrueType fontu, jer ce zavrsna slika ici u WMF. Napominjem da sam vec probao s funkcijama GetTextWidth, odnosno GetTextExtentPoint32 (API) i one lepo rade kad je u pitanju normalan font. Medjutim cim promenim stil fonta na Italic odmah prikazuje pogresno, npr. string 'asdf' vraca duzinu od 20 piksela i to je tacno, a italic vraca isto 20, a prava duzina je 26
procedure TForm1.AdjustEndRect(var CharW: Integer; Key: Char; MyCanvas: TCanvas);
var
iLastChar: cardinal;
iCharWidth: integer;
iCharInfo: TABC;
dc: HDC;
begin
dc := MyCanvas.Handle;
iLastChar := Ord(Key);
if GetCharABCWidths( dc, iLastChar, iLastChar, iCharInfo ) then //ovde vraca gresku
begin
iCharWidth := iCharInfo.abcA + integer(iCharInfo.abcB);
if iCharInfo.abcC >= 0 then //ako postoji odsupanje dodaj abcC
Inc( iCharWidth, iCharInfo.abcC );
end
else
GetCharWidth( dc, iLastChar, iLastChar, iCharWidth ); //ako ne, tekst nema odstupanja sledi obicna probera
if iCharWidth > 0 then
Inc( CharW, iCharWidth );
end;
Mozda sam nesto gadno pogresio ovde, posto sam slabije do sad radio sa API-jem.
Pozdrav




Tacna sirina stringa na Canvasu
