[ krle_zr @ 17.11.2007. 12:46 ] @
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 ![]() Code: 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 |