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

Вниз

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

 
user_1   (2004-06-03 22:06) [0]

Как грамотнее сохранить на время содержимое буфера обмена, а потом вернуть всё на место?
Собсно, само содержимое меня не интересует. Просто надо воспользоваться буфером.


 
user_1   (2004-06-04 14:11) [1]

Ну так что ?


 
evvcom ©   (2004-06-04 14:28) [2]

WinAPI help -> Clipboard Functions


 
Rouse_ ©   (2004-06-04 17:21) [3]

procedure TForm1.FormCreate(Sender: TObject);
var
 C: TClipboard;
begin
 C := TClipboard.Create;
 try
   C.AsText := "qwe";
   Caption := C.AsText;
 finally
   C.Free;
 end;
end;


 
user_1   (2004-06-04 19:07) [4]

Вобщем накидал небольшой модуль, может кому пригодится.
Потом пределаю нормально, щяс времени нету.


unit AClipBoard;

interface

uses Classes,
    Windows,
    ClipBrd;

type TClipBoardUnit = record
      AFormat : Word;
      AData   : TMemoryStream;
    end;

type TClipBoardStore = array of TClipBoardUnit;

var Store: TClipBoardStore;

//procedure ClearStore;
function BackUpClipBoard: Boolean;
function RestoreClipBoard: Boolean;
function GetClipBoardSimpleText: String;

implementation

function GetClipBoardSimpleText: String;
begin
 Result := ClipBoard.AsText;
end;

procedure ClearStore;
var
 i: integer;
begin
 for i:=Low(Store) to High(Store) do
 begin
   Store[i].AData.Free;
 end;
 SetLength(Store, 0);
end;

function BackUpClipBoard: Boolean;
var
 i: Integer;
 hBuf: THandle;
 BufPtr: Pointer;
begin
 Result:=true;
 ClearStore;
 try
   SetLength(Store, ClipBoard.FormatCount);
   for i:=0 to ClipBoard.FormatCount-1 do
   begin
     Store[i].AFormat := ClipBoard.Formats[i];
     Store[i].AData := TMemoryStream.Create;
     hBuf := ClipBoard.GetAsHandle(ClipBoard.Formats[i]);
     BufPtr := GlobalLock(hBuf);
     Store[i].AData.WriteBuffer(BufPtr^, GlobalSize(hBuf));
     GlobalUnlock(hBuf);
     Store[i].AData.Position := 0;
   end;
 except
   Result:=false;
 end;
end;

function RestoreClipBoard: Boolean;
var i: Integer;
   hBuf: THandle;
   BufPtr: Pointer;
begin
 Result:=true;
 try
   ClipBoard.Open;
   for i:=Low(Store) to High(Store) do
   begin

     hBuf := GlobalAlloc(GMEM_MOVEABLE, Store[i].AData.Size);
     try
       BufPtr := GlobalLock(hBuf);
       try
         Move(Store[i].AData.Memory^, BufPtr^, Store[i].AData.Size);
         Clipboard.SetAsHandle(Store[i].AFormat, hBuf);
       finally
         GlobalUnlock(hBuf);
       end;
     except
       GlobalFree(hBuf);
     //  raise;
     end;

   end;
   ClipBoard.Close;
 except
   Result:=false;
 end;

end;

initialization

finalization
 ClearStore;
end.


 
user_1   (2004-06-04 19:10) [5]

юзать так например :

...
   if BackUpClipBoard then
   begin
     keybd_event(VK_CONTROL, 0, 0, 0);
     keybd_event(VkKeyScan("c"), 0, 0, 0);
     keybd_event(VkKeyScan("c"), 0, KEYEVENTF_KEYUP, 0);
     keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

     Sleep(20);
     Caption := GetClipBoardSimpleText;
     RestoreClipBoard;
   end;
...



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

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

Наверх




Память: 0.48 MB
Время: 0.038 c
14-1085047439
Тумар
2004-05-20 14:03
2004.06.20
Страшная история, но мне нужен совет


1-1086448916
jack128
2004-06-05 19:21
2004.06.20
Линия, преследующая курсор


4-1084778473
Dmitrij_K
2004-05-17 11:21
2004.06.20
значки в listview


3-1085479397
Rouse_
2004-05-25 14:03
2004.06.20
Исключение записи из выборки


1-1086188846
Snipers
2004-06-02 19:07
2004.06.20
Наследование форм