[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]