最近在做乙個tstringgrid的自繪處理,在畫文書處理上遇到了高度的計算問題。後來經過一段時間還是找到了一些方法:
這個方法是有點繞路的,方法倒是簡單,就是使用autosize屬於來完成。。
drawtext的函式定義:
函式原型函式裡面最後面那段藍字標示的很重要,dt_calcrect就是用來計算文字尺寸的哦。。做個試驗吧:int drawtext(
hdc hdc, // 裝置描述表控制代碼
lpctstr lpstring, // 將要繪製的字串
int ncount, // 字串的長度
lprect lprect, // 指向矩形結構rect的指標
uint uformat // 正文的繪製選項
);引數
hdc:
[輸入]裝置環境控制代碼。
lpstring:
[輸入]指向將被寫入的字串的指標,如果引數ncount是-1,則字串必須是以\0結束的。 如果uformat包含dt_modifystring,則函式可為此字串增加4個字元,存放字串的緩衝區必須足夠大,能容納附加的字元。
ncount:
[輸入]指向字串中的字元數。如果ncount為-1,則lpstring指向的字串被認為是以\0結束的,drawtext會自動計算字元數。
lprect:
[輸入/輸出]指向結構rect的指標,其中包含文字將被置於其中的矩形的資訊(按邏輯座標)。
uformat:
[輸入]指定格式化文字的方法。它可以下列值的任意組合,各值描述如下:
dt_calcrect:這個引數比較重要,可以使drawtext函式計算出輸出文字的尺寸。如果輸出文字有多行,drawtext函式使用lprect定義的矩形的寬度,並擴充套件矩形的底部以容納輸出文字的最後一行。如果輸出文字只有一行,則drawtext函式改變矩形的右邊界,以容納下正文行的最後乙個字元。出現上述任何一種情況,drawtext函式將返回格式化文字的高度,而不是繪製文字。
dt_center:指定文字水平居中顯示。
dt_vcenter:指定文字垂直居中顯示。該標記只在單行文字輸出時有效,所以它必須與dt_singleline結合使用。
dt_singleline:單行顯示文字,回車和換行符都不斷行。
proceduretform1.button1click(sender: tobject);
varsdata:
string
; cellrect: trect;
begin
cellrect.left := 10
; cellrect.top := 10
; cellrect.right := 200
; cellrect.bottom := 25
; sdata := '
中中國國國 大';
drawtext(canvas.handle, pchar(sdata), length(sdata), cellrect, dt_wordbreak
ordt_calcrect);
end;
//執行後沒有在介面上畫文字
procedure
tform1.button2click(sender: tobject);
varsdata:
string
; cellrect: trect;
begin
cellrect.left := 10
; cellrect.top := 10
; cellrect.right := 200
; cellrect.bottom := 25
; sdata := '
中中國國國 大';
drawtext(canvas.handle, pchar(sdata), length(sdata), cellrect, dt_wordbreak);
end;
//執行後在介面上顯示一行字
注意點:
改變 DrawText 字型
cfontfont verify font.createpointfont 180,arial pdc 建立字型 arial格式 180為字高 font def font pdc selectobject font 選擇該字型進入pdc m size pdc gettextextent tmp lp...
drawText用法總結
drawtext 經常使用canvas的draw 方法去繪製一些影象圖形,繪製的座標是從canvas左上角開始計算的,如果想要把乙個影象放到某個位置,直接drawbitmap傳遞左上角的座標就行了。那drawtext就不一樣,如果你傳遞進去字串,會發現文字的位置和你指定的不一樣 文字計算是基於bas...
DrawText獲取文字寬度
今天來介紹三種獲取文字寬度的方法,並且我們將結果進行乙個對比 public class customview extends view override protected void ondraw canvas canvas public intgettextwidth string content...