Советы по Delphi

         

Просмотр буфера обмена


Пример на основе простого модуля-класса, осуществляющего просмотр буфера обмена.

    unit ClipboardViewer;

interface

uses
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 (var message : TMessage); message WM_DRAWCLIPBOARD; procedure WMChangeCBCHain (var message : TMessage); message WM_CHANGECBCHAIN; public end;
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 (var message : TMessage);
begin
// Вызывается при любом изменении содержимого буфера обмена
message.Result := SendMessage(WM_DRAWCLIPBOARD, FNextViewerHandle, 0, 0); end;

procedure TForm1.WMChangeCBCHain (var message : TMessage);
begin
// Вызывается при любом изменении цепочек буфера обмена. if message.wParam = FNextViewerHandle then begin // Удаляем следующую цепочку просмотра. Корректируем внутреннюю переменную. FNextViewerHandle := message.lParam; // Возвращаем 0 чтобы указать, что сообщение было обработано message.Result := 0; end else begin // Передаем сообщение следующему окну в цепочке. message.Result := SendMessage(FNextViewerHandle, WM_CHANGECBCHAIN, message.wParam, message.lParam);
end; end;

end.
[000039]



Содержание раздела