Ver Mensaje Individual
  #4  
Antiguo 12-01-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Código Delphi [-]

var     NextClipboard: THandle;
....
private
     FCapturado:Boolean;
    procedure CambioPortapapeles(var Msg: TWMDrawClipboard); message wm_drawclipboard;
   procedure SetClpCapturado(const Value: Boolean);
public 
    property CapturarClipboard:Boolean read FCapturado write SetClpCapturado;

procedure TFrmPpal.SetClpCapturado(const Value: Boolean);
begin
  if FCapturado <> Value then
  begin
    if FCapturado then
      ChangeClipboardChain(FrmPpal.Handle, FrmPpal.NextClipboard)
    else
      NextClipboard := SetClipboardViewer(frmppal.Handle);
    FCapturado := Value;
    mnuHablarPortapapeles.Checked := frmppal.ClpCapturado;
  end;
end;

procedure TFrmPpal.CambioPortapapeles(var Msg: TWMDrawClipboard);
var
  i:     Integer;
  found: Boolean;
  str:   String;

begin
  found := False;
  if (Clipboard.HasFormat(CF_TEXT)) then
  begin
    Str := clipboard.AsText;
  end;

    SendMessage(NextClipboard, Msg.Msg, Msg.Msg, Msg.Msg);
// damos el nuevo contenido del portapapeles a los demas programas de windows
end;

La tecnica consiste en hacer que nuestra aplicación reciba el mensaje cada vez que en windows se dibuje algo en el portapapeles.

Tenemos que guardar en NextClipboard el siguiente programa que está monitoreando el portapapeles para informarle de que ha cambiado.

Si queremos habilitar la capturación del portapapeles, solo tenemos que hacer: Frmppal.CapturarClipboard := True;

Saludos

Última edición por Lepe fecha: 13-01-2005 a las 12:07:06.
Responder Con Cita