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.