2010-12-20 44 views
2

我認爲我的問題已經夠清楚了,但我解釋得更多。簡單地說,當我們在RenderText過程中使用AntiAlias時,TextWidth函數中得到的值是不正確的。我能做些什麼來獲得正確的文字寬度?如何在Graphics32中檢索RenderText的確切文本寬度

+0

例如你解決這個問題? – Runner 2010-12-21 12:54:39

+0

是的。它完全用你提供的代碼完成。再次感謝你!!我真的需要這個 – Javid 2010-12-21 17:59:19

回答

4

您可以在自己的代碼中查找算法。他們也必須計算它。無論如何,這是我如何做到的。

function TGR32Canvas.TextWidth(const Text: string): Integer; 
var 
    TempFont: TFont; 
    TempWidth: Integer; 
begin 
    if Text <> '' then 
    begin 
    TempFont := TFont.Create; 
    try 
     TempFont.Assign(Font); 
     TempFont.Size := Font.Size shl AA_MODE; 
     TempWidth := GetTextWidth(Text, TempFont); 
    finally 
     TempFont.Free; 
    end; 
    end 
    else 
    TempWidth := 0; 

    TempWidth := (TempWidth shr AA_MODE + 1) shl AA_MODE; 
    Result := TempWidth shr AA_MODE; 
end; 

的GetTextWidth功能簡單。你可以做不同的事情。

function GetTextWidth(const Text: string; const Font: TFont): Integer; 
var 
    Canvas: TCanvas; 
begin 
    Canvas := TCanvas.Create; 
    try 
    Canvas.Handle := GetDC(0); 
    try 
     Canvas.Font.Assign(Font); 
     Result := Canvas.TextWidth(Text); 
    finally 
     ReleaseDC(0, Canvas.Handle); 
    end; 
    finally 
    Canvas.Free; 
    end; 
end; 
+0

從哪個單位得到它? GetTextWidth函數未識別。 – Javid 2010-12-20 20:53:34

+0

忘記顯示它。我編輯了答案。它可以做得更加優雅,但這個想法是一樣的,它的工作原理。 – Runner 2010-12-20 21:46:51

+0

非常感謝你! – Javid 2010-12-21 17:57:36

1

您也可以使用Windows API函數GetTextExtentPoint32 做一些谷歌找到德爾福

+0

GR32使用它自己的技術進行繪圖,所以我不認爲使用API​​會給你準確的結果。 – Runner 2010-12-21 05:43:24

相關問題