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, демонстрирующий создание формы для просмотра содержимого системного буфера обмена. Форма использует функции Windows API для установки себя как просмотрщика буфера обмена и получения уведомлений о изменении содержимого буфера обмена.
Содержание кода:
Процедура FormCreate: Вызывается при создании формы. Она устанавливает форму как просмотрщик буфера обмена с помощью функции SetClipboardViewer.
Процедура FormDestroy: Вызывается при уничтожении формы. Она удаляет форму из цепочки просмотрщиков буфера обмена с помощью функции ChangeClipboardChain.
Процедура WMDrawClipboard: Обработчик сообщения, вызываемый при изменении содержимого буфера обмена. Он отправляет сообщение WM_DRAWCLIPBOARD следующему окну в цепочке просмотрщиков буфера обмена, что позволяет другим окнам получать обновленное содержимое буфера обмена.
Процедура WMChangeCBCHain: Обработчик сообщения, вызываемый при изменении цепочки просмотрщиков буфера обмена. Если сообщение относится к этой форме (т.е., ее handle совпадает с переменной FNextViewerHandle), она обновляет переменную FNextViewerHandle, указывая на следующее окно в цепочке, и возвращает 0, чтобы указать, что сообщение было обработано. В противном случае она отправляет сообщение следующему окну в цепочке с помощью функции SendMessage.
Код использует следующие функции Windows API:
SetClipboardViewer: Устанавливает окно как просмотрщик буфера обмена.
WM_DRAWCLIPBOARD: Сообщение, отправляемое при изменении содержимого буфера обмена.
WM_CHANGECBCHAIN: Сообщение, отправляемое при изменении цепочки просмотрщиков буфера обмена.
Код также использует следующие функции Delphi:
Класс TForm: Класс формы в Delphi.
Тип THandle: Handle к окну или другому объекту.
Функция SendMessage: Отправляет сообщение окну.
Префикс WM_: Показывает, что сообщение является Windows-сообщением.
В целом, этот код демонстрирует создание простого просмотрщика буфера обмена с помощью Delphi и Windows API.
Просмотр буфера обмена - это пример программирования на языке Delphi, демонстрирующий функционирование просмотра содержимого буфера обмена в Windows-приложении.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.