我的程序必须使用TMetaFile对象在TImage上绘制文本。为此,我调用系统函数" DrawTextEx"。
当我分配" Arial"字体和右对齐(标志DT_RIGHT)只有当字符串包含大量的" 1"时,文本才会被截断。 chars(即:" 111111111111111112" string)。
白色方块远小于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版本进行测试。