學習筆記 DrawText

2022-01-19 15:08:55 字數 2066 閱讀 6437

最近在做乙個tstringgrid的自繪處理,在畫文書處理上遇到了高度的計算問題。後來經過一段時間還是找到了一些方法:

這個方法是有點繞路的,方法倒是簡單,就是使用autosize屬於來完成。。

drawtext的函式定義:

函式原型

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:單行顯示文字,回車和換行符都不斷行。

函式裡面最後面那段藍字標示的很重要,dt_calcrect就是用來計算文字尺寸的哦。。做個試驗吧:

procedure

tform1.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...