![]() |
Clipboard - Paste
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:
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.
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; Warum ist das so? Die drei Zeilen
Code:
sind in beiden Programmen komplett identisch!
z:=EdEingabe.Text;
Insert(Clipboard.AsText, z, EdEingabe.SelStart+1); EdEingabe.Text:=z 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?! :? |
AW: Clipboard - Paste
Wenn ich mich nicht sehr irre, beherrscht das TEdit Zwischenablage-Operationen bereits von Haus aus und verfügt auch über ein entsprechendes Kontextmenü. Von daher ist Dein Code nicht nur unnötig, sondern doppelt gemoppelt. Klappt es, wenn Du ihn mal komplett auskommentierst?
|
AW: Clipboard - Paste
Ach!
Natürlich ziemlich dumm, wenn man den Tastendruck im OnKeyPress-Ereignis wieder abfängt:
Code:
Und dies hatte ich in der anderen Form nicht, daher funktionierte der Paste-Befehl auch ohne mein manuelles Wiederhinzutun :-D
procedure TForm1.EdGl1KeyPress(Sender: TObject; var Key: Char);
begin if not (Key in ['0'..'9','x','y','*','/','+','-','=',Char(VK_BACK),Char(VK_RETURN)]) then Key:=#0 else if (Key=Char(VK_RETURN)) and (Length(EdGl2.Text)>0) then BtBerechnen.Click end; Haach, ist das alles kompliziert :) Ja, Auskommentieren hat geholfen, nur im falschen Ereignis :) Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz