Programmablauf über Funktionstasten steuern

BusinessServerPages; Erstellung von Webapplikationen.

Programmablauf über Funktionstasten steuern

Postby Aylin151 » Fri Aug 25, 2006 8:42 am

Hallo, ich habe ein kleines Problem.

Und zwar...

Ich habe eine BSP Anwendung die ich gerne mit Hilfe der Tasten F1 - F12 steuern würde. z.B. vorwärts oder rückwärts navigieren. Wisst ihr vlt. wie das geht?
Habe leider selbst überhaupt keine Idee wie das geht.

Vielen Dank
Aylin151
..
..
 
Posts: 71
Joined: Fri Jan 27, 2006 3:44 pm

Postby Emre397 » Mon Aug 28, 2006 9:29 am

morgen!

normalerweise ist dies nicht ohne weiteres machbar, da der browser meist schon vorbelegte keys hat (F1 - hilfe... etc).

aber grundsätzlich handelt es sich hierbei um kein feature, daß man mit BSP allein lösen könnte. hier kommt eigentlich JavaScript zum tragen.

mit folgendem JS kannst du herrausfinden welche F-Taste gedrückt wurde.

gruß Aze

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. <script language="JavaScript">
  2. function getKeyCode&#40;event&#41; &#123;
  3. event = event || window.event;
  4. return event.keyCode;
  5. &#125;
  6.  
  7. function showOutput&#40;code&#41;
  8. &#123;
  9. Output=document.getElementById&#40;'show'&#41;;
  10. var text;
  11.  
  12. switch &#40;code&#41; &#123;
  13. case 112: text = "F1"; // F1
  14. break;
  15. case 113: text = "F2"; // F2
  16. break;
  17. case 114: text = "F3"; // F3
  18. break;
  19. case 115: text = "F4"; // F4
  20. break;
  21. case 116: text = "F5"; // F5
  22. break;
  23. case 117: text = "F6"; // F6
  24. break;
  25. case 118: text = "F7"; // F7
  26. break;
  27. case 119: text = "F8"; // F8
  28. break;
  29. case 120: text = "F9"; // F9
  30. break;
  31. case 121: text = "F10"; // F10
  32. break;
  33. case 122: text = "F11"; // F11
  34. break;
  35. case 123: text = "F12"; // F12
  36. break;
  37. &#125;
  38.  
  39. if&#40;!text&#41; text = String.fromCharCode&#40;code&#41;;
  40. Output.firstChild.nodeValue=text;
  41. self.focus&#40;&#41;;
  42. &#125;
  43.  
  44. document.onkeypress = function&#40;&#41;
  45. &#123;
  46. return false;
  47. &#125;
  48. document.onkeydown = function&#40;event&#41;&#123;
  49. var charCode = getKeyCode&#40;event&#41;;
  50. showOutput&#40;charCode&#41;;
  51. return false;
  52. &#125;
  53.  
  54. </script>
  55.  
  56. <body>
  57. PRESS ANY KEY TO KONTINÜ<br>
  58. Anzeige der gewählten Taste:
  59. <b>
  60. <p id="show">
  61.  
  62. </p>
  63. </b>
  64.  
  65. </body>
  66.  
GeSHi ©
Emre397
...
...
 
Posts: 141
Joined: Mon Dec 09, 2002 1:53 pm

Postby André4661 » Tue Aug 29, 2006 10:18 am

Ich habe ein ähnliches Problem:
ich hab mehrere Datensätze und möchte dem Nutzer ermöglichen durch Blättern mit den Cursortasten(oder beliebigen anderen Tasten) nach alle relevanten Datensätze duchzublättern

das problem ist nun:
wenn ich die Keycodes mit Javascript abfange sehe ich mich außer stande auf meine Abapdaten zuzugreifen(bisher hohle ich mir meine Daten durch FB Aufrufe in den Eventhandlern des BSPs ...aber ich weiß nicht wie ich diese von Javascript aus ansteuern kann)

ich hatte an so eine Art Pseudocode gedacht:

LAYOUT:
<javascript>function eingabe(eingabe){
if eingabe = 27
inInputProcessing('ESCAPE');
}
</javascript>

ONINPUTPROCESSING:
if event_id = 'ESCAPE'.
call funcion datenhohlen.
endif.

gibt es ein möglichkeit sowas zu machen? Oder verfolge ich vielleicht den komplett falschen Ansatz?
André4661
..
..
 
Posts: 19
Joined: Tue Aug 29, 2006 10:18 am

AW

Postby Aylin151 » Tue Aug 29, 2006 3:08 pm

@Azreal

Danke für die Antwort, hat mir echt weitergeholfen!!!

Zumindest teilweise...

Im "nomalen" IE funktionierts, nur soll die BSP Anwendung über einen PDA-Browser ausgeführt werden, und der leitet anscheinend die Tasencodes nicht an die BSP Anwendung weiter... aber ok zumindest funzt es am PC Vielen Dank nochmal.

@t0mt0m

Wenn du rausgefunden hast ob/wie es geht sagst du mir bitte Bescheid ? Danke ![/quote]
Aylin151
..
..
 
Posts: 71
Joined: Fri Jan 27, 2006 3:44 pm

Postby Emre397 » Tue Aug 29, 2006 9:14 pm

guten abend,
ihr wollt also tatsächlich nach einem tastendruck nen roundtrip mit dem backend starten - sehe ich das richtig?

dann müsst ihr im grunde nur einen submit auf die entsprechende form per java script ausführen. Dies setzt natürlich vorraus, daß ihr den namen der form kennt, die es zu submitten gilt ;)

hier etwas pseudocode:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. <script language="JavaScript">
  2. function getKeyCode&#40;event&#41; &#123;
  3. event = event || window.event;
  4. return event.keyCode;
  5. &#125;
  6.  
  7. function showOutput&#40;code&#41;&#123;
  8.  
  9. switch &#40;code&#41; &#123;
  10. case 112:
  11. document.eins.submit&#40;&#41;; // F1
  12. break;
  13. &#125;
  14.  
  15. document.onkeypress = function&#40;&#41;&#123;
  16. return false;
  17. &#125;
  18. document.onkeydown = function&#40;event&#41;&#123;
  19. var charCode = getKeyCode&#40;event&#41;;
  20. showOutput&#40;charCode&#41;;
  21. return false;
  22. &#125;
  23.  
  24. </script>
  25.  
  26. <form name="eins" action="handle-data.php">
  27. das ist ein test... <input type="text">
  28. </form>
GeSHi ©


Das ganze mit dem submit hier im detail:
http://www.javascript-coder.com/javascr ... bmit.phtml

@Aggressor: Die browser haben so ihre eigenheit was JavaScript kompatibilität anbelangt. was für ein browser ist denn auf den PDA?

gruß Aze
Emre397
...
...
 
Posts: 141
Joined: Mon Dec 09, 2002 1:53 pm

Postby André4661 » Thu Aug 31, 2006 10:09 am

@Azrael danke für die Antwort, aber eine Frage hätte ich noch dazu :wink:

Wenn ich den Code grade rchtig vertsanden habe, mnacht der Code nen einfachen Submit, soll heißen, er löst das gleiche aus wie wenn ich nur die Enter Taste drücken würde?

Kommt es irgend eine Möglichkeiten den Submitaufruf noch nen Parameter mitzugeben und Fallunterscheidungen zwischen einzelnen Tasten vorzunehmen?
Denn ich versuche die ganze Zeit die Situation zu erreichen, dass durch das Drücken verschiedener Tasten verschiedene Aktionen ausführen kann.
(mit einer Taste will ich weitere Datensätze anzeigen lassen und mit der anderen Detaildaten zum aktuellen Datensatz)

hab mir grade mal den Link zum Thema Javascript angeschaut aber leider nichts ber Parameter der Methode gefunden...

und das das leider auf nem mobilen Endgerät passieren soll auf dem der Touchscreen deaktiviert ist, kann ich das leider alles nur über Tastatureingaben realisieren
André4661
..
..
 
Posts: 19
Joined: Tue Aug 29, 2006 10:18 am

Postby Emre397 » Thu Aug 31, 2006 12:42 pm

servus,
also von der html ecke würde das ungefähr so aussehen...
innerhalb der form die du da submittest hast du noch ein inputfeld mit dem parameter hidden. dies setzt du dann kurz vor dem JavaScript submit auf einen gewissen wert (den wert der hinter der taste steht).

& ja, das submit ist vergleichbar mit einem drücken auf enter. das enterdrücken submitted aber nur die form, in der sich der user aktuell befindet (die form die den focus hat, in der sich der coursor befindet). Per javascript kannst du auch andere forms submitten. ggf. sogar forms anderer frames... den trick macht sich auch AJAX zu nutzen...

gruß Aze
Emre397
...
...
 
Posts: 141
Joined: Mon Dec 09, 2002 1:53 pm

Postby André4661 » Thu Aug 31, 2006 5:02 pm

so könnte es funktionieren...habe grade die ersten testläufe gemacht und es scheint zu gehen...also danke schonmal :)

Das einzig seltsame an der ganzen Sache ist nur, dass das Programm wenn ich die Form via Javascript submitte nicht weiter an den Eventhandler OnInputProcessing geht, allerdings wird unter anderem onManipulation aufgerufen(ich glaube das liegt daran, dass die Seite einfach nur reloadet wird), also kann ich meine Kommunikation mit der Applikationsklasse auch dort abhandeln..
André4661
..
..
 
Posts: 19
Joined: Tue Aug 29, 2006 10:18 am

Postby André4661 » Fri Sep 01, 2006 10:31 am

da ich grade nochmal per PM gefragt wurde; hier der Weg wie ich das Problem genau gelöst habe:

ich hab mich recht nah an die Lösungsvarinate von Azrael gehalten;
und zwar auf folgende Art und Weise

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. LAYOUT:
  2.  
  3. <head>
  4. ...
  5. # Ruft bei Tastendruck die Funktion myHandler auf #
  6. <script for=document event="onkeypress&#40;&#41;" language="JScript">&#123;myHandler&#40;&#41;;&#125;</script>
  7. <script for=document event="onkeydown&#40;&#41;" language="JScript">&#123;myHandler&#40;&#41;;&#125;</script>
  8. <script for=document event="onkeyup&#40;&#41;" language="JScript">&#123;myHandler&#40;&#41;;&#125;</script>
  9. ...
  10. <script language="JScript"> function myHandler&#40;&#41;&#123;
  11. #Handler für das Drücken der linken Cursortaste
  12. if &#40;window.event.keyCode == "37"&#41;&#123;
  13. var dir = "links";
  14. # übergibt dem Hidden Field "Key" einen Wert
  15. document.RF.key.value = dir;
  16. # Submit des Formulars RF
  17. document.RF.submit&#40;&#41;;&#125;
  18. return false;&#125;
  19. </script>
  20. ...
  21. </head>
  22. <body>
  23. ...
  24. <form name="RF">
  25. ...
  26. <input type="hidden" name="key" value ="">
  27. ...
  28. </form>
  29. <body>
  30.  
GeSHi ©


(beim Submit wird leider kein onInputProcessing ausgelöst, deswegen fange ich es hier ab; aber abgesehen von EVENT_ID hat man die gleichen Methoden und Paramter zur Verfügung)

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. ONMANIPULATION:
  2.  
  3. IF key EQ 'links'.
  4. * mach deine Aktionen für die linke Cursortaste
  5.  
GeSHi ©


Das wars auch schon :)

Das Feld Key kann ich deswegen einfach auslesen, weil ich eine Seitenvariable habe (bzw. ich benutze dazu meistens eine Struktur die ich als Seitenvariable deklariere) die genau so heißt wie das Feld(das Hidden Feld key). Dadurch werden durch Namensgleichheit die Parameter einfach übertragen.
André4661
..
..
 
Posts: 19
Joined: Tue Aug 29, 2006 10:18 am


Return to BSP + BHTML

Who is online

Users browsing this forum: No registered users and 4 guests