Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.14;
Скачать: CL | DM;

Вниз

Работа с ClipBoard   Найти похожие ветки 

 
xfrost ©   (2003-04-01 17:34) [0]

Не подскажите как можно скопировать содержимое буфера обмена куданибудь ,когда там любые данные , а потом обратно в буфер когда с ним уже поработали. Порсто я создаю отчеты в Word и для вставки рисунков использую Clipboard, хотелосьбы что бы его первоначальное содержимое осталось после всех олпераций


 
Skier ©   (2003-04-01 17:41) [1]

The Clipboard object is declared in the Delphi Clipbrd unit


 
MBo ©   (2003-04-01 17:57) [2]


Сохранение всего содержимого буфера обмена в файл

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;


 
xfrost ©   (2003-04-01 17:58) [3]

CP : TClipBoard;

CP:=TClipBoard.Create
ClipBoard.Open;
CP:=ClipBoard;
ClipBoard.Close;
..........

ClipBoard.Assign(CP);

Такая фишка прокатит?


 
MBo ©   (2003-04-01 18:02) [4]

нет.


 
xfrost ©   (2003-04-01 18:13) [5]

Все сам понял, что глупость сказал.
Спасибо за пример с файлом - это было то что мне нужно.



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

Текущий архив: 2003.04.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
3-44003
Staraya
2003-03-25 11:34
2003.04.14
Table is read only


3-44083
Officeman
2003-03-26 19:35
2003.04.14
Поиск в dbgrid1(table1) по любой части слова.


1-44191
Filmax
2003-03-31 14:48
2003.04.14
Крупные шрифты


14-44391
dimich1978
2003-03-27 08:41
2003.04.14
отключение кнопки Reset?


3-43996
Andrey007
2003-03-24 16:57
2003.04.14
Как уменьшить время при заполнении таблиц?