Identificando Mudanças no ClipBoard - Delphi

Veja neste artigo como podemos interceptar a mensagem que indica que o conteúdo do ClipBoard do Windows foi modificado.

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

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.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados