AW: Tastenbestätigung in Delphi
nun der fuktionierende code:
Delphi-Quellcode:
nun ein neues Problem:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin turnscore := 0; ring := 0; //Inner-Bull Ring1: if key = 112 then begin turnscore := 50 ; ring := 1; end; //Outer-Bull Ring2: if key = 113 then begin turnscore := 25 ; ring := 2; end; //innen-einfach Ring3: if key = 114 then begin turnscore := 1 ; ring := 3; end; if key = 115 then begin turnscore := 2 ; ring := 3; end; if key = 116 then begin turnscore := 3 ; ring := 3; end; if key = 117 then begin turnscore := 4 ; ring := 3; end; if key = 118 then begin turnscore := 5 ; ring := 3; end; if key = 119 then begin turnscore := 6 ; ring := 3; end; if key = 120 then begin turnscore := 7 ; ring := 3; end; if key = 121 then begin turnscore := 8 ; ring := 3; end; if key = vk_F11 then begin turnscore := 9 ; ring := 3; end; if key = vk_F12 then begin turnscore := 10 ; ring := 3; end; if key = 220 then begin turnscore := 11 ; ring := 3; end; if key = 49 then begin turnscore := 12 ; ring := 3; end; if key = 50 then begin turnscore := 13 ; ring := 3; end; if key = 51 then begin turnscore := 14 ; ring := 3; end; if key = 52 then begin turnscore := 15 ; ring := 3; end; if key = 53 then begin turnscore := 16 ; ring := 3; end; if key = 54 then begin turnscore := 17 ; ring := 3; end; if key = 55 then begin turnscore := 18 ; ring := 3; end; if key = 56 then begin turnscore := 19 ; ring := 3; end; if key = 57 then begin turnscore := 20 ; ring := 3; end; //dreifach Ring4: if key = 48 then begin turnscore := 1 ; ring := 4; end; if key = 219 then begin turnscore := 2 ; ring := 4; end; if key = 221 then begin turnscore := 3 ; ring := 4; end; if key = 8 then begin turnscore := 4 ; ring := 4; end; if key = 45 then begin turnscore := 5 ; ring := 4; end; if key = 36 then begin turnscore := 6 ; ring := 4; end; if key = 33 then begin turnscore := 7 ; ring := 4; end; if key = 111 then begin turnscore := 8 ; ring := 4; end; if key = 106 then begin turnscore := 9 ; ring := 4; end; if key = 109 then begin turnscore := 10 ; ring := 4; end; if key = 81 then begin turnscore := 11 ; ring := 4; end; if key = 87 then begin turnscore := 12 ; ring := 4; end; if key = 69 then begin turnscore := 13 ; ring := 4; end; if key = 82 then begin turnscore := 14 ; ring := 4; end; if key = 84 then begin turnscore := 15 ; ring := 4; end; if key = 90 then begin turnscore := 16 ; ring := 4; end; if key = 85 then begin turnscore := 17 ; ring := 4; end; if key = 73 then begin turnscore := 18 ; ring := 4; end; if key = 79 then begin turnscore := 19 ; ring := 4; end; if key = 80 then begin turnscore := 20 ; ring := 4; end; //außen-einfach Ring5: if key = 186 then begin turnscore := 1 ; ring := 5; end; if key = 187 then begin turnscore := 2 ; ring := 5; end; if key = 46 then begin turnscore := 3 ; ring := 5; end; if key = 35 then begin turnscore := 4 ; ring := 5; end; if key = 34 then begin turnscore := 5 ; ring := 5; end; if key = 36 then begin turnscore := 6 ; ring := 5; end; if key = 38 then begin turnscore := 7 ; ring := 5; end; if key = 33 then begin turnscore := 8 ; ring := 5; end; if key = 107 then begin turnscore := 9 ; ring := 5; end; if key = 65 then begin turnscore := 10 ; ring := 5; end; if key = 83 then begin turnscore := 11 ; ring := 5; end; if key = 68 then begin turnscore := 12 ; ring := 5; end; if key = 70 then begin turnscore := 13 ; ring := 5; end; if key = 71 then begin turnscore := 14 ; ring := 5; end; if key = 72 then begin turnscore := 15 ; ring := 5; end; if key = 74 then begin turnscore := 16 ; ring := 5; end; if key = 75 then begin turnscore := 17 ; ring := 5; end; if key = 76 then begin turnscore := 18 ; ring := 5; end; if key = 192 then begin turnscore := 19 ; ring := 5; end; if key = 222 then begin turnscore := 20 ; ring := 5; end; //doppel Ring6: if key = 191 then begin turnscore := 1 ; ring := 6; end; if key = 37 then begin turnscore := 2 ; ring := 6; end; if key = 12 then begin turnscore := 3 ; ring := 6; end; if key = 39 then begin turnscore := 4 ; ring := 6; end; if key = 226 then begin turnscore := 5 ; ring := 6; end; if key = 89 then begin turnscore := 6 ; ring := 6; end; if key = 88 then begin turnscore := 7 ; ring := 6; end; if key = 67 then begin turnscore := 8 ; ring := 6; end; if key = 86 then begin turnscore := 9 ; ring := 6; end; if key = 66 then begin turnscore := 10 ; ring := 6; end; if key = 78 then begin turnscore := 11 ; ring := 6; end; if key = 77 then begin turnscore := 12 ; ring := 6; end; if key = 188 then begin turnscore := 13 ; ring := 6; end; if key = 190 then begin turnscore := 14 ; ring := 6; end; if key = 189 then begin turnscore := 15 ; ring := 6; end; if key = 35 then begin turnscore := 16 ; ring := 6; end; if key = 40 then begin turnscore := 17 ; ring := 6; end; if key = 34 then begin turnscore := 18 ; ring := 6; end; if key = 96 then begin turnscore := 19 ; ring := 6; end; if key = 110 then begin turnscore := 20 ; ring := 6; end; begin if turnscore > 0 then label1.Caption := FloatTostr(turnscore); if ring > 0 then label2.Caption := FloatTostr(ring); end; end; ich habe festgestellt das numlock aktiviert sein muss um die numlock tasten benutzen zu können ja ich weiss wer hätte es gedacht aber gibt es einen weg die numlocktasten dauerhaft zu aktivieren? |
AW: Tastenbestätigung in Delphi
hab das problem schon selbst gelöst:
taste tastenadresse Sodertastenadresse num1 35 VK_NUMPAD1 num2 40 VK_NUMPAD2 num3 34 VK_NUMPAD3 num 0 96 VK_NUMPAD0 num, 110 VK_DECIMAL die abfragen mit vk_ wie vk_esc oder eben vk_numpad1 werden offensichtlich direkt unabhängig von shift, numlock... abgefragt die komplette tabelle für mein programm: Wert Zeichen Code alternative Mitte 50 F1 112 VK_F1 Ring 25 F2 113 VK_F2 Einzel-Innen 1 F3 114 VK_F3 2 F4 115 VK_F4 3 F5 116 VK_F5 4 F6 117 VK_F6 5 F7 118 VK_F7 6 F8 119 VK_F8 7 F9 120 VK_F9 8 F10 121 VK_F10 9 F11 VK_F11 10 F12 VK_F12 11 ^ 220 12 1 49 13 2 50 14 3 51 15 4 52 16 5 53 17 6 54 18 7 55 19 8 56 20 9 57 Trippel 2 0 48 4 ß 219 6 ´ 221 8 löschen 8 VK_CLEAR 10 einfg 45 VK_INSERT 12 pos1 36 VK_HOME 14 bild auf 33 VK_PRIOR 16 num/ 111 VK_DIVIDE 18 num* 106 VK_MULTIPLY 20 num- 109 VK_SUBTRACT 22 q 81 24 w 87 26 e 69 28 r 82 30 t 84 32 z 90 34 u 85 36 i 73 38 o 79 40 p 80 Einzel-Außen 1 ü 186 2 + 187 3 entf 46 VK_DELETE 4 ende 35 VK_END Taste 5 bild ab 34 VK_NEXT 6 num7 36 VK_NUMPAD7 7 num8 38 VK_NUMPAD8 8 num9 33 VK_NUMPAD9 9 num+ 107 VK_ADD 10 a 65 11 s 83 12 d 68 13 f 70 14 g 71 15 h 72 16 j 74 17 k 75 18 l 76 19 ö 192 20 ä 222 Doppel 3 # 191 6 num4 37 VK_NUMPAD4 9 num5 12 VK_NUMPAD5 12 num6 39 VK_NUMPAD6 15 < 226 18 y 89 21 x 88 24 c 67 27 v 86 30 b 66 33 n 78 36 m 77 39 , 188 42 . 190 45 - 189 48 num1 35 VK_NUMPAD1 51 num2 40 VK_NUMPAD2 54 num3 34 VK_NUMPAD3 57 num 0 96 VK_NUMPAD0 60 num, 110 VK_DECIMAL fail enter 13 VK_RETURN Abbrechen ESC 27 VK_ESCAPE Pause Pause 19 VK_PAUSE fail leer 32 muss das jetzt mal alles im quellcode änder ärgerlich hab extra über showkey alle ausgelesen... ich weiss unübersichtlich wenn ichs einfüge sieht es noch wie ne tabelle aus wenn ich auf speichern klicke... |
AW: Tastenbestätigung in Delphi
hier kannst du den Numlock anschalten: http://www.delphi-treff.de/tipps/sys...eds-ansteuern/
Bernhard |
AW: Tastenbestätigung in Delphi
num 8, 4, 5, 6, 2 funktionieren trotzdem nicht
irgentwer ne ahnung ich verzweifle... |
AW: Tastenbestätigung in Delphi
dann guck nochmal von Hand, aber wenn NumLock an ist und du die Tasten drückst, sollte das funktionieren, es sei denn die Tastatur geht nicht.
Bernhard PS: Ansonsten schau dir einfach mit ShowMessage(IntToStr(xxx)) den Wert an, den du bekommst und vergleiche den händisch mit den Konstanten. Dann siehst du ja, welche dazu passt. PPS: Du brauchst hier auch nicht alle Virtual Keys aufzuzählen. Die gibts als Konstanten in Delphi und die kann man bei MS auch nachlesen. |
AW: Tastenbestätigung in Delphi
Zudem würde sich eine case-Anweisung anbieten
|
AW: Tastenbestätigung in Delphi
warum ist in case of besser?
würde das programm auch nicht kürzer machen? und if in einer repeatschleife erschien mir einfacher... |
AW: Tastenbestätigung in Delphi
Statt
Delphi-Quellcode:
sollte man besser eine Case nehmen oder?
...
if key = 191 then begin turnscore := 1 ; ring := 6; end; if key = 37 then begin ... |
AW: Tastenbestätigung in Delphi
Wie willst du denn das mit einer Repeat-Schleife realisieren? - Das geht doch rein konzeptionell gar nicht.
Zu der Case-Struktur: Sie macht den Code weitaus besser lesbar und sorgt auch dafür, dass das Programm schneller läuft. Intern arbeitet ein Case als Assembler schneller als tausende von IFs. Sieht dann so aus:
Delphi-Quellcode:
Bernhard
case key of
VK_RETURN: DoReturn; VK_NUMPAD1: begin Ring := 1; Turnscore := 2; end; VK_NUMPAD2: begin Ring := 3; Turnscore := 4; end; end; |
AW: Tastenbestätigung in Delphi
zum heulen wenn ich das in tabellenform gelassen hätte...
gut ihr habt recht wesentlich besser letztendlich muss ja 3 mal abgefragt werden... sind beim dart schließlich 3 würfe und dann muss die wertung der 3 würfe noch gespeichert werden und das pro spieler pro runde und pro spielvariante hab schon nen kumpel gefragt wir treffen uns morgen zur "lagebesprechung" :D na mal sehn ob uns da was einfällt... mit dem numlock ein-ausschalten muss ich auch nochmal testen... mfg TucTuc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz