OnKeyDown funktioniert nicht mehr

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

OnKeyDown funktioniert nicht mehr

Beitrag von 400kmh »

Hallo, ich habe folgendes Problem:

Ein Fenster hat eine OnMouseMove, OnClick und eine OnKeyDown Prozedur. Alles funktioniert solange bis ich einmal ein anderes Programm in den Vordergrund rücke. Danach funktioniert bei meinem Fenster immernoch die OnMouseMove und die OnClick-Prozedur aber nicht mehr die OnKeyDown-Prozedur, selbst wenn ich das Fenster wieder in den Vordergrund rücke. Gibt es dafür eine Erklärung und Lösung?

andikad
Beiträge: 20
Registriert: So 11. Mai 2014, 03:41

Re: OnKeyDown funktioniert nicht mehr

Beitrag von andikad »

Hallo,

Tastaturereignisse empfängt immer nur das Fenster, dass aktuell den Fokus hat. Innerhalb einer Anwendung kann man bei Bedarf die Tastatureingaben an ein anderen Fenster weiterleiten, in dem man bspw. in Form2.Keydown Form1.Keydown aufruft und die Parameter einfach weiterleitet.

Anwendungsüberggreifend wird das schwieriger. Was genau wilst Du denn erreichen.

Stell Dir vor Du sitzt vor einem Dokument, der Text den Du schreibst landet aber in Excel...

Gruß, Andreas

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: OnKeyDown funktioniert nicht mehr

Beitrag von 400kmh »

andikad hat geschrieben:Hallo,

Tastaturereignisse empfängt immer nur das Fenster, dass aktuell den Fokus hat. Innerhalb einer Anwendung kann man bei Bedarf die Tastatureingaben an ein anderen Fenster weiterleiten, in dem man bspw. in Form2.Keydown Form1.Keydown aufruft und die Parameter einfach weiterleitet.

Anwendungsüberggreifend wird das schwieriger. Was genau wilst Du denn erreichen.

Stell Dir vor Du sitzt vor einem Dokument, der Text den Du schreibst landet aber in Excel...

Bei mir ist es nur eine Anwendung mit Form1 und Form2. Form2 bedeckt den gesamten Bildschirm und soll mit der Escape Taste geschlossen werden können. Funktioniert auch, nur wenn ich z. B. mit Strg-Alt-Entf den Task Manager Aufrufe und danach das Fenster wieder anklicke, worauf das Fenster auch reagiert, sich wieder in den Vordergrund rückt, und die OnClick-Prozedur ausführt, reagiert es nicht mehr auf Escape. (Das Problem ist, dass es auf größeren Bildschirmen leichter den Fokus verlieren kann, weil es nicht den ganzen Bildschirm bedeckt.)

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OnKeyDown funktioniert nicht mehr

Beitrag von Mathias »

Passiert dies bei dir bei einem komplexen Project, oder auch bei einem minimal Beispiel ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: OnKeyDown funktioniert nicht mehr

Beitrag von 400kmh »

Problem gefunden: Auf der Form2 ist noch eine TrackBar, die bei abermaligem Aktivieren des Form wohl den Fokus bekommt ohne optische Kennzeichnung. Jedenfalls funktioniert jetzt alles nachdem ich auch das OnKeydown-Ereignis der Trackbar mit "close" verbunden habe.

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: OnKeyDown funktioniert nicht mehr

Beitrag von Erwin »

400kmh hat geschrieben:Problem gefunden: Auf der Form2 ist noch eine TrackBar, die bei abermaligem Aktivieren des Form wohl den Fokus bekommt ohne optische Kennzeichnung. Jedenfalls funktioniert jetzt alles nachdem ich auch das OnKeydown-Ereignis der Trackbar mit "close" verbunden habe.

Ja, so was habe ich auch mal gehabt. Es gibt da paar eigensinnige Komponenten (so sehe ich das jedenfalls), die bei beim Aufruf des Formulars/Registerseite etc. dann für sich den Fokus beanspruchen, also aktiv sind, und somit alle mit der Tastatur eingegeben Befehle abfangen. Besonders gemein ist dann auch noch, wenn es dann solche sind, die nicht mal grafisch anzeigen, dass die jetzt den Fokus haben. Hm... könnte aber auch sein, dass der Grund für das erhalten des Fokus auch Teils an etwas anderen liegt, als an der Komponente selbst ... ?!
Lazarus 2.2.0 / FP 3.2.4

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: OnKeyDown funktioniert nicht mehr

Beitrag von Nixsager »

400kmh vielleicht sehe ich was falsch, aber wieso stelltst du die KeyPreview-Eigenschaft der Form nich auf an?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Antworten