DLL动态库调用Clipboard功能出错,求救!

yeinuse 2008-11-27 02:39:16
先贴代码(功能原理是:参数img传递过来的TImage的图片先复制到剪切板中,再插入到word中去):

library PrnWord;

uses Clipbrd;
...
function PrnWordInsertImg(var img: TImage; sBookMark: String=''):boolean;stdcall;
var
wRange: Variant;
begin
...

if img.Picture.Graphic<>nil then
begin
Clipboard.Assign(img.Picture); //执行到这段代码出错提示:cannot assign a Tpicture to a TClipboard
wRange.Paste;
end;
...
end;

exports
PrnWordInsertImg;
...


调用方法没有问题!!!
以上同样的代码放在PAS文件中,去调用,不会出现问题。
...全文
169 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeinuse 2008-12-01
  • 打赏
  • 举报
回复
image的测试通过。 但是chart的怎么处理,没有找到办法
yeinuse 2008-11-29
  • 打赏
  • 举报
回复
OK. 3Q,礼拜一去测试下。
yeinuse 2008-11-28
  • 打赏
  • 举报
回复
上班前顶个,需求解答啊!!!!呼呼
aniugee 2008-11-28
  • 打赏
  • 举报
回复
测试通过

function PrnWordInsertImg(var img: TImage; sBookMark: String=''):boolean;stdcall;
var
wRange: Variant;
MyFormat : Word;
Bitmap : TBitMap;
AData: THandle;
APalette:HPalette;
begin
CoInitialize (nil);
wRange:= CreateOleObject('Word.Application');
wRange.Visible := True;
wRange.Activate;
wRange.documents.Add;
if img.Picture.Graphic<>nil then
begin
img.Picture.SaveToClipBoardFormat(MyFormat,AData,APalette);
ClipBoard.SetAsHandle(MyFormat,AData);
wRange.Selection.Paste;
end;
// CoUninitialize;
end;
aniugee 2008-11-28
  • 打赏
  • 举报
回复

function PrnWordInsertImg(var img: TImage; sBookMark: String=''):boolean;stdcall;
var
MyFormat : Word;
Bitmap : TBitMap;
AData: THandle;
APalette:HPalette;
begin
if img.Picture.Graphic<>nil then
begin
img.Picture.SaveToClipBoardFormat(MyFormat,AData,APalette);
ClipBoard.SetAsHandle(MyFormat,AData);
end;
end;

终于帮你搞定了
aniugee 2008-11-28
  • 打赏
  • 举报
回复
晕,没看清题
dll uses ShareMem单元试一下
aniugee 2008-11-28
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var
map : TBitmap;
begin
if ClipBoard.HasFormat(CF_BITMAP) then
begin
map := TBitMap.create;
try
map.Assign(ClipBoard);
except
map.Free;
end;
Image1.Picture.Assign(map);
map.SaveToFile('c:\1111.jpg');
map.Free;
clipboard.Clear;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
image2.Picture.LoadFromFile(opendialog1.FileName);
ClipBoard.Open;
ClipBoard.Assign(image2.Picture);
ClipBoard.Close;
end;
end;
nanchangfantasy 2008-11-28
  • 打赏
  • 举报
回复
好问题啊,学习!!!
yeinuse 2008-11-27
  • 打赏
  • 举报
回复
使用 img.Picture.Bitmap 反而会提示命令失败, 不管是放在在DLL,还是PAS, 都提示出错。
yeinuse 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 silvernii 的回复:]
试下Clipboard.Assign(img.Picture.Bitmap);
[/Quote]
没有用。同样问题
silvernii 2008-11-27
  • 打赏
  • 举报
回复
试下Clipboard.Assign(img.Picture.Bitmap);
yeinuse 2008-11-27
  • 打赏
  • 举报
回复
同样的问题:

function PrnWordInsertCht(var chart1: TChart; sBookMark: String=''): boolean;stdcall;
var
wRange: Variant;
iRangeEnd: Integer;
begin
...
chart1.CopyToClipboardBitmap;
wRange.Paste;
...


Tchart控件也是先复制到剪切板,再插入WORD的功能,执行后没反应,放在PAS里就可以。
所以是不是DLL有问题,还是DLL还要加载什么东西,被我给漏掉了。不解不解,求解求解!!!
yeinuse 2008-11-27
  • 打赏
  • 举报
回复
同样的问题:

function PrnWordInsertCht(var chart1: TChart; sBookMark: String=''): boolean;stdcall;
var
wRange: Variant;
iRangeEnd: Integer;
begin
...
chart1.CopyToClipboardBitmap;
wRange.Paste;
...


Tchart控件也是先复制到剪切板,再插入WORD的功能,执行后没反应,放在PAS里就可以。
所以是不是DLL有问题,还是DLL还要加载什么东西,被我给漏掉了。不解不解,求解求解!!!
yeinuse 2008-11-27
  • 打赏
  • 举报
回复
同样的问题:

function PrnWordInsertCht(var chart1: TChart; sBookMark: String=''): boolean;stdcall;
var
wRange: Variant;
iRangeEnd: Integer;
begin
...
chart1.CopyToClipboardBitmap;
wRange.Paste;
...


Tchart控件也是先复制到剪切板,再插入WORD的功能,执行后没反应,放在PAS里就可以。
所以是不是DLL有问题,还是DLL还要加载什么东西,被我给漏掉了。不解不解,求解求解!!!

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧