Autor Beitrag
.50AE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Di 09.01.07 22:34 
Hi,

folgendes Problem:

Bei meinem momentan entstehenden Spiel soll der Spieler die Tastenbelegung frei wählen können. Egal, ob er die am. oder deu. Tastatur hat.

Nach dem, was ich mir bisher angeeignet habe, sind die Virtual Keys die Tasten auf der Tastatur, welche bei beiden Tastaturtypen gleich sind. (Oder verwechsle ich das jetzt schon wieder...)

Nun soll, wenn man eine Taste gedrückt hat, diese angezeigt und in eine .ini Datei gespeichert werden. Dazu muss ich sie in einen String umwandeln.
Das läuft bisher etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
s := chr(key); //A-Z; 0-9
   case key of
    vk_RETURN: s := 'Return'//Alle weiteren Keys...
    vk_LEFT: s := 'Left Arrow';
    ...
    ...

Allerdings geht das mit diesen Tasten nicht: , . - < ^
Wie kann ich deren Tastendruck auch noch herausfinden?

MfG
50ae
LLCoolDave
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win XP
Delphi 2005
BeitragVerfasst: Di 09.01.07 23:35 
Mmh, für diesen Zweck habe ich mir mal einen konstanten Array zusammengebastelt, in dem eigentlich alle wesentlichen Tasten meiner Tastatur vorkommen, vielleicht hilft er dir ja weiter. Vermutlich gibt es keine explizite VK Konstante für diese Tasten, sehe ich das richtig? Vielleicht hilft dir ja mein Ansatz aus, er sollte auf jeden Fall weniger Platz verbrauchen, wenn du wirklich die gesamte Tastatur abdeckst.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
const VKArray: Array[0..255of string=('','LMouse','RMouse','Cancel','MMouse','','','','Backspace','Tab','','','Clear','Return','','',
                                        '','','','Pause','CAPS LOCK','','','','','','','Escape','','','','',
                                        'Space','PageUp','PageDown','End','Pos1','Left','Up','Right','Down','Select','Print','Execute','Snapshot','Insert','Delete','Help',
                                        '0','1','2','3','4','5','6','7','8','9','','','','','','',
                                        '','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
                                        'P','Q','R','S','T','U','V','W','X','Y','Z','','','','','',
                                        'NUM 0','NUM 1','NUM 2','NUM 3','NUM 4','NUM 5','NUM 6','NUM 7','NUM 8','NUM 9','*','+','NUM .','-','NUM ,','/',
                                        'F1','F2','F3','F4','F5','F6','F7','F8','F9','F10','F11','F12','F13','F14','F15','F16',
                                        '','','','','','','','','','','','','','','','',
                                        'Num Lock','Scroll Lock','','','','','','','','','','','','','','',
                                        '','','','','','','','','','','','','','','','',
                                        '','','','','','','','','','','Ü','+',',','-','.','#',
                                        'Ö','','','','','','','','','','','','','','','',
                                        '','','','','','','','','','','','ß','^','´','Ä','',
                                        '','','<','','','','','','','','','','','','','',
                                        '','','','','','','','','','','Play','Zoom','','','','');


Zugriff einfach über VKArray[key] (Achtung, key als Word, nicht als Char), Rückrechnung ist durch die recht intuitive Funktion

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function GetVK(s: string): integer;
var i: integer;
begin
Result := 0;
for i:=0 to 255 do if VKArray[i] = s then begin Result := i; break; end;
end;


möglich. Hoffe ich konnte dir bei deinem Problem helfen, da ich mir nicht einmal ganz sicher bin, worin es eigentlich genau besteht. (Wie gesagt, ich habe es so interpretiert dass du für bestimmte Tasten keine VK_Konstante gefunden hast). Auf alle fälle sollte es über einen Array übersichtlicher und vermutlich auch effizienter gehen als über eine lange case Anweisung.
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Mi 10.01.07 22:15 
Cool, damit funktioniert es wunderbar! Vielen Dank!

50ae