Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#1

AV "Kann Zwischenablage nicht öffnen"

  Alt 23. Aug 2004, 14:57
Hallo,

ich habe ein Verständnisproblem beim verwenden der Zwischenablage ...
Ich experimentiere schon seit Tagen erfolglos herum und hoffe, das jemand von euch einen Tip für mich hat ...

Ich habe eine kleine Anwendung, die nach dem drücken eines globalen Hotkeys ein CTRL+C an die aktive Anwendung sendet um den dort selektierten Text in die Zwischenablage zu kopieren.

In meiner Anwendung verarbeite ich die Zwischenablage und möchte diese anschliessend leeren, um zu verhindern, das der User beim Drücken des Hotkeys (ohne vorheriges markieren des Textes) die alte Zwischenablage noch einmal verwendet.


Hier ein kleines Codebeispiel ...

Code:
 
public
   function VerarbeiteClipboardText(ClipboardText:String):Boolean;



procedure TMain."onHotkeyPress";
begin
  // selektierten Text aus aktivem Fenster in die Zwischenablage kopieren
  // beim 2. Drücken des Hotkeys wird der selektierte Text nicht mehr in die ZA kopiert :-(
  keybd_event(VK_CONTROL, 0, 0, 0);
  keybd_event(Ord('C'), 0, 0, 0);
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  Sleep(10);

  if Clipboard.HasFormat(CF_TEXT) then
  begin
    // die nächste Codezeile funktioniert nur beim ersten Drücken des Hotkeys.
    // bbeim 2. Drücken des Hotkeys wird die Exception "kann Zwischenablage nicht öffnen" ausgelöst
    if VerarbeiteClipboardText( Clipboard.AsText )=true then
      showmessage('Clipoard verarbeitet') else
      showmessage('Fehler');
  end;

end;

function TMain.VerarbeiteClipboardText(ClipboardText:String):Boolean;
begin


  // Hier mache ist was mit ClipboardText
  //.............
  //.............

  // Zwischenablage leeren
  try
    clipboard.clear;
    result:=true;
  except
    result:=false;
  end;

end;

{
Variante 2 - funtioniert auch nicht
function TMain.VerarbeiteClipboardText(ClipboardText:String):Boolean;
begin



  // Hier mache ist was mit ClipboardText
  //.............
  //.............

  // Zwischenablage leeren
  try

    try  
      clipboard.open
      clipboard.clear;
    finally
      clipboard.close;
    end;

    result:=true;
  except
    result:=false;
  end;

end;
}

Der Hotkey kopiert nur einmal den selektierten Text in die Zwischenablage und Clipboard.asText löst beim 2. drücken des Hotkeys die Exception "Kann Zwischenalage nicht öffnen" aus.
Wenn ich die Zwischenablage nicht leere funktioniert alles super.


Ich babe auch schon versucht mit SetClipboardTextSetClipboardText die Zwischenablage mit SetClipboardText(Pchar('<bereits übernommen>')) zu überschreiben.

Der Fehler bleibt der Selbe ...
Sobald ich die Zwischenablage in meinem Programm schreibe oder leere kommt beim 2. Drücken des Hotkeys "Kann Zwischenalage nicht öffnen".

Hat jemand eine Idee ?

Danke .....
Jens
  Mit Zitat antworten Zitat