Ver Mensaje Individual
  #6  
Antiguo 28-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Te propongo una solución, no utilizar la unit clipbrd y copiar el contenido del portapapeles usando solo funciones de la API. Para copiar el texto podemos usar una función como esta:

Código Delphi [-]
function LeerTexto: string;
var
  hText: THandle;
  pText: PChar;
begin
  Result:= EmptyStr;
  if IsClipboardFormatAvailable(CF_TEXT) then
    if OpenClipboard(0) then
    try
      hText:= GetClipboardData(CF_TEXT);
      if hText <> 0 then
      begin
        pText:= GlobalLock(hText);
        if pText <> nil then
        begin
          Result:= String(PChar(pText));
          GlobalUnlock(hText);
        end;
      end;
    finally
      CloseClipboard;
    end;
end;

La funcion anterior intentara copiar el texto del portapapeles, si no lo consigue devolvera una cadena vacia, pero no mostrara ningun error. Asi que podriamos utilizarla de la siguiente manera:

Código Delphi [-]
procedure TForm1.WMDrawClipboard(var Msg: TMessage);
var
  Str:   String;
begin
  Str:= LeerTexto;
  if Str <> EmptyStr then
    memo1.Lines.Add(Str);
  Msg.Result:= SendMessage(NextClipboard, Msg.Msg, Msg.wParam, Msg.LParam);
end;

¿Que te parece? por lo menos a mi ya no me sale ningún error al arrastrar en excel.
Responder Con Cita