程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 學習筆記 :DrawText,學習筆記drawtext

學習筆記 :DrawText,學習筆記drawtext

編輯:Delphi

學習筆記 :DrawText,學習筆記drawtext


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

 

1、使用TLabel

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

2、使用DrawText

  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);
var
  sData: 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 or DT_CALCRECT);
end;
//執行後沒有在界面上畫文本 procedure TForm1.Button2Click(Sender: TObject); var sData: 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計算後的矩形大小還是通過cellRect來返回的哦。這個參數傳入時是做為計算文本顯示的矩形大小,返回時就是文本實際占用的矩形大小。
  • 同時DrawText運算後也會有函數返回值的,就是文本實際的高度。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved