S
smithcouple
Unregistered / Unconfirmed
GUEST, unregistred user!
以下是我临时写的一段程序,功能就是把自己绘的图元文件复制到剪贴版里,以便在Word中粘贴使用:
procedure TForm1.Button1Click(Sender: TObject);
var
Mfile : TMetafile;
MC: TMetafileCanvas;
MyFormat : Word;
AData : THandle;
APalette : HPalette;
begin
Clipboard.Open;
try
MyFormat := CF_ENHMETAFILE;
Mfile := TMetafile.Create;
Mfile.Enhanced := true;
Mfile.Width := 100;
Mfile.Height := 100;
MC := TMetafileCanvas.Create(Mfile, 0);
with MC do
begin
Font := Self.Font;
Ellipse(0,0,100,100);
TextOut(50,50,'Width');
Free;
end;
Mfile.SaveToClipboardFormat(MyFormat, Adata, Apalette);
Clipboard.Assign(Mfile);
try
Image1.Picture.LoadFromClipboardFormat(MyFormat, Adata, Apalette);
except
on EInvalidGraphic do
RaiseLastOSError;
end;
finally
Clipboard.Close;
end;
end;
画了一个圆,又写了'Width'字符串
问题来了
当我只画图形(直线 弧线 圆 矩形等)的时候,当我在Word中粘贴程序copy到剪贴板的图元图形时,Word对于此图形自动开启了"ClearType"模式,也就是平滑了图像线条边缘。
但当我加入TextOut(50,50,'Width');后,此时既有图形也有文本,这是我再在Word中粘贴,发现粘贴来的图像并不是平滑的了,而是有锯齿的。
此时若在Word中右键单击图形,选择“编辑图片”,整个图像又立刻被平滑了。。。
可见是因为有TextOut的缘故,但我的程序生成的图像是带文本的,我现在希望Word照样也能自动将其平滑。我也常是直接用Win32 API,结果还是一眼,带锯齿的。是否还有什么地方没有注意?比如MMWidth?请各位大虾帮忙看看,谢谢!
图片在这里:
procedure TForm1.Button1Click(Sender: TObject);
var
Mfile : TMetafile;
MC: TMetafileCanvas;
MyFormat : Word;
AData : THandle;
APalette : HPalette;
begin
Clipboard.Open;
try
MyFormat := CF_ENHMETAFILE;
Mfile := TMetafile.Create;
Mfile.Enhanced := true;
Mfile.Width := 100;
Mfile.Height := 100;
MC := TMetafileCanvas.Create(Mfile, 0);
with MC do
begin
Font := Self.Font;
Ellipse(0,0,100,100);
TextOut(50,50,'Width');
Free;
end;
Mfile.SaveToClipboardFormat(MyFormat, Adata, Apalette);
Clipboard.Assign(Mfile);
try
Image1.Picture.LoadFromClipboardFormat(MyFormat, Adata, Apalette);
except
on EInvalidGraphic do
RaiseLastOSError;
end;
finally
Clipboard.Close;
end;
end;
画了一个圆,又写了'Width'字符串
问题来了
当我只画图形(直线 弧线 圆 矩形等)的时候,当我在Word中粘贴程序copy到剪贴板的图元图形时,Word对于此图形自动开启了"ClearType"模式,也就是平滑了图像线条边缘。
但当我加入TextOut(50,50,'Width');后,此时既有图形也有文本,这是我再在Word中粘贴,发现粘贴来的图像并不是平滑的了,而是有锯齿的。
此时若在Word中右键单击图形,选择“编辑图片”,整个图像又立刻被平滑了。。。
可见是因为有TextOut的缘故,但我的程序生成的图像是带文本的,我现在希望Word照样也能自动将其平滑。我也常是直接用Win32 API,结果还是一眼,带锯齿的。是否还有什么地方没有注意?比如MMWidth?请各位大虾帮忙看看,谢谢!
图片在这里: