Wie bei den meisten üblichen Programmen, möchte ich auch in eines meiner Fenster in einem Editfeld Text aus der Zwischenablage mittels Strg+V hineinkopieren, im folgenden KeyDown-Ereignis der TEdit-Komponente:
Code:
procedure TForm1.EdEingabeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
z: string;
begin
if (Shift = [ssCtrl]) and (Key=ord('C')) then Clipboard.AsText:=EdEingabe.SelText else
if (Shift = [ssCtrl]) and (Key=ord('X')) then begin
Clipboard.AsText:=EdEingabe.SelText;
z:=EdEingabe.Text;
Delete(z, EdEingabe.SelStart+1, EdEingabe.SelLength);
EdEingabe.Text:=z
end else
if (Shift = [ssCtrl]) and (Key=ord('A')) then EdEingabe.SelectAll else
if (Shift = [ssCtrl]) and (Key=ord('V')) then
begin
{
z:=EdEingabe.Text;
//EdEingabe.Clear;
Insert(Clipboard.AsText, z, EdEingabe.SelStart+1);
EdEingabe.Text:=z
}
end
end;
Seltsamerweise habe ich nun inzwischen 2 verschiedene, mit Pascal implementierte Anwendungen, in denen beide Text in ein jeweiliges Editfeld mittels Strg-V wie gewollt aus der Zwischenablage eingefügt werden kann. Der Unterschied jedoch liegt darin, dass in einem der Anwendungen die Anweisungen auskommentiert wurden (siehe Code), der Paste-Vorgang jedoch trotzdem funktioniert, während, wenn ich in dem anderen Quellcode die entsprechende Stelle auskommentiere, logischerweise gar nichts passiert.
Warum ist das so?
Die drei Zeilen
Code:
z:=EdEingabe.Text;
Insert(Clipboard.AsText, z, EdEingabe.SelStart+1);
EdEingabe.Text:=z
sind in beiden Programmen komplett identisch!
Wenn ich in dem Fenster, in dem der Paste-Vorgang auch ohne diese Zeilen funktioniert, trotzdem reinschreibe, dann wird der Text aus der Zwischenablage doppelt in das Editfeld rein kopiert - einmal am Anfang des Editfelds und einmal an der Stelle EdEingabe.SelStart.
Hilfe...that's confusing?!