Olá pessoal, hoje venho mostrar uma rotina interessante para aqueles que querem trabalhar com mensagens do sistema operacional. Como sabemos o sistema operacional conversa através de mensagens, e o Delphi consegue interpretar, capturar, entender estas mensagens. Vou fazer uma simulação bem simples desta vez.

Vamos precisar de um Formulário e nele um TRichEdit

Layout do Formulário
Figura 1. Layout do Formulário

Esta bem simples pois o objetivo não é o layout mas sim a funcionalidade.

Neste momento vamos dar uses na unit Clipbrd


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
Listagem 1. Nossa unit deverá esta neste estilo

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
  private
    { Private declarations }
     procedure ClipBoardChanged(var Message: TMessage); message WM_DRAWCLIPBOARD;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
Listagem 2. Com a uses declarada agora vamos implementar um método para poder "escutar" quando alguma coisa for adicionada no Clipboard (nosso famoso CTRL + c )

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
  private
    { Private declarations }
     procedure ClipBoardChanged(var Message: TMessage); message WM_DRAWCLIPBOARD;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ClipBoardChanged(var Message: TMessage);
begin

end;

end.
Listagem 3. Depois de declarar, vamos agora implementar a mesma, com o mouse dentro da Classe TForm1 ou então em cima do método ClipBoardChanged, vamos pressionar CTRL+SHIFT+C e teremos esse resultado

procedure TForm1.ClipBoardChanged(var Message: TMessage);
begin
  ShowMessage('Houve mudança no CTRL + C');
  RichEdit1.Text := Clipboard.AsText;
end;
Listagem 4. Dentro da procedure ClibBoard, vamos implementar

Este código irá apresentar um ShowMessage com uma mensagem e o texto que foi copiado irá ser exibido dentro do RichEdit.

Nota: Fiz o exemplo apenas para texto, se você copiar uma imagem ou arquivo, ele irá exibir o ShowMessage, porém nada irá acontecer com o RichEdit. Tem como tratar o tipo de conteúdo do Clipboard, mas isso fica para um outro artigo.

procedure TForm1.FormCreate(Sender: TObject);
begin
    SetClipboardViewer(Handle);
end;
Listagem 5. Vamos então concluir nosso exemplo, localize o evento onCreate do Formulário e implemente o mesmo, logo em seguida fazer a chamada da mensagem da seguinte forma

Concluindo assim nosso artigo, sempre que seu formulário estiver aberto e você copiar um determinado texto o mesmo será adicionado dentro do TRichEdit.