DT_RIGHT 的 DrawTextEx 截断文本
DrawTextEx with DT_RIGHT truncates text
我正在使用 DrawTextEx 将字符串绘制到 TCanvas 中,但是,当我设置 DT_RIGHT 标志并且大多数字符为“1”并且字体不是固定宽度时,(即:“ 551111,111" "Arial" 字体)字符串的起始位置计算错误,似乎在最后一个字符处被截断(详见图片)。
代码片段下方:
var
dtPar: TDrawTextParams;
C: TCanvas;
R: TRect;
Align: Integer;
...
dtPar.cbSize := SizeOf(dtPar);
dtPar.iTabLength := 0;
dtPar.iLeftMargin := 0;
dtPar.iRightMargin := 0;
dtPar.uiLengthDrawn := 0;
Align := DT_NOPREFIX or DT_EDITCONTROL or DT_EXPANDTABS or DT_RIGHT or DT_WORDBREAK;
DrawTextEx(C.Handle, PChar(FTextToDisplay), -1, R, Align, @dtPar)
我试过几个 Windows 版本,我注意到在 Vista 或更高版本上会发生这种情况。它不会出现在 XP 上。
我正在使用 Delphi XE 3 构建。
你可以调用两次DrawTextEx
。
第一次用dwDTFormat = DT_CALCRECT
获取lprc
in-out参数中TRect
结构体的值;第二次你可以像你已经做的那样调用它,但传递第一次调用获得的TRect
。
编辑
从第一次调用中获取宽度,然后在第二次调用 DrawTextEx
之前重新定位矩形
问题是您传递给 DrawTextEx
的矩形超出了 canvas 的右边缘。
我正在使用 DrawTextEx 将字符串绘制到 TCanvas 中,但是,当我设置 DT_RIGHT 标志并且大多数字符为“1”并且字体不是固定宽度时,(即:“ 551111,111" "Arial" 字体)字符串的起始位置计算错误,似乎在最后一个字符处被截断(详见图片)。
代码片段下方:
var
dtPar: TDrawTextParams;
C: TCanvas;
R: TRect;
Align: Integer;
...
dtPar.cbSize := SizeOf(dtPar);
dtPar.iTabLength := 0;
dtPar.iLeftMargin := 0;
dtPar.iRightMargin := 0;
dtPar.uiLengthDrawn := 0;
Align := DT_NOPREFIX or DT_EDITCONTROL or DT_EXPANDTABS or DT_RIGHT or DT_WORDBREAK;
DrawTextEx(C.Handle, PChar(FTextToDisplay), -1, R, Align, @dtPar)
我试过几个 Windows 版本,我注意到在 Vista 或更高版本上会发生这种情况。它不会出现在 XP 上。
我正在使用 Delphi XE 3 构建。
你可以调用两次DrawTextEx
。
第一次用dwDTFormat = DT_CALCRECT
获取lprc
in-out参数中TRect
结构体的值;第二次你可以像你已经做的那样调用它,但传递第一次调用获得的TRect
。
编辑
从第一次调用中获取宽度,然后在第二次调用 DrawTextEx
问题是您传递给 DrawTextEx
的矩形超出了 canvas 的右边缘。