本文整理自网络,侵删。
unit clipbak;
interfaceuses SysUtils, Classes, Clipbrd, Windows, Contnrs;
type TClipData = class Format: WORD; Data: THANDLE; end;
TClipBackuper = class private ClipList: TList; public constructor Create; destructor Destroy; override; procedure BackupClip(); procedure RestoreClip(); end;
implementation
constructor TClipBackuper.Create;begin Cliplist := TObjectList.Create;end;
destructor TClipBackuper.Destroy;begin ClipList.Free;end;
procedure TClipBackuper.BackupClip;var i: Integer; Data: THANDLE; pcd: TClipData; DataMem: Pointer;begin ClipList.Clear(); Clipboard.Open(); try for i := 0 to Clipboard().FormatCount - 1 do begin pcd := TClipData.Create;
pcd.Format := Clipboard().Formats[i]; Data := THANDLE(Clipboard().GetAsHandle( pcd.Format)); if (Data = 0) then begin pcd.free; continue; end; pcd.Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, GlobalSize(Data)); DataMem := GlobalLock(pcd.Data); if (DataMem <> nil) then begin CopyMemory(DataMem, GlobalLock(Data), GlobalSize(Data)); GlobalUnlock(THANDLE(pcd.Data)); GlobalUnlock(THANDLE(Data)); end; ClipList.Add(pcd); end; finally Clipboard().Close(); end; end;
procedure TClipBackuper.RestoreClip;var pcd: TClipData; i: Integer;begin Clipboard.Open(); try Clipboard.Clear(); for i := 0 to ClipList.Count - 1 do begin pcd := TClipData(ClipList[i]); SetClipboardData(pcd.Format, pcd.Data); end; ClipList.Clear(); finally Clipboard().Close(); end; end;
end.
相关阅读 >>
Delphi winapi: getforegroundwindow - 获取前台窗口的句柄
Delphi 在statusbar1.panels上显示日期时间星期
Delphi net.httpclient正则批量获取网页代码中的数值
更多相关阅读请进入《Delphi》频道 >>