unit ClipboardViewer;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FNextViewerHandle: THandle;
procedure WMDrawClipboard(varmessage: TMessage);
message WM_DRAWCLIPBOARD;
procedure WMChangeCBCHain(varmessage: TMessage);
message WM_CHANGECBCHAIN;
publicend;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin// Проверяем работоспособность функции.// При невозможности просмотра буфера обмена// функция возвратит значение Nil.
FNextViewerHandle := SetClipboardViewer(Handle);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin// Восстанавливаем цепочки.
ChangeClipboardChain(Handle, FNextViewerHandle);
end;
procedure TForm1.WMDrawClipboard(varmessage: TMessage);
begin// Вызывается при любом изменении содержимого буфера обменаmessage.Result := SendMessage(WM_DRAWCLIPBOARD, FNextViewerHandle, 0, 0);
end;
procedure TForm1.WMChangeCBCHain(varmessage: TMessage);
begin// Вызывается при любом изменении цепочек буфера обмена.ifmessage.wParam = FNextViewerHandle thenbegin// Удаляем следующую цепочку просмотра. Корректируем внутреннюю переменную.
FNextViewerHandle := message.lParam;
// Возвращаем 0 чтобы указать, что сообщение было обработаноmessage.Result := 0;
endelsebegin// Передаем сообщение следующему окну в цепочке.message.Result := SendMessage(FNextViewerHandle, WM_CHANGECBCHAIN,
message.wParam, message.lParam);
end;
end;
end.
Статья Просмотр буфера обмена раздела ОС и Железо Буфер обмена может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.