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.