Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopieren (https://www.delphipraxis.net/213607-delphi-7-synedit-onkeydown-ord-c-loescht-den-text-soll-aber-text-kopieren.html)

paule32.jk 25. Aug 2023 13:28

Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopieren
 
Hallo,
ich nutze die SynEdit Komponenten für Delphi.
In der eigentlichen SynEdit Komponente fange ich ein OnKeyDown ab...
Das Event löscht mir aber den Text, und kopiert nicht einfach.
Woran kann das liegen ?

Ich verwende folgenden Code:
Code:
procedure TFrame19.CopyButtonClick(Sender: TObject);
begin
  SynEdit1.CopyToClipboard;
end;

procedure TFrame19.SynEdit1KeyDown(
  Sender: TObject; var
  Key  : Word;
  Shift : TShiftState);
begin
  if ssCtrl in Shift then
  begin
    if key = Ord('C') then begin CopyButtonClick(Sender); exit; end;
  end;
end;

haentschman 25. Aug 2023 13:42

AW: Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopie
 
Hallöle...8-)
Zitat:

In der eigentlichen SynEdit Komponente fange ich ein OnKeyDown ab...
Was passiert eigentlich, wenn du deinen Code einfach wegläßt? :zwinker:

SynEdit kann das von Haus aus...:wink: (Markieren des Textes vorausgesetzt)

paule32.jk 25. Aug 2023 13:48

AW: Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopie
 
Zitat:

SynEdit kann das von Haus aus...:wink: (Markieren des Textes vorausgesetzt)
ja eben.
Aber bei mir wird der Text gelöscht, und auch nicht kopiert, wenn ich den Code auskommentiere.

haentschman 25. Aug 2023 13:52

AW: Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopie
 
Unterschied D7 - Alexandria? :?

...auch bei einer Testform nur mit SynEdit drauf?

mytbo 25. Aug 2023 14:28

AW: Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopie
 
Zitat:

Zitat von paule32.jk (Beitrag 1526107)
Aber bei mir wird der Text gelöscht, und auch nicht kopiert, wenn ich den Code auskommentiere.

Kann ich nicht bestätigen. Das Beispiel Programm (mit Quelltext) zum Artikel verwendet SynEdit und arbeitet wie erwartet.

Bis bald...
Thomas

paule32.jk 25. Aug 2023 15:57

AW: Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopie
 
ja, habs mal getestet, indem ich Delphi und SynEdit neu installiert habe.
... geht !

irgendwie muss ich mir die Konfiguration zerschossen haben, nachdem ich versucht
habe, SynEdit und andere Komponenten (wie Jedi, und Indy) mit der neuen Community
Version von Delphi übersetzen und installieren wollte.

So recht ist das noch nicht ausgefeilt mit so TestVersionen.
Oder die Pakete ansich haben eine Public Platz, an dem alles abgelegt wird - egal
was für eine Version vorliegt.

Es war ja auch so, das ich die ToolsAPI in Delphi 20,21 verwendet habe, und die
Quellen nicht gefunden habe, und dann einfach die Pfade von Delphi 7 übernommen
hatte.

Da kam dann der Fehler, das sich Variants.pas sich selbst beinhaltet - also so nen
Quatsch.

Nach verschwender-rischen 2 Stunden nach einer Lösung des Problems gesucht, weil ja
auch die tollsten Sachen in StackOverflow angeboten werden ...
... mal eine Neuinstallation gemacht.

Und siehe da, es geht.

Uff, Wochende gerettet.

himitsu 25. Aug 2023 16:11

AW: Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopie
 
Wozu das Exit?

Und nun rate mal, warum das Eine ein VAR-Parameter ist. :zwinker:

Delphi-Quellcode:
  if (Key = Ord('C')) and (ssCtrl in Shift) then begin
    CopyButtonClick(Sender);
    Key := 0;
  end;

Stolle58 26. Aug 2023 14:59

AW: Delphi 7 SynEdit - OnKeyDown - Ord('C') - löscht den Text .. soll aber Text kopie
 
Warum ist dieses Konstrukt bei Tastaturabfragen falsch.
Delphi-Quellcode:
  if (Key = Ord('B')) and (ssCtrl in Shift) then // falsch
  begin
    mach was;
  end;
  if (Key = Ord('B')) and ((ssAlt in Shift) and (ssCtrl in Shift)) then
  begin
    mach was anderes
  end;
Es kann zu einem Seiteneffekt führen, der schwer zu erkennen ist.
Den "mach was anderes" wird hier nie aufgerufen.

Besser ist die Abfrage mit:
Delphi-Quellcode:
 if (Key = Ord('B')) and ([ssCtrl] = Shift) then // richtig
 begin
   mach was;   
  end;
  if (Key = Ord('B')) and ([ssAlt, ssCtrl] = Shift) then
  begin
    mach was anderes
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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