Содержание материала

Сохранение буфера обмена в файл

 Процедура позволяет сохранить содержимое буфера обмена в заданый файл.

 P.S. На всякий случай: я не претендую на авторство  данного кода, я его просто привёл к виду, который мне больше подходил.

В эту базу я его выложил исходя из предположения, что не каждый, кому понадобится такая процедура знает вышеуказанный адрес или

обратится туда (сам долго искал иные способы).

Code:

{ **** UBPFD *********** ****

 Зависимости: стандартные модули

Автор:       Lucifer, Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Copyright:   https://www.delphiworld.narod.ru/

********************************************** }

 

procedure SaveFromClipBoardTo(FileName: string);

var

CBFList: TList;

i: Integer;

h: THandle;

p: Pointer;

 

CBBlockLength,

Temp,

CBF: 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;

 

if CBFList.Count > 0 then begin

  FS := TFileStream.Create(FileName, 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;

 

 


Из рассылки "Мастера DELPHI. Новости мира компонент,..."

Code:

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:Cardin!

al;

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;

 

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить