Monitor clipboard's content at runtime

Posted in Clipboard

Use DisplayClipboard procedure for monitoring the clipboard content of text or bitmap formats at runtime.

...
  private
    procedure DisplayClipboard(var Msg: TWMDrawClipBoard); 
      message WM_DRAWCLIPBOARD;
...
var
  Form1: TForm1;
  ClipboardWindow: HWND;

implementation

{$R *.DFM}

procedure TForm1.DisplayClipboard(var Msg: TWMDrawClipBoard);
var
  MyHandle: THandle;
begin
  if IsClipboardFormatAvailable(CF_TEXT) or
     IsClipboardFormatAvailable(CF_BITMAP) then
  begin
    OpenClipboard(Form1.Handle);
    if IsClipboardFormatAvailable(CF_TEXT)then
    begin
      MyHandle:=Clipboard.GetAsHandle(CF_TEXT);
      Memo1.Lines.Add(StrPas(GlobalLock(MyHandle)));
      GlobalUnlock(MyHandle);
    end;

    if IsClipboardFormatAvailable(CF_BITMAP) then
    begin
      Panel1.Visible:=True;
      Image1.Picture.Assign(Clipboard);
    end;
    CloseClipboard;
  end;
  SendMessage(ClipboardWindow, WM_DRAWCLIPBOARD, 0, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenClipboard(Form1.Handle);
  EmptyClipboard;
  CloseClipboard;
  Panel1.Visible:=False;
  ClipboardWindow:=SetClipboardViewer(Form1.Handle);
end;