您的位置:首页 > 编程语言 > Delphi

WinAPI: DrawTextEx - 多功能文本绘制 Delphi需要把&替换成&&才可以

2015-09-14 18:50 701 查看
Delphi默认使用:DT_NOPREFIX

procedure TCanvas.TextRect(var Rect: TRect; var Text: string;

TextFormat: TTextFormat = []);

const

cTextFormats: array[TTextFormats] of Integer =

(DT_BOTTOM, DT_CALCRECT, DT_CENTER, DT_EDITCONTROL, DT_END_ELLIPSIS,

DT_PATH_ELLIPSIS, DT_EXPANDTABS, DT_EXTERNALLEADING, DT_LEFT,

DT_MODIFYSTRING, DT_NOCLIP, DT_NOPREFIX, DT_RIGHT, DT_RTLREADING,

DT_SINGLELINE, DT_TOP, DT_VCENTER, DT_WORDBREAK);

var

Format: Integer;

F: TTextFormats;

begin

Format := 0;

for F := Low(TTextFormats) to High(TTextFormats) do

if F in TextFormat then

Format := Format or cTextFormats[F];

DrawTextEx(Handle, PChar(Text), Length(Text), Rect, Format, nil);

if tfModifyString in TextFormat then

SetLength(Text, StrLen(PChar(Text)));

end;

//声明:

DrawTextEx(

DC: HDC; {设备句柄}

lpchText: PChar; {文本}

cchText: Integer; {要绘制的字符个数; -1 表示全部}

var p4: TRect; {矩形结构}

dwDTFormat: UINT; {选项}

DTParams: PDrawTextParams {附加参数, 指向一个 DRAWTEXTPARAMS 结构}

): Integer; {返回文本高度}

//dwDTFormat 参数的可选值:

DT_TOP = 0; {顶对齐, 须 or DT_SINGLELINE}

DT_LEFT = 0; {左对齐}

DT_CENTER = 1; {水平居中}

DT_RIGHT = 2; {右对齐}

DT_VCENTER = 4; {垂直居中, 须 or DT_SINGLELINE}

DT_BOTTOM = 8; {底对齐, 须 or DT_SINGLELINE}

DT_WORDBREAK = $10; {给超出边界的单词换行; 如果 SetTextAlign 函数设置了 TA_UPDATECP, 这里的设置无效}

DT_SINGLELINE = $20; {单行文本}

DT_EXPANDTABS = $40; {扩展制表符, 默认制表跨 8 个字符}

DT_TABSTOP = $80; {TAB 后添加的字符数}

DT_NOCLIP = $100; {使文本不限制在指定的矩形内}

DT_EXTERNALLEADING = $200; {返回的高度包括字体的外部行距}

DT_CALCRECT = $400; {自动检测容纳文本的矩形的高度和宽度, 并返回高度, 但文本不被绘制}

DT_NOPREFIX = $800; {不处理前缀字符(&); 默认时, & 后的字符会被添加下划线}

DT_INTERNAL = $1000; {用系统字体来计算文本高度}

DT_HIDEPREFIX = $00100000; {隐藏下划线}

DT_PREFIXONLY = $00200000; {将 & 解释为前缀}

DT_EDITCONTROL = $2000; {如果最后一行只是部分可见, 将不被绘制}

DT_PATH_ELLIPSIS = $4000; {文本过长时, 中间使用 ... 会尽量保留最后一个 \ 后面的字符}

DT_END_ELLIPSIS = $8000; {文本过长时, 尾部使用 ...}

DT_MODIFYSTRING = $10000; {省略显示, 只与 DT_PATH_ELLIPSIS、DT_END_ELLIPSIS 联合使用}

DT_RTLREADING = $20000; {从右到左绘制文本, 只用于相应语种}

DT_WORD_ELLIPSIS = $40000; {截短不符合矩形的正文, 并增加椭圆}

//DRAWTEXTPARAMS 结构是 tagDRAWTEXTPARAMS 的重定义:

tagDRAWTEXTPARAMS = packed record

cbSize: UINT; {结构大小}

iTabLength: Integer; {TAB 占位大小, 以字符平均宽度为单位}

iLeftMargin: Integer; {左边距, 以字符平均宽度为单位}

iRightMargin: Integer; {右边距, 以字符平均宽度为单位}

uiLengthDrawn: UINT; {返回 DrawTextEx 函数绘制的字符个数, 包括空格}

end;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: