Tastaturbedienung

designer
tastatur

#1

Der Anwender ist es auf der IBM i gewohnt an jedweder Stelle eine Funktionstaste zu drücken und erwartet dass eine entsprechende Funktion ausgeführt wird, wenn sie im entsprechenden Programm hinterlegt ist.
Dies kann sogar bezogen auf die aktuelle Cursorposition erfolgen.In einem typischen Windows-Programm läuft das anders. Hier hat sich der Entwickler der Oberfläche explizit darum zu kümmern, ob und was beim Drücken einer Funktionstaste passiert.

Windows Standard

Unter Windows gibt es ausserhalb von speziellen Controls (z.B. Eingabefelder, Dokumente) keine absolute Cursorposition mehr. Stattdessen ist das aktuelle fokussierte Control für die Behandlung der Tastatureingaben zuständig. Nur bestimmte Tastatureingaben werden standardmäßig vom Betriebssystem verarbeitet (z.B. Cursortasten, Tab, Alt+F4).

Auf unterschiedlichen Controls lösen Tasten auch unterschiedliche Aktionen aus. Das Drücken der Eingabetaste in einem Eingabefeld hat keine Auswirkung (oder führt zu einem Zeilenumbruch). Wenn man dagegen auf einem Button die Eingabetaste drückt, dann wird das Click-Ereignis ausgelöst.

iNOW OnTheFly-Modus

Solange ein Bildschirm nicht designed wird, befindet er sich im Emulationsmodus (OnTheFly-Modus). Hier wird das Verhalten der IBM i weitestgehend emuliert.

iNOW UI

Wenn man jetzt einen Bildschirm neu gestaltet, dann ist man der schwierigen Situation, auf der einen Seite eine Windows-typische Bedienung zu gewährleisten, auf der anderen Seite den gewohnten IBM i User nicht total zu erschrecken und ihm eine möglichst vertraute Tastaturbedienung zu ermöglichen.

iNOW UI Standard Umsetzung

Da es unter Windows keine Cursorposition mehr gibt, geht diese zunächst mal verloren und muss durch andere Mechanismen abgebildet werden. Die iNOW Standardeingabefelder merken sich daher ihre “Originalposition” und senden diese z.B. beim Drücken von Funktionstasten mit. Andere Controls geben Funktionstasten ohne spezielle Positionsangaben weiter.

Windows-Standardcontrols wie z.B. ein einfacher Button geben keine Tatstatureingaben weiter, hier sind Sie selbst für die entsprechende Weitergabe bzw. Verarbeitung zuständig.

Was bedeutet das jetzt für den Designer?

Wenn Sie z.B. zusätzliche Standard-Buttons ablegen, dann müssen Sie natürlich selbst entscheiden, was bei einem Klick passieren soll. In dem zugehörigen Klick-Ereignis können Sie z.B. eine Funktionstaste an den Host senden.

SendKey(FlexHostKeys.F4, x, y);

Das kommt jetzt nicht sonderlich überraschend, interessant ist aber etwas anderes:

Wenn Sie jetzt mit der Tab-Taste auf den Button wechseln, so dass dieser den Fokus hat, dann können Sie z.B. mit der Eingabetaste den Klick auslösen. Ok, auch das haben Sie mit Sicherheit erwartet :slight_smile:

Wenn Sie jetzt allerdings F4 oder BildAuf/BildAb drücken, dann passiert … NICHTS :frowning:

Der IBM i Anwender hätte jetzt erwartet, dass diese Taste genauso an den Host geschickt wird, wie wenn er auf einem anderen iNOW Eingabefeld steht.
Da der Standardbutton jetzt den Eingabefokus hat, bestimmt er was bei Tastatureingaben geschieht. Da dieser natürlich nichts von einer IBM i weiss, passiert auch nichts. Sie müssen ihm also beibringen, die Tasten weiterzugeben.

Hierfür hängen Sie ein neues Ereignis KeyDown an und fügen darin die folgende Codezeile ein:

ML.HandleKeyDown(this, e);  

Alternativ können Sie diesem Aufruf auch noch Parameter mitgeben

ML.HandleKeyDown(this, e, true, true);  

Mit dem ersten Zusatzparameter bestimmen Sie ob die BildAuf/BildAb Tasten ignoriert werden sollen, mit dem zweiten Parameter können Sie die Eingabetaste ignorieren.

Sie können natürlich auch einfach einen FlexSpeedButton verwenden, dieser erledigt das dann automatisch für Sie :slight_smile: