[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]


ClipBoard Viewer
Erik Sperling Johansen <erik@info-pro.no>
Example source to implement a clipboard viewer follows.


--------------------------------------------------------------------------------

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
  // Hook the clipboard viewer chain
  // Should also check for a possible null return value, which indicates
  // that the function failed.
  FNextViewerHandle := SetClipboardViewer(Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Remove ourselves from the clipboard viewer chain.
  ChangeClipboardChain(Handle, FNextViewerHandle);
end;

procedure TForm1.WMDrawClipboard (var message : TMessage);
begin
// Called whenever contents of the clipboard changes
  message.Result := SendMessage(WM_DRAWCLIPBOARD, FNextViewerHandle, 0, 0);
end;

procedure TForm1.WMChangeCBCHain (var message : TMessage);
begin
  // Called when there is a change in the Clipboard viewer chain.
  if message.wParam = FNextViewerHandle then begin
    // the next viewer in the chain is being removed. Update our internal var.
    FNextViewerHandle := message.lParam;
    // Return 0 to indicate message was processed
    message.Result := 0;
  end else begin
    // Pass message on to next window in chain.
    message.Result := SendMessage(FNextViewerHandle, WM_CHANGECBCHAIN,
message.wParam, message.lParam);
  end;
end;


end.

[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]