带有DT_RIGHT的DrawTextEx会截断文本

时间:2015-05-22 10:08:32

标签: delphi winapi delphi-xe

我正在使用DrawTextEx将字符串绘制到TCanvas中,但是,当我设置DT_RIGHT标志并且大多数字符为“1”且字体不是固定宽度时,(即:“551111,111”带有“ Arial“font”字符串的起始位置计算错误,似乎在最后一个字符上被截断(详见图片)。

enter image description here

在代码段下方:

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构建。

2 个答案:

答案 0 :(得分:1)

问题是您传递给AVCaptureConnection videoConnection = null; foreach(AVCaptureConnection connection in _videoOutput.Connections) { foreach ( AVCaptureInputPort port in connection.InputPorts) { if (port.MediaType == AVMediaType.Video) { videoConnection = connection; break; } } } if (videoConnection != null) { if (videoConnection.SupportsVideoOrientation) { videoConnection.VideoOrientation = AVCaptureVideoOrientation.LandscapeRight; } } 的矩形超出了画布的右边缘。

答案 1 :(得分:0)

您可以拨打两次DrawTextEx 第一次dwDTFormat = DT_CALCRECT获取TRect 输入输出参数中lprc结构的值;第二次你可以像你已经做的那样打电话,但是传递第一次通话获得的TRect修改
从第一次调用中获取宽度,然后在第二次调用DrawTextEx

之前重新定位rect