怎么同时存放几种格式到剪贴板?(45分)

  • 主题发起人 devil_li
  • 开始时间
D

devil_li

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么同时存放几种格式到剪贴板?就像Excel做的那样:
Excel中拷贝以后,在记事本上粘贴的是文字,在画图上粘贴的是图像?
 
使用剪贴板api:
OpenClipboard (hwnd) ;
EmptyClipboard () ;
SetClipboardData (iFormat, hGlobal) ;
CloseClipboard () ;
GetClipboardData(iFormat);

iformat是window定义的各种格式:cf_text,cf_bitmap.........等等格式.

剪贴板有点复杂。建义您找本windows编程的书,先学会怎么使用剪切板,再动手写程序。
 
Delphi中没有封装一些方法吗?有没有具体一点的例子?
 
当然有!
很多控件都有copytoclipboard,savetoclipboard,PasteFromClipboard,cuttoclipboard这些
方法。

用TEDIT,TBITMAP等他回自己根据自己的格式和CLIPBOARD交互。

 
Delphi的TClipBoard中,有
property FormatCount: Integer read GetFormatCount;
property Formats[Index: Integer]: Word read GetFormats;
可以得到多种格式,但是不能同时写入多种格式。怎么办到?
TEDIT,TBITMAP等自己根据自己的格式和CLIPBOARD交互,也只是读出格式。
 
把你的文件压入流中, 再savetoclipboard
 
搞定了,还是要感谢雪鹰,虽然他讲的不是很详细:
比如存放TBitmap和文字:
procedure TfrmMain.asd(Sender: TObject);
var
f: word; data: cardinal; palette: hpalette;
size: Integer;
s: string;
DataPtr: Pointer;
begin
Clipboard.Clear;
Clipboard.Open;
try
image1.Picture.Bitmap.SaveToClipboardFormat(f, data, palette);
SetClipboardData(f, data);
s := Edit1.Text;
size := Length(s) + 1;
Data := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Pointer(s)^, DataPtr^, Size);
SetClipboardData(CF_TEXT, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
Clipboard.Close;
end;
end;
 

Similar threads

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