Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   FormClose mit ESC bzw. onKeypress (https://www.delphipraxis.net/203375-formclose-mit-esc-bzw-onkeypress.html)

HCB 12. Feb 2020 09:15

FormClose mit ESC bzw. onKeypress
 
Hallo und HILFE!!!

Ich verzweifle mittlerweilen: Ich habe Delphi XE2 und habe das Problem, dass die Ereignisse onKeypress, onKeyDown und onKeyup nicht stattfinden, sprich die werden erst gar nicht angesprochen. In meiner alten Delphi Version 6 auf einem anderen Rechner funktioniert es problemlos.

KeyPreview ist natürlich auf true gesetzt und unter Form1.keypress ist folgendes eingetragen: if key = #27 then close;
Eigentlich total simpel und funktioniert auch in Delphi 6.

Was zum Henker ist da falsch, wenn ich das selbe unter XE2 versuche. Ich habe mal bei onKeypress, onKeyDown und onKeyup ein ShowMessage eingebaut aber bei keinem Tastendruck wird die Message angezeigt.

Weiß nicht mehr weiter, vielleicht liegt es an XE2? Hat jemand XE2 und kan mal testen ob das bei ihm funktioniert?
Für alle Tipps und Hinweise wäre ich sehr dankbar.

Harry

hsg 12. Feb 2020 09:18

AW: FormClose mit ESC bzw. onKeypress
 
Moin,

dem Form auch die Eventhandler zugewiesen?

KodeZwerg 12. Feb 2020 09:19

AW: FormClose mit ESC bzw. onKeypress
 
So sollte es eigentlich universell für alle Delphi's funktionieren.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.KeyPreview := True;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
   if key = #27 then
// oder if key = chr(27) then
    Close;
end;

Daniel 12. Feb 2020 09:26

AW: FormClose mit ESC bzw. onKeypress
 
Delphi-Quellcode:
Form1.KeyPreview := True;
Das knallt furchtbar, wenn Du die Instanz des Formulares jemals an etwas anderes bindest als an die Variable Form1. In diesem Kontext - im FormCreate - reicht es, wenn Du nur "KeyPreview := True;" schreibst. Und an sich spricht auch nichts dagegen, diesen Wert gleich im Objekt-Inspektor zu setzen.

KodeZwerg 12. Feb 2020 09:32

AW: FormClose mit ESC bzw. onKeypress
 
Danke für verbesserung samt erläuterung!

Daniel 12. Feb 2020 09:36

AW: FormClose mit ESC bzw. onKeypress
 
Nö.
Im FormKeyPress bekommst Du einen Character - und das ist im Falle von ESC die #27. KeyUp bzw. KeyDown nutzen die numerischen Konstanten, die Du nennst.

KodeZwerg 12. Feb 2020 09:39

AW: FormClose mit ESC bzw. onKeypress
 
admin war schneller, bitte löschen :)

HCB 12. Feb 2020 09:46

AW: FormClose mit ESC bzw. onKeypress
 
Wow, so schnelle Reaktion hätte ich jetzt nicht erwartet. Danke!

1. Erzeuge neue Anwendung (Form1).
2. Setze Eigenschaft KeyPreview auf true
3. Trage im Ereignis onKeypress folgendes ein: if key = #27 then close;
4. Starte das programm und drücke ESC: Das programm wird beendet.

Wie gesagt, easy und funktioniert unter Delphi 6 ABER EBEN NICHT UNTER MEINEM XE2!!!
Deswegen war die Frage, ob jemand wenn er XE2 hat, das ausprobiert um sicher zu gehen ob es an dieser Version liegt oder woanders.

Alles sehr kurios.

ghubi01 12. Feb 2020 10:19

AW: FormClose mit ESC bzw. onKeypress
 
Hallo,

ich habe das gerade mal mit XE2 ausprobiert. Funktioniert einwandfrei.
Die Anwendung muss aber den Focus haben, sonst gehts nicht.

hoika 12. Feb 2020 10:21

AW: FormClose mit ESC bzw. onKeypress
 
Hallo,
in XE klappt alles, XE2 habe ich nicht.

Ich würde trotzdem mal hier die DFM posten,
vielleicht hast du eine murklige IDE-Erweiterung installiert, die querschießt.

HCB 12. Feb 2020 10:34

AW: FormClose mit ESC bzw. onKeypress
 
Ok, danke dass ihr das mal mit xe getestet habt. Nun scheint es ja an meiner Delphi Konfiguration oder sonstwas zu liegen. Ich werde mal auf diesem Rechner eine andere Version von Delphi istallieren und dann nochmal probieren. Vielleicht liegt es ja an irgendendeiner Komponente die zwar installiert ist, aber nicht benutzt wird. Keine Ahnung.
Auf jedenfall nervt die ganze Fehlersuche ungemein!

Eine IDE Erweiterung o.ä. hab ich nicht.

Danke nochmals für eure Mühe.
Harry

hoika 12. Feb 2020 11:04

AW: FormClose mit ESC bzw. onKeypress
 
Hallo,
zeig doch einfach mal deine DFM.
Soo gross kann die doch nicht ein.

HCB 12. Feb 2020 11:43

AW: FormClose mit ESC bzw. onKeypress
 
Ok, ich poste heute abend die DFM von der XE Version.
Hier die funktionierende mit Delhi 6:

object Form1: TForm1
Left = 192
Top = 107
Width = 1305
Height = 675
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
KeyPreview = True
OldCreateOrder = False
OnKeyPress = FormKeyPress
PixelsPerInch = 96
TextHeight = 13
end

HCB 12. Feb 2020 16:45

AW: FormClose mit ESC bzw. onKeypress
 
So nun hier eben mit XE2 erstellte Form, die nicht läuft. Das weiß nur der heilige Ozzy warum nicht mal Showmessage im Ereignis OnKeyPress fuktioniert.
OnKeyPress wird also definitiv nicht ausgelöst.

object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 299
ClientWidth = 635
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
KeyPreview = True
OldCreateOrder = False
OnKeyPress = FormKeyPress
PixelsPerInch = 96
TextHeight = 13
end

HCB 12. Feb 2020 17:13

AW: FormClose mit ESC bzw. onKeypress
 
So nun habe ich die 10.3 Community Version installiert und siehe da: DER GLEICHE MIST! OnKeyPress wird gar nicht erst angesprochen.
Ich vermute nun, dass irgend ein Schadprogramm Zugriff auf die Tastatur nimmt, anderes kann ich mir gar nicht mehr vostellen.
Habt ihr vielleicht noch irgendwelche Ideen die ich probieren kann?

Danke schon mal für eure Zeit.

Harry

himitsu 12. Feb 2020 17:23

AW: FormClose mit ESC bzw. onKeypress
 
Du hast aber nicht zufällig einen Frame oder eine kranke Komponente auf der Form, welche sich Tastenereignisse vorrangig krallt?
(TWebBrowser, AdobeIrgendwas, ... oder TApplicationEvents bzw. Application.OnIrgendwas:= bis bösem Code in den Events)

Aber ja, es gibt auch nette hilfreiche Programme, die eine DLL in jedes Proramm injecten, um da Ereignisse abzufangen. (Skype, ...)

Ansonsten OnKeyDown/OnKeyUp statt OnKeyPress verwenden.
ESC ist ja auch nicht wirklich ein Buchstabe (Char)
und als Word lässt es sich auch wunderbar mit VK_ESCAPE vergleichen.

HCB 12. Feb 2020 17:40

AW: FormClose mit ESC bzw. onKeypress
 
So Freunde der Nacht, der Fall ist gelöst!!!

Nachdem ich mir Gedanken über das Tastaturereignis gemacht habe, hatte ich eine Idee:
Probier doch mal eine andere Tastatur, nämlich die gute alte mit Kabel.

Ihr wird es nicht glauben, es lag an der Funktastatur (Cherry DW5000)!
Nachdem ich jetzt Maus und Tastatur mit Kabel verwende, läuft alles anstandslos. Alle Key ereignisse reagieren jetzt wieder.

Danke an alle die mir helfen wollten.
Jetzt brauch ich erst einmal ein Bier. Schönen Abend noch.

Harry

hoika 12. Feb 2020 17:58

AW: FormClose mit ESC bzw. onKeypress
 
:cheers: ;)

KodeZwerg 13. Feb 2020 07:16

AW: FormClose mit ESC bzw. onKeypress
 
Das ist ja mal was... bin gerade noch sprachlos aber gut das der Fehler entlarvt wurde wobei sich mir nach wie vor die Frage stellt "was zum Henker Delphi XE2 an dieser Stelle anders macht gegenüber der noch älteren Delphi Variante..... sind doch beide am selben System getestet worden... oder nicht?"

Ich nutze ebenfalls ein "Kabelloses Office gedöns" aber habe weder in alten noch aktuellen Delphis solch ein Verhalten feststellen können. Lustigerweise ist meine ausfallsicherung eine Cherry mit Kabel :P

Danke jedenfalls für den Hinweis :thumb:


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