TcHMI: Keyboard mit indirekter Eingabe

Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man dort auch ein anderes Control verwenden (eigenes Keyboard-Control als Ableitung des Beckhoff Keyboards)?

Das geht glaub ich über UiProvider.
Du brauchst wohl ein "uiProvider" Eintrag in der Manifest.json (damit dein Eintrag in der Auswahl im "HMI Config Window" auftaucht) und ein TcHmi.UiProvider.KeyboardProvider der sich über "TcHmi.UiProvider.register" am System meldet.
Da könnte man von TcHmi.Controls.UiProvider.Keyboard.TcHmiKeyboard erben...
Aber trivial ist das bestimmt nicht.
 
Ich werde es später mal versuchen. Danke

Aktuell muss ich mal schauen, wie man sich ein komplexeres Control mit der ControlFactory zusammenbaut, um das anschließend in den Topmost-Layer zu schieben. Ich werde berichten...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe einen recht gut funktionierenden Workaround zur Manipulation des System-Keyboards gefunden.

Aus meinem Framework-Projekt binde ich eine JavaScript-Funktion ein, die auf das globale Event onSystemKeyboardOpened reagiert. Innerhalb dieser Funktion lassen sich bereits viele Anpassungen vornehmen. Da jedoch einige Inhalte der Systemtastatur erst nachgeladen werden, nachdem das globale Event ausgelöst wurde, setze ich zusätzlich einen MutationObserver ein, um auch diese Elemente anzupassen.

Bei den CSS-Anpassungen möchte ich selbstverständlich nur das System-Keyboard verändern und nicht andere Popups im Topmost-Layer. Leider ist das gesamte Popup nicht mit einer spezifischen Keyboard-Klasse versehen. Erst relativ tief in der verschachtelten Div-Struktur befindet sich ein Container mit den entsprechenden Klassen und der ID tchmi-system-keyboard. Mithilfe des CSS-Selektors :has() lässt sich das dennoch gezielt ansprechen und sogar Elemente außerhalb dieses Containers – wie beispielsweise die Popup-Überschrift – stylen:

CSS:
.tchmi-system-topmostlayer-container .TcHmi_Controls_Helpers_Popup:has(#tchmi-system-keyboard) .TcHmi_Controls_Helpers_Popup-header-container h1

Das hilft erstmal. Dennoch hoffe ich, dass Beckhoff auch hier künftig eine einfachere Lösung aufzeigt, um das System-Keyboard einfacher anzupassen.
 
Das Keyboad selbst liefert ja auch das ".onLayoutLoaded" event.
Da das Systemkeyboard bei mir immer "tchmi-system-keyboard" hieß, könntest du auf "tchmi-system-keyboard.onLayoutLoaded" reagieren.
Dann sollte laut Beschreibung doch das Layout fertig sein.
 
Das Event habe ich gar nicht gesehen, danke für den Hinweis. Leider feuert das Event aber nicht, wenn man innerhalb das Tastatur das Layout umschaltet (bspw. von QWERTZ-Volltastatur auf Sonderzeichen). Bei diesem Umschalten ändert die Systemtastatur wieder den Inhalt der Buttons zur Steuerung der indirekten Eingabe (Accept, Cancel) von meinem reinmanipulierten Text hin zum Standardicon...
Da werde ich bei Gelegenheit nochmal etwas basteln müssen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Event habe ich gar nicht gesehen, danke für den Hinweis. Leider feuert das Event aber nicht, wenn man innerhalb das Tastatur das Layout umschaltet (bspw. von QWERTZ-Volltastatur auf Sonderzeichen). Bei diesem Umschalten ändert die Systemtastatur wieder den Inhalt der Buttons zur Steuerung der indirekten Eingabe (Accept, Cancel) von meinem reinmanipulierten Text hin zum Standardicon...
Da werde ich bei Gelegenheit nochmal etwas basteln müssen.

Ich weiss nicht genau was du da möchtest, aber der Text kommt doch aus der Keyboard-Datei.
Die liegt ja eh im Projekt unter deiner Kontrolle...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Richtig. Ich habe gerade nochmal ins aktuelle Javascript geschaut. Es sollen unterschiedliche Stylesheets angewendet werden, je nachdem ob Voll-Tastatur oder Numpad. Die entsprechenden CSS Klassen setzen wir per Javascript.
Aktueller Workaround: Es wird geprüft, ob eine Taste "K" gerendert wird. Falls ja, nehmen wir das als Voll-Tastatur an. Zum Glück reicht uns die deutsche und englische Tastaturbelegung und kyrillisch, chinesisch und Co sind kein Thema^^
 
Zurück
Oben