Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Clipboard - Paste (https://www.delphipraxis.net/186230-clipboard-paste.html)

Danny92 15. Aug 2015 18:45

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:
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?! :?

DeddyH 15. Aug 2015 19:22

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?

Danny92 15. Aug 2015 19:56

AW: Clipboard - Paste
 
Ach!
Natürlich ziemlich dumm, wenn man den Tastendruck im OnKeyPress-Ereignis wieder abfängt:
Code:
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;
Und dies hatte ich in der anderen Form nicht, daher funktionierte der Paste-Befehl auch ohne mein manuelles Wiederhinzutun :-D
Haach, ist das alles kompliziert :)

Ja, Auskommentieren hat geholfen, nur im falschen Ereignis :)
Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz