TMetaFileCanvas和DrawTextEx,带有DT_RIGHT标志和Arial字体

时间:2015-07-14 15:10:25

标签: delphi delphi-2007 delphi-xe3 drawtext

我的程序必须使用TMetaFile对象在TImage上绘制文本。为此,我调用系统函数" DrawTextEx"。

当我分配" Arial"字体和右对齐(标志DT_RIGHT)只有当字符串包含大量的" 1"时,文本才会被截断。 chars(即:" 111111111111111112" string)。

enter image description here

白色方块远小于TImage画布。

我已经发布了有关此主题的问题,但答案并未与TMetaFile配合使用。

按照代码重现问题:

procedure TForm2.test2click(Sender: TObject);
var 
  rc: TRect;
  s : string;
  oldBrushColor: TColor;
  OldBrushStyle: TBrushStyle;
  MetaCanvas: TMetaFileCanvas;
begin
  // in my example, image1 size is W:585, H:225
  MetaCanvas := TMetafileCanvas.Create(Image1.Picture.Metafile, 0);

  rc := RECT(10, 10, 200, 200);

  oldBrushColor :=  MetaCanvas.Brush.Color;
  OldBrushStyle := MetaCanvas.Brush.style;

  MetaCanvas.Brush.Color := clWhite;
  MetaCanvas.Brush.style := bsSolid;

  MetaCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);

  MetaCanvas.Brush.Color := oldBrushColor;
  MetaCanvas.Brush.style := OldBrushStyle;
  MetaCanvas.Font.Name := 'Arial';

  MetaCanvas.Font.Height := 14;
  MetaCanvas.Brush.color := clwhite;
  MetaCanvas.Brush.style := bsClear;
  S := '111111111111111112'; 

  DrawTextEx(
    MetaCanvas.Handle,
    PChar(s),
    length(s),
    rc,
    DT_RIGHT,
    nil);

  MetaCanvas.Free;
end;

在Windows 7及更高版本上验证了此问题。使用delphi 2007和XE3版本进行测试。

0 个答案:

没有答案