Ver Mensaje Individual
  #4  
Antiguo 05-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
La propuesta de nlsgarcia funciona perfectamente, pero yo me refería a un verdadero visor del clipboard, tal como lo define Microshoft con la API SetClipboardViewer. Procesando el mensaje M_DRAWCLIPBOARD cada vez que se coloca algo en el clipboard.

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    NextViewer: HWND;
    procedure GetData;
  protected
    procedure WndProc(var Message: TMessage); override;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Clipboard.Clear;  // Podemos limpiar o no el clipboard al comenzar
  // Nos registramos como ClipboardViewer y guardamos el anterior de la cadena
  NextViewer:= SetClipboardViewer(Handle);
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
  case Message.Msg of
  WM_DRAWCLIPBOARD:
  begin
    // Si tenemos un visor en la cadena, le reenviamos el mensaje
    if NextViewer <> 0 then
      SendMessage(NextViewer, WM_DRAWCLIPBOARD, 0, 0);
    // Miramos el ClipBoard
    GetData();
  end;
  WM_DESTROY:
    // Dejamos de ser visor del ClipBoard
    ChangeClipboardChain(Handle, NextViewer);
  end;
  inherited WndProc(Message);
end;

procedure TForm1.GetData;
begin
  Memo1.Lines.Add(Clipboard.AsText);
end;

end.


Saludos.
Responder Con Cita