请帮我看一下一个关于粘贴板的程序,有毛病!(50分)

  • 主题发起人 主题发起人 shuoshuo
  • 开始时间 开始时间
S

shuoshuo

Unregistered / Unconfirmed
GUEST, unregistred user!
bmp:TBitbmp;
m:TMemoryStream;
Clpbrd:TClipboard;

procedure TForm1.Button1Click(Sender: TObject); //将粘贴板内的图形
begin 信息存到变量m里
clpbrd := TClipBoard.Create;
if clpbrd.HasFormat(CF_BITMAP) then
begin
bmp := Tbitmap.Create;
clpbrd.GetAsHandle(bmp.handle);
m := TMemoryStream.Create;
bmp.SaveToStream(m);
bmp.Free;
Label1.Caption:='ok!';
end;
end;

procedure TForm1.Button2Click(Sender: TObject); //将变量m里的内容
begin 放回粘贴板
bmp:=TBitMap.Create;
m.position := 0;
bmp.LoadFromStream(m);
ClipBoard.Assign(bmp);
bmp.Free;
end;

为什麽将变量m的内容放回粘贴板后,选择粘贴时win98报错!‘获取粘贴板数据出错!’各位高手请帮我看看!
 
>>clpbrd.GetAsHandle(bmp.handle);
怎么会这样用呢?应该是:

bmp.handle:=clpbrd.GetAsHandle(CF_BITMAP)
 
还有一点要注意的是,最好使用ClipBoard函数得到系统的剪贴板,而不要
使用TClipBoard创建。其原因在Delphi的Help中写的很清楚:

Do not instantiate separate TClipboard objects by calling the
constructor. Instead, use the global instance of TClipboard
returned by the Clipboard function. This allows applications
to share a single instance of TClipboard and safeguards against
accidental deletion of the clipboard. Before calling Clipboard,
be sure the uses clause includes the Clipbrd unit.

 
温柔一刀是对的。

btw:为什么不也用Assign?
begin
bmp := Tbitmap.Create;
// bmp.handle:=clpbrd.GetAsHandle(CF_BITMAP);
bmp.Assign(clpbrd);
m := TMemoryStream.Create;
bmp.SaveToStream(m);
bmp.Free;
Label1.Caption:='ok!';
end;
 
多人接受答案了。
 
后退
顶部