El anterior código es apropiado para S.O. Win2000 en adelante, en el caso de que nuestra aplicación sólo queramos que funcione desde Windows Vista, podemos optar por esta otra técnica, más sencilla pero que no funcionará en WinXP:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Clipbrd;
function AddClipboardFormatListener(hWindow: HWND): BOOL; stdcall; external User32;
function RemoveClipboardFormatListener(hWindow: HWND): BOOL; stdcall; external User32;
const WM_CLIPBOARDUPDATE = $031D;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure GetData;
protected
procedure WndProc(var Message: TMessage); override;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
AddClipboardFormatListener(Handle);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RemoveClipboardFormatListener(Handle);
end;
procedure TForm1.GetData;
begin
if Clipboard.HasFormat(CF_TEXT) then
Memo1.Lines.Add(Clipboard.AsText);
end;
procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_CLIPBOARDUPDATE then
GetData();
inherited WndProc(Message);
end;
end.
Saludos.