Ver Mensaje Individual
  #7  
Antiguo 06-11-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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
    { Public declarations }
  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;

// Procesamos los mensajes a bajo nivel
procedure TForm1.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_CLIPBOARDUPDATE then
    GetData();
  
  inherited WndProc(Message);
end;

end.

Saludos.
Responder Con Cita