DELPHI 能不能实现程序私有的剪贴板?
即调用一个剪贴板,但这个剪贴板非系统那个。
因为我要剪贴板来保存一些数据
但如果系统剪贴板已有存在东西的话,那么我的操作将会令系统剪贴板的东西丢失。
即调用一个剪贴板,但这个剪贴板非系统那个。
因为我要剪贴板来保存一些数据
但如果系统剪贴板已有存在东西的话,那么我的操作将会令系统剪贴板的东西丢失。
解决方案 »
- 求sql语句
- 为什么打开新工程时把久工程关闭了??
- 要做不规则窗体,用什么VCL好?
- 我是一个新手 大家帮一帮我 问一下一个窗体能调用另一个窗体的自定义的方法吗
- 怎么用ClientdataSet.commandtxt 更新image或 memo
- 请教一个在建立AdoConnection的一个错误!!!!!急!!!
- table1里我做了一个计算字段‘总价’,那么这个table1总价=table2里的‘商品价格’+table1里的‘服务价格’,为什么老是错?
- 请问Delphi 中 Embedded 控件的 NewWindow2 和NewWindow3 事件各有什么区别?
- 怎么屏蔽copy功能
- 一个很简单的问题,进来看看(30)
- 请教大侠关于Wise Installation System9.02打包问题
- 怎么从注册表中读取数据?
2、还是利用系统剪贴板,c前先保存系统剪贴板的内容,v后恢复系统剪贴板的内容
网上搜到的,不是我写的uses clipbrd;procedure CopyStreamToClipboard(fmt: Cardinal; S: TStream);
var
hMem: THandle;
pMem: Pointer;
begin
Assert(Assigned(S));
S.Position := 0;
hMem := GlobalAlloc(GHND or GMEM_DDESHARE, S.Size);
if hMem <> 0 then
begin
pMem := GlobalLock(hMem);
if pMem <> nil then
begin
try
S.Read(pMem^, S.Size);
S.Position := 0;
finally
GlobalUnlock(hMem);
end;
Clipboard.Open;
try
Clipboard.SetAsHandle(fmt, hMem);
finally
Clipboard.Close;
end;
end { If }
else
begin
GlobalFree(hMem);
OutOfMemoryError;
end;
end { If }
else
OutOfMemoryError;
end; { CopyStreamToClipboard }
procedure CopyStreamFromClipboard(fmt: Cardinal; S: TStream);
var
hMem: THandle;
pMem: Pointer;
begin
Assert(Assigned(S));
hMem := Clipboard.GetAsHandle(fmt);
if hMem <> 0 then
begin
pMem := GlobalLock(hMem);
if pMem <> nil then
begin
try
S.Write(pMem^, GlobalSize(hMem));
S.Position := 0;
finally
GlobalUnlock(hMem);
end;
end { If }
else
raise Exception.Create('CopyStreamFromClipboard: could not lock global handle' +
'obtained from clipboard!');
end; { If }
end; { CopyStreamFromClipboard }
procedure SaveClipboardFormat(fmt: Word; writer: TWriter);
var
fmtname: array[0..128] of Char;
ms: TMemoryStream;
begin
Assert(Assigned(writer));
if 0 = GetClipboardFormatName(fmt, fmtname, SizeOf(fmtname)) then
fmtname[0] := #0;
ms := TMemoryStream.Create;
try
CopyStreamFromClipboard(fmt, ms);
if ms.Size > 0 then
begin
writer.WriteInteger(fmt);
writer.WriteString(fmtname);
writer.WriteInteger(ms.Size);
writer.Write(ms.Memory^, ms.Size);
end; { If }
finally
ms.Free
end; { Finally }
end; { SaveClipboardFormat }
procedure LoadClipboardFormat(reader: TReader);
var
fmt: Integer;
fmtname: string;
Size: Integer;
ms: TMemoryStream;
begin
Assert(Assigned(reader));
fmt := reader.ReadInteger;
fmtname := reader.ReadString;
Size := reader.ReadInteger;
ms := TMemoryStream.Create;
try
ms.Size := Size;
reader.Read(ms.memory^, Size);
if Length(fmtname) > 0 then
fmt := RegisterCLipboardFormat(PChar(fmtname));
if fmt <> 0 then
CopyStreamToClipboard(fmt, ms);
finally
ms.Free;
end; { Finally }
end; { LoadClipboardFormat } procedure SaveClipboard(S: TStream);
var
writer: TWriter;
i: Integer;
begin
Assert(Assigned(S));
writer := TWriter.Create(S, 4096);
try
Clipboard.Open;
try
writer.WriteListBegin;
for i := 0 to Clipboard.formatcount - 1 do
SaveClipboardFormat(Clipboard.Formats[i], writer);
writer.WriteListEnd;
finally
Clipboard.Close;
end; { Finally }
finally
writer.Free
end; { Finally }
end; { SaveClipboard }
procedure LoadClipboard(S: TStream);
var
reader: TReader;
begin
Assert(Assigned(S));
reader := TReader.Create(S, 4096);
try
Clipboard.Open;
try
clipboard.Clear;
reader.ReadListBegin;
while not reader.EndOfList do
LoadClipboardFormat(reader);
reader.ReadListEnd;
finally
Clipboard.Close;
end; { Finally }
finally
reader.Free
end; { Finally }
end; { LoadClipboard }procedure TForm1.Button2Click(Sender: TObject);
begin
clipboard.Clear;end;procedure TForm1.Button3Click(Sender: TObject);
var
fs: TfileStream;
begin
fs := TFilestream.Create('c:\temp\ClipBrdSaved.dat',
fmopenread or fmsharedenynone);
try
LoadClipboard(fs);
finally
fs.Free;
end; { Finally }
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
try
SaveClipboard(ms);
ms.SaveToFile('c:\temp\ClipBrdSaved.dat');
finally
ms.Free;
end; { Finally }
end;
private
{ Private declarations }
MyBitmap:TBitmap;var error:integer;
begin
MyBitmap:=TBitmap.Create;
try
MyBitmap.Width:=0;
MyBitmap.Height:=0;
except
Application.Terminate;
end;
If Clipboard.HasFormat(CF_BITMAP) Then
begin
MyBitmap.Assign(Clipboard);
Invalidate;
If Not MyBitmap.Empty Then
try
MyBitmap.SaveToFile(bmpname);
except
error:=error+1;
messagebox(0,'文件名不正确或磁盘空间不够','注意',mb_iconstop);
if error>10 then
Application.Terminate;
end;
end;
end;