DELPHI 3 为什么不能正确读取CorelDraw 8导出的wmf文件?(200分)

J

jst

Unregistered / Unconfirmed
GUEST, unregistred user!
使用CorelDraw 8 画一个表格框,中间输入文字,导出为文本格式
的.wmf图元文件(文字转换为曲线格式并不存在这个问题),
用CorelDraw及Windows 98预览都能正确显示,TImage读取该文件
时显示内容被挤压了,为什么?
 
Wmf 文件中, 文字的模式和排列方式并没有CorolDraw中
的文字方式复杂, 所以WMF 的文字方式不可能表现出CDR
中的文字, 导出时必须要将文字格式转化为曲线格式. (这
和Delphi 没有什么关系).

TImage控件中的属性Strech属性设为
False, 便不会挤压变形了.

 
应该与Delphi有关, CorelDraw生成的WMF文件在很多程序中都没问题, 在Delphi
中就成了靠左边的一窄条了; 很可能是Delphi在解释WMF的源程序中少了点东西,
现在没时间研究他, 可以用Word在转换一次
 
这可能是因为
(1)TIMAGE中WMF文件是is an encapsulation of the Win32 Enhanced metafile,如果你的WMF文件不是增强格式,应该设置Enhanced属性为False
(2)TImage的strech属性是否为False,否则可能压缩图象,导致失真。

 
不关TImage的STRECH属性的事,取过来就变成窄条了。
另外请教HUIZHANG如何用WORD转换WMF?
 
jst:

1. 打开或新建一个word文档
2. 插入那个MetaFlie
3. UnGroup the MetaFile Image
4. Copy/cut to clipboard
5. PastTo Delphi
 
谢谢HUIZHANG
另外请问用何软件能生成DELPHI能正确读取的WMF图元文件?
(能缩放,不是PAINTSHOP等软件生成的点阵图)
 
我用smartdraw生成的wmf文件delphi中能正确读取, 并且缩放也没问题.
不过smartdraw主要是用来做流程图的 :)
我用那玩意画报表,这样在delphi中设计报表就不必画那些烦人的表格线了, 嘿嘿嘿嘿.
 
这个问题应该从根上解决他.

我看了一下Graphics.pas中的源码, 在TMetaFile.Draw中是使用了PlayEnhMetafile
函数, 这只是用来画Enhanced Metafile, 对于Win3.x格式的普通Metafile应该使
用PlayMetafile函数. 但是在整个Graphics.pas中找不到PlayMetafile函数. 而且
那个Enhanced属性在画TMetafile中根本没用到, 只是在创建的时候默认赋值为True.

两个解决方法(没有测试, 请你试一下, 请把结果告诉我):
1. 在CorelDraw中直接输出Ehanced Metafile, 估计可以直接在Delphi中使用
2. 修改TMetafile.Draw中的PlayEnhMetafile语句如下:
if Enhenced then
PlayEnhMetaFile(ACanvas.Handle, FImage.FHandle, R)
else
PlayMetaFile(ACanvas.Handle, FImage.FHandle);


 
谢谢Another_eYes,何处能找到该软件?
Huizhang,你的方法不行。
 
我试了最简单的方法, 不知道你能不能用?

在Corel Draw 8中选定目标后Copy ,

直接在Delphi中使用Paste.

 
jst:
这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于图形图象版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
多人接受答案了。
 

Similar threads

回复
0
查看
865
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部