SetGadgetFilter auf MAC
Übersicht

![]() |
MidimasterBetreff: SetGadgetFilter auf MAC |
![]() Antworten mit Zitat ![]() |
---|---|---|
gerade bin ich dabei ein Programm von PC auf MAC zu konvertieren und habe dabei ein unterschiedliches Verhalten eines MaxGui-Befehls gefunden.
Es geht um SetGadgetFilter. Mit dieser Funktion ist es möglich in einem TextGadget nur die Eingabe best. Zeichen zuzulassen. Rein theoretisch sieht die typische Verwendung so aus: Theorie BlitzMax: [AUSKLAPPEN] NurZahlen:TGadget = CreateTextArea(200,200,100,100,Window,TEXTAREA_WORDWRAP) Mit SetGadgetFilter wird einem TextAreaGadget eine selbstgestrickte Funktion als CallBack-Routine genannt. Diese CallBack-Funktion liefert dann TRUE oder FALSE, je nachdem, ob das Zeichen unterdrückt gehört. Windows: Dabei wird in Windows unterschieden in EVENT_KEYDOWN und EVENT_KEYCHAR. EVENT_KEYDOWN wenn eine Taste gedrückt wurde EVENT_KEYCHAR zusätzlich, wenn das Zeichen einen gültigen "Buchstaben" darstellt Jeder Tastendruck läuft zunächst durch EVENT_KEYDOWN. Wird dort TRUE geliefert und ist das Zeichen kein Buchstabe, ist es im TextGadget erlaubt. z.b. BACK_SPACE So erlaubt im oberen Beispiel die Zeile... BlitzMax: [AUSKLAPPEN] Case 8,37,38,39,40,46...alle Steuerzeichen. Alle Tastendrücke, die auch Buchstaben sind (z.b. "R") laufen jetzt noch durch das EVENT_KEYCHAR. Unabhängig vom Ergebnis von EVENT_KEYDOWN wird das Zeichen im TextGadget erlaubt, wenn diesmal TRUE geliefert wird. Diese Zeile... BlitzMax: [AUSKLAPPEN] Case 48,49,50,51,52,53,54,55,56,57...erlaubt alle Zahlen. MAC Dies scheitert auf MAC. Auf dem MAC scheint es gar keinen Event EVENT_KEYCHAR zu geben. Daher werden die Zahlen nicht ausgegeben. Hier würde folgende Funktion genügen: BlitzMax: [AUSKLAPPEN] Function ZahlenFilter%(event:TEvent,context:Object) Beide Systeme Allerdings führt diese Schreibweise auf dem Windows-PC dazu, dass die Zahlen nun wieder nicht mehr durchgelassen werden. Eine gemeinsame Routine für beide Systeme muss also so aussehen: BlitzMax: [AUSKLAPPEN] Function ZahlenFilter%(event:TEvent,context:Object) Anmerkung I: Die beiden Tastaturcodes 32 und 45, 109, 191 dienen dazu, das Leerzeichen und den Bindestrich zusätzlich zuzulassen. Anmerkung II: Da ich mir nicht ganz sicher bin, dass meine Untersuchungen 100% den wirklichen Ursachen entsprechen, habe ich das ganze mal als BMax-Beitrag und noch nicht als Tutorial veröffentlicht. Vielleicht hilft es ja mal irgendwem... Anmerkung III: Auf dem MAC scheint der Bindestrich nicht den KeyCode 45, sondern 109 und 191 zu haben. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso benutzt du Zahlen-Keycodes und nicht die KEY_*-Varianten? Die sind doch genau für die Plattformunabhängigkeit da.
ZEVS |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für den Tipp. Ich werde das beim Bindestrich ändern.
Aber das ändert natürlich nichts an dem Kernproblem. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group