Einzelnen Beitrag anzeigen

martin_

Registriert seit: 19. Mai 2008
Ort: Österreich
89 Beiträge
 
#1

Tastenkombination in TRichedit

  Alt 14. Jun 2010, 10:39
Hallo,
folgenden Code verwende ich in der Richedit Komponente um damit den Inhalt in die Zwischenablage zu kopieren:

Delphi-Quellcode:
procedure TForm52.redt1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if noEvent then
    exit;

  // Tastenkombination: Ctrl + C
  if ((Key = 67) and (Shift = [ssCtrl])) then
  begin
    try
      noEvent := True;
      ShowMessage('ctrl+c');
      manualCopy;
    finally
      noEvent := False;
    end;
  end;

end;

und für das eigentliche Kopieren:

Delphi-Quellcode:
procedure TForm52.manualCopy;
begin
  redt1.SetFocus;
  redt1.SelStart := 0;
  redt1.SelLength := length(redt1.Text);

  {
  redt1.OnKeyDown := nil;
  redt1.OnKeyPress := nil;
  redt1.OnKeyUp := nil;
  }


  // Simuliere Tastenkombination: Ctrl + C
  keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
  keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
  keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
  keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);

end;
Problem hierbei ist das sich nach der Tastenkombination Ctrl+C im KeyDown die procedure manualCopy aufgerufen wird, die wiederum mit dem keybd_event das redt1KeyDown auslöst. Um den letzten Aufruf zu verhindern habe ich die Variable noEvent:Boolean eingeführt.

Nur leider wird der KeyDown immer wieder ausgelöst dh. befindet sich in einer Endlosschleife.
  Mit Zitat antworten Zitat