Вниз
Скачать: CL | DM;

History буфера обмена   Найти похожие ветки 

 
Whippi ©   (2002-11-25 17:36) [0]

Кто нибудь сталкивался с такой вещью?
Как это можно риализовать?
Примерчиком неподмогнете?


 
MBo ©   (2002-11-25 17:48) [1]

поройся по форуму, я выкладывал код сохранения содержимого clipBoard в файл и восстановления. Учти, что некоторые программы используют отложенное копирование (render), когда данные не хранятся в буфере, а поставляются по запросу


 
Whippi ©   (2002-11-26 08:57) [2]


> MBo © (25.11.02 17:48)
> поройся по форуму, я выкладывал код сохранения содержимого
> clipBoard в файл и восстановления. Учти, что некоторые программы
> используют отложенное копирование (render), когда данные
> не хранятся в буфере, а поставляются по запросу

Прощерстил форум на месяц назад, но увы не нашел примера. Немогли бы Вы повторить его?


 
Дмитрий К.К. ©   (2002-11-26 09:06) [3]

Библиотека RX

TClipboardMonitor component

This object allows for clipboard monitoring.

Once the object is created, you must supply an event handler to be warned when the clipboard contents change.


 
SottNick ©   (2002-11-26 09:15) [4]

message WM_CHANGECBCHAIN;
message WM_DRAWCLIPBOARD;

и конечно
SetClipboardViewer(Handle);
ChangeClipboardChain(Handle, PrevHwnd);


 
MBo ©   (2002-11-26 09:26) [5]

Сохранение всего содержимого буфера обмена в файл.
Сам факт изменения отслеживается с помощью указанных SottNick функций. И учти, что в момент восстановления форматы, записанные в сейве, должны быть известны (зарегистрированы) Windows

var FS:TFileStream;

procedure TForm1.bClearClick(Sender: TObject);
begin
OpenClipBoard(0);
EmptyClipboard;
CloseClipBoard;
end;

procedure TForm1.BSaveClick(Sender: TObject);
var CBF:Cardinal;
CBFList:TList;
i:Integer;
h:THandle;
p:Pointer;
CBBlockLength,Temp:Cardinal;
FS:TFileStream;
begin
if OpenClipBoard(0)then begin
CBFList:=TList.Create;
CBF:=0;
repeat
CBF:=EnumClipboardFormats(CBF);
if CBF<>0 then
CBFList.Add(pointer(CBF));
until CBF=0;
edit1.text:=IntToStr(CBFList.Count);
if CBFList.Count>0 then begin
FS:=TFileStream.Create("e:\cp.dat",fmCreate);
Temp:=CBFList.Count;
FS.Write(Temp,SizeOf(Integer));
for i:=0 to CBFList.Count-1 do begin
h:=GetClipboardData(Cardinal(CBFList[i]));
if h>0 then begin
CBBlockLength:=GlobalSize(h);
if h>0 then begin
p:=GlobalLock(h);
if p <> nil then begin
Temp:=Cardinal(CBFList[i]);
FS.Write(Temp,SizeOf(Cardinal));
FS.Write(CBBlockLength,SizeOf(Cardinal));
FS.Write(p^,CBBlockLength);
end;
GlobalUnlock(h);
end;
end;
end;
FS.Free;
end;
CBFList.Free;
CloseClipBoard;
end;
end;

procedure TForm1.bLoadClick(Sender: TObject);
var h:THandle;
p:Pointer;
CBF:Cardinal;
CBBlockLength:Cardinal;
i,CBCount:Integer;
FS:TFileStream;
begin
if OpenClipBoard(0)then begin
FS:=TFileStream.Create("e:\cp.dat",fmOpenRead);
if FS.Size=0 then Exit;
FS.Read(CBCount,sizeOf(Integer));
if CBCount=0 then Exit;
for i:=1 to CBCount do begin
FS.Read(CBF,SizeOf(Cardinal));
FS.Read(CBBlockLength,SizeOf(Cardinal));
h:=GlobalAlloc(GMEM_MOVEABLE or GMEM_SHARE or GMEM_ZEROINIT,CBBlockLength);
if h>0 then begin
p:=GlobalLock(h);
if p=nil then
GlobalFree(h)
else begin
FS.Read(p^,CBBlockLength);
GlobalUnlock(h);
SetClipboardData(CBF,h);
end;
end;
end;
FS.Free;
CloseClipBoard;
end;
end;


 
Whippi ©   (2002-11-26 09:36) [6]

Спасибо огромное.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
3-14418
Step[B.M.]
2002-11-16 17:55
2002.12.05
Как в Firebird поменять пароль SYSDBA ???


1-14669
123000
2002-11-22 15:21
2002.12.05
Resizing


1-14520
Vasechkin
2002-11-23 19:10
2002.12.05
Помогите с реестром!!!!


1-14570
Vcoder
2002-11-23 20:22
2002.12.05
TCanvas.ClipRect : как изменить?


4-14887
Semenyak
2002-10-23 13:21
2002.12.05
Комбинация клавиш в компоненте WebBrowser




   Наверх