79 Stimmen

Delphi/Lazarus: STRG+C in Memo oder Edit abfangen und Zwischenablage manipulieren

Tutorial von Stefan Trost | Letztes Update am 21.01.2023 | Erstellt am 06.11.2013

Wenn ein Nutzer die Tastenkombination STRG + C in einem TMemo- oder TEdit-Control verwendet, wird für gewöhnlich der Inhalt des Memos oder Edit-Feldes in die Zwischenablage kopiert.

An dieser Stelle sind allerdings auch viele Manipulationen denkbar. Entweder wir wollen komplett verhindern, dass es möglich ist, Inhalte aus unserem Programm in die Zwischenablage zu kopieren oder wir möchten nicht den (exakten) Inhalt aus dem Edit oder Memo kopieren sondern etwas anderes: Entweder einen komplett anderen String oder zum Beispiel eine Ergänzung zu dem bestehenden Inhalt. Denkbar wäre beispielsweise an eine Zahl noch vor dem Kopieren eine Einheit zu hängen.

All diese Manipulationen können wir einfach erreichen, indem wir unserem Memo oder Edit (oder welchem Control auch immer) den folgenden Code in sein OnKeyUp-Ereignis kopieren:

uses ClipBrd;

procedure Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin    
  if (ssCtrl in Shift) and (Key = ord('C')) then begin

    // Variante 1: Inhalt komplett löschen
    Clipboard.AsText := ''; 

    // Variante 2: Inhalt verändern
    Clipboard.AsText := 'Viel Spaß mit: ' + Memo1.Text + ' Kopiert aus ...'; 
    Clipboard.AsText := StringReplace(Memo1.Text, 'alt', 'neu', [rfReplaceAll]); 
    Clipboard.AsText := Memo1.Text + ' kg';

    // Variante 3: Einen anderen Inhalt bereitstellen
    Clipboard.AsText := 'Ein anderer Text.'; 

  end;
end;

Im OnKeyUp-Ereignis schauen wir als erstes nach, ob die Tasten STRG und C gleichzeitig gedrückt wurden. Falls dies der Fall ist, können wir als nächstes einen beliebigen Text in die Zwischenablage kopieren, indem wir einfach die Eigenschaft Clipboard.AsText setzen beziehungsweise überschreiben, mit der der aktuelle Inhalt der Zwischenablage gesetzt werden kann. Damit wir "Clipboard" nutzen können, müssen wir dafür lediglich die Unit "ClipBrd" in unsere "uses"-Section einbinden.

Im Beispiel zeigen wir 3 Möglichkeiten, wie wir den Inhalt der Zwischenablage manipulieren können:

  • Inhalt komplett löschen: Um den Inhalt der Zwischenablage zu leeren, ist es ausreichend "Clipboard.AsText" auf einen leeren String zu setzen.
  • Inhalt verändern: Wenn wir den Inhalt der Zwischenablage abändern möchten, stehen uns die üblichen String-Funktionen zur Verfügung. Exemplarisch zeigen wir in unserem Beispiel drei verschiedene Bearbeitungen: Einmal ersetzen wir ein Wort durch ein anderes, einmal hängen wir an den Text eine Einheit an und im dritten Beispiel betten wir den Text des Memos in einen anderen Text ein.
  • Anderen Inhalt bereitstellen: Wenn wir dem Nutzer einen vollständig anderen Text zur Verfügung stellen möchten, der nichts mit dem aktuellen Text des Eingabefeldes zu tun hat, können wir den Inhalt der Zwischenablage natürlich auch auf jeden anderen beliebigen Text setzen.

Natürlich können wir alternativ aber auch jede andere Möglichkeit der String-Manipulation nutzen oder sogar statt dem Text einen ganz anderen Inhalt, wie zum Beispiel ein Bild in die Zwischenablage kopieren.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Delphi: Systemweiter HotKey

Tutorial | 3 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.