通过clipboard读取出来的图片可以在Timage里显示,却无法Savetofile-求大家帮帮忙 ( 积分: 100 )

  • 主题发起人 主题发起人 xinux11
  • 开始时间 开始时间
X

xinux11

Unregistered / Unconfirmed
GUEST, unregistred user!
通过clipboard读取出来的图片可以在Timage里显示,却无法Savetofile。(要么是保存出来的图片是无效的,要么就报"Unsupported Clipboard Format"错误)
我的目的是通过Delphi控制word生成艺术文字,再读入image1中,然后将保存为一个文件。代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleServer, comobj, ExtCtrls ,Clipbrd;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
WordApp: Variant;
begin
WordApp:=CreateOleObject('Word.Application');
WordApp.Documents.Add.Select;
WordApp.ActiveDocument.Shapes.AddTextEffect(15, '软件世界', '宋体', 5, 1, 0, 30, 30).Select;
WordApp.Selection.Copy;
Image1.Picture.Assign(ClipBoard);//这里如果用
image1.Picture.SaveToFile('c:/abcd.bmp');//这里如果改成:"Image1.Picture.Bitmap.Assign(ClipBoard);",就报"Unsupported Clipboard Format"的错误。如果不改,生成的图片是无效的。
WordApp.Quit(0);
end;

end.

求大家帮帮忙,我已经研究了好几天了,头发都直了
 
通过clipboard读取出来的图片可以在Timage里显示,却无法Savetofile。(要么是保存出来的图片是无效的,要么就报"Unsupported Clipboard Format"错误)
我的目的是通过Delphi控制word生成艺术文字,再读入image1中,然后将保存为一个文件。代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleServer, comobj, ExtCtrls ,Clipbrd;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
WordApp: Variant;
begin
WordApp:=CreateOleObject('Word.Application');
WordApp.Documents.Add.Select;
WordApp.ActiveDocument.Shapes.AddTextEffect(15, '软件世界', '宋体', 5, 1, 0, 30, 30).Select;
WordApp.Selection.Copy;
Image1.Picture.Assign(ClipBoard);//这里如果用
image1.Picture.SaveToFile('c:/abcd.bmp');//这里如果改成:"Image1.Picture.Bitmap.Assign(ClipBoard);",就报"Unsupported Clipboard Format"的错误。如果不改,生成的图片是无效的。
WordApp.Quit(0);
end;

end.

求大家帮帮忙,我已经研究了好几天了,头发都直了
 
D6+2000 测试过了,生成的图片背景色为白色.艺术字体色也接近白色.
 
D5+2000 也没有问题呀。
 
for I := 0 to ClipBoard.FormatCount - 1 do
Showmessage(intToStr(ClipBoard.Formats[0]));

 
你看看是否是位图格式 CF_BITMAP = 2;
 
ClipBoard.Formats
 
生成的格式应该是metafile(.emf)格式的,如果你有acdsee32的话可以看出来。

剪贴板中的格式如果不确定的话,最好先使用clipboard.hasFormat(CF_BITMAP)判断数据格式:

CF_TEXT Text with a CR-LF combination at the end of each line. A null character identifies the end of the text.
CF_BITMAP A Windows bitmap graphic.
CF_METAFILEPICT A Windows metafile graphic.
CF_PICTURE An object of type TPicture.
CF_COMPONENT Any persistent object.
 
其实你保存的图形在Word中插入图片是可以的,你用Image也可以读取。Win paint读不取,因为不是标准的位图格式.
 
生成的格式应该是metafile(.emf)格式的,如果你有acdsee32的话可以看出来。

剪贴板中的格式如果不确定的话,最好先使用clipboard.hasFormat(CF_BITMAP)判断数据格式
 
procedure TForm1.Button1Click(Sender: TObject);
var
WordApp: Variant;
Abmp:Tbitmap;
begin
WordApp:=CreateOleObject('Word.Application');
WordApp.Documents.Add.Select;
WordApp.ActiveDocument.Shapes.AddTextEffect(15, '软件世界', '宋体', 5, 1, 0, 30, 30).Select;
WordApp.Selection.Copy;
Image1.Picture.Metafile.Assign(ClipBoard);
Abmp:=Tbitmap.Create;
Abmp.Height:=Image1.Picture.Metafile.Height;
Abmp.Width:=Image1.Picture.Metafile.Width;
Abmp.Canvas.Draw(0,0,Image1.Picture.Metafile);
Abmp.SaveToFile ('c:/abcd.bmp');
Abmp.free;
WordApp.Quit(0);
end;

转换一下就OK
 
非常感谢大家的帮助,我使用ZYONG的方法已经可以保存图片了

再问一下,我现在仅调用了word的艺术字体功能,是不是要执行我的软件的电脑上一定要安装了word才行?可不可以将这个运行库加载到程序中呢?(就是说程序体积变大,但执行软件的电脑上不需要安装word也可以运行)
 
不要安装word不行
 
因为你是 WordApp:=CreateOleObject('Word.Application');
 
来自:jfyes, 时间:2005-3-9 14:16:32, ID:3008921
因为你是 WordApp:=CreateOleObject('Word.Application');

TO jfyes:

请教您,怎么写才可以不用安装word呢?
 
因为有些客户(使用者),他们的机器上不一定都安装了word,所以才有这么个问题
 
没有安装word不行的,怎么写都不行,除非你去问微软的程序员。
如果只是要一些特殊的字体效果,找其他控件试试看吧。
 
非常感谢,大家的帮助。
问题已经解决了,我的本意是用word的这个功能来做一个DLL可以生成艺术字,然后保存成图片,再显示在网页上,我现在用VML直接生成了,呵呵
 
后退
顶部