Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2003
SCH SCH is offline
Miembro
 
Registrado: ago 2003
Ubicación: Valencia
Posts: 44
Poder: 0
SCH Va por buen camino
Vaciar portapales

Hola!
Cómo puedo vaciar el contenido del portapales? Tengo que usarlo para copiar y pegar parte de un texto de un RichEdit a otro pero claro, cuando acaba la operación el portapapeles está lleno de "basura".

Por cierto, habría otra forma de pegar parte del texto que contenga un RichEdit a otro sin utilizar el portapapeles o hacer algo para que si el usuario ya tenía algo en él no se pierda? No sé si me explico, pero si el usuario de mi aplicación había copiado algo y lo tiene en el portapapeles cuando el programa realice esa operación el portapapeles se llenará con otra cosa... ... creo que lo he liado más :P

Bueno, espero que podais ayudarme.

Un Saludo!
Responder Con Cita
  #2  
Antiguo 21-08-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Disculpa, he cometido un error en la respuesta anterior, por eso la modifico:

Clipboard.Clear;

Cita:
Deletes the contents of the clipboard.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 21-08-2003 a las 22:48:17.
Responder Con Cita
  #3  
Antiguo 21-08-2003
SCH SCH is offline
Miembro
 
Registrado: ago 2003
Ubicación: Valencia
Posts: 44
Poder: 0
SCH Va por buen camino
Vaya, era algo obvio... ... lo siento ^^U

Sobre la otra pregunta sabes que podría hacer para no sobreescribir el contenido del portapapeles?
Responder Con Cita
  #4  
Antiguo 22-08-2003
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 21
rrf Va por buen camino
Puedes evitar el usar el ClipBoard usando Stream. Aquí te muestro como copiar del RichEdit3 al RichEdit1.

Lo de ms.position := 0 puede que no sea necesario.

Procedure Copia_REdit ;
var
ms : TMemoryStream ;
Begin

Try
ms := TMemoryStream.Create ;
RichEdit3.Lines.SaveToStream ( ms ) ;
ms.position := 0 ;
RichEdit1.Lines.LoadFromStream( ms );
Finally
ms.free ;
end ;

end ;


No recuerdo si así se mantiene el tipo de letra, color, etc.

Espero que te sea útil.

Ramón.
Responder Con Cita
  #5  
Antiguo 22-08-2003
Avatar de Investment
Investment Investment is offline
Miembro
 
Registrado: may 2003
Posts: 378
Poder: 21
Investment Va por buen camino
El truco 214 de TRUCOMANIA es "Capturar cambios en el contenido del portapaeles"

Te lo reproduzco integro por si te puede ayudar. Te interesa sobre todo la parte del procedimiento WMDrawClipboard que se ejecuta cuando hay un cambio en el contenido del portapapeles


Código:
Tal como hacen programas como el GetRight, por ejemplo, que monitorizan el portapapeles reaccionando cuando 
hay algo que le interese tratar.
En este truco haremos un pequeño visor del portapapeles. Capturaremos texto o imagenes.
 
-Pon un TRichEdit (RichEdit1) y un TImage (Image1) en tu form
-Añade 'ClipBrd' en el uses de tu form
-Define estas dos procedures en la parte private de tu form:
 
 
 
  private
    { Private declarations }
    procedure WMDrawClipboard (var message : TMessage);
                              message WM_DRAWCLIPBOARD;
    procedure WMChangeCBCHain (var message : TMessage);
                              message WM_CHANGECBCHAIN;
 
 
 
-Define esta variable global a tu form (es decir, ponla en el var de la form):
 
 
 
var 
  Form1: TForm1;
  MangoSiguienteVisor : THandle;
 
 
 
-Ahora, pon en la implementation las dos procedures que trataran los mensajes que nos interesan del 
portapapeles:
 
 
 
procedure TForm1.WMDrawClipboard (var message : TMessage);
begin 
  message.Result := SendMessage(WM_DRAWCLIPBOARD, MangoSiguienteVisor, 0, 0);
  {Esto se ejecutará cuando haya un cambio en el contenido del portapapeles}
  {This code is executed when the clipboard contents change}
  if Clipboard.HasFormat(CF_TEXT) then RichEdit1.Text := Clipboard.AsText
    else 
  if Clipboard.hasFormat(CF_BITMAP) then 
   with Image1.Picture.Bitmap do 
      LoadFromClipboardFormat(CF_BITMAP,
                              ClipBoard.GetAsHandle(CF_BITMAP),0);
end; 
 
procedure TForm1.WMChangeCBCHain (var message : TMessage);
begin 
  if message.wParam = MangoSiguienteVisor then begin 
    MangoSiguienteVisor := message.lParam;
    message.Result := 0;
  end else begin 
    message.Result := SendMessage(MangoSiguienteVisor, WM_CHANGECBCHAIN,
    message.wParam, message.lParam);
  end; 
end; 
 
 
 
-Ahora, mete este código en el evento OnCreate de tu form:
 
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  MangoSiguienteVisor := SetClipboardViewer(Handle);
end; 
 
 
 
-Y este otro en el OnDestroy:
 
 
 
procedure TForm1.FormDestroy(Sender: TObject);
begin 
  ChangeClipboardChain(Handle, MangoSiguienteVisor);
end; 
 
 
 
Y tendrás un visor del portapapeles. Ejecuta la aplicación y mete algo en el portapapeles para probarlo.
__________________
Saludos,
Peter Investment
Responder Con Cita
  #6  
Antiguo 22-08-2003
SCH SCH is offline
Miembro
 
Registrado: ago 2003
Ubicación: Valencia
Posts: 44
Poder: 0
SCH Va por buen camino
Ahora lo pruebo todo.

Gracias!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:46:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi