Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Контроль за изменением содержимого буфера обмена

Delphi , ОС и Железо , Буфер обмена

Контроль за изменением содержимого буфера обмена

Code:

unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
 
type
TForm1 = class(TForm)
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
private
   hwndNextViewer: THandle;
   procedure WMChangeCbChain(var Message: TWMChangeCBChain); message WM_CHANGECBCHAIN;
   procedure WMDrawClipboard(var Message: TMessage); message WM_DRAWCLIPBOARD;
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
// Add the window to the clipboard viewer chain.
hwndNextViewer := SetClipboardViewer(Handle);
Memo1.Lines.Clear
end;
 
procedure TForm1.WMChangeCbChain(var Message: TWMChangeCBChain);
begin
with Message do
begin
 
   // If the next window is closing, repair the chain.
   if Remove = hwndNextViewer then
     hwndNextViewer := Next
 
   // Otherwise, pass the message to the next link.
   else
     if hwndNextViewer <> 0 then
       SendMessage(hwndNextViewer, Msg, Remove, Next);
end;
end;
 
// clipboard contents changed.
procedure TForm1.WMDrawClipboard(var Message: TMessage);
begin
// Pass the message to the next window in clipboard
// viewer chain.
Memo1.Lines.Add('Сhanged');
with Message do
   SendMessage(hwndNextViewer, Msg, WParam, LParam);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
ChangeClipboardChain(Handle, hwndNextViewer);
end;
 
end.

Автор: Александр (Rouse_) Багель

Взято из http://forum.sources.ru

Это код на Delphi, демонстрирующий управление изменениями содержимого буфера обмена с помощью механизма цепи просмотра буфера обмена Windows API.

Объявление единицы и формы

Единица Unit1 объявляет форму TForm1, которая имеет два приватных переменных: hwndNextViewer (указатель на следующую форму в цепи просмотра буфера обмена) и три процедуры: WMChangeCbChain, WMDrawClipboard и FormDestroy.

Процедура FormCreate

Процедура FormCreate вызывается при создании формы. Она устанавливает цепь просмотра буфера обмена, вызывая функцию Windows API SetClipboardViewer, чтобы добавить указатель на форму (Handle) в цепь.

Также она очищает содержимое memo-контрола (Memo1).

Процедура WMChangeCbChain

Процедура WMChangeCbChain обрабатывает сообщение WM_ CHANGECBCHAIN, которое отправляется, когда следующая форма в цепи просмотра буфера обмена закрывается. В этом случае она обновляет переменную hwndNextViewer, чтобы указать на новый следующий элемент в цепи.

Если следующий элемент не закрывается (Remove не равно hwndNextViewer), процедура передает сообщение следующему элементу в цепи, используя функцию Windows API SendMessage.

Процедура WMDrawClipboard

Процедура WMDrawClipboard обрабатывает сообщение WM_DRAWCLIPBOARD, которое отправляется, когда содержимое буфера обмена изменяется. В этом случае она добавляет строку в memo-контроль (Memo1), указывающую, что содержимое буфера обмена изменилось.

Также она передает сообщение следующему элементу в цепи, используя функцию Windows API SendMessage.

Процедура FormDestroy

Процедура FormDestroy вызывается при уничтожении формы. Она удаляет указатель на форму из цепи просмотра буфера обмена, вызывая функцию Windows API ChangeClipboardChain.

Альтернативное решение

Вместо реализации custom clipboard viewer можно использовать компонент Delphi TClipboardViewer, чтобы мониторить изменения содержимого буфера обмена.

Пример использования TClipboardViewer:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FClipboardViewer: TClipboardViewer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FClipboardViewer := TClipboardViewer.Create(Self);
  FClipboardViewer.OnClipboardChanged := MyOnClipboardChanged;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FClipboardViewer);
end;

procedure TForm1.MyOnClipboardChanged(Sender: TObject; ChangeType: TChangeType);
begin
  Memo1.Lines.Add('Clipboard changed');
end;

end.

В этом примере форма создает компонент TClipboardViewer и устанавливает его событие OnClipboardChanged на процедуру MyOnClipboardChanged. Когда содержимое буфера обмена изменяется, процедура MyOnClipboardChanged вызывается, добавляя строку в memo-контроль, указывающую, что содержимое буфера обмена изменилось.

Контроль за изменением содержимого буфера обмена в приложении на языке Delphi реализуется с помощью обработки сообщений WM_CHANGECBCHAIN и WM_DRAWCLIPBOARD.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Буфер обмена ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-26 17:55:42/0.0038681030273438/0