Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 08.07.2003, 13:36 Titel: Tastaturbuchstaben auslesen... |
|
|
Also...
Ich benutze diese Funktion um Tastaturcodes auszulesen:
Code: | void GetKeyData()
{
// alle Tasten der Tastatur
bool bKeyboard[256];
if(FAILED(lpDIKeyboard->GetDeviceState(sizeof(bKeyboard),(LPVOID)&bKeyboard)))
{
// die Tastatur wurde zwischenzeitlich
// durch eine andere Anwendung genutzt
// Kontrolle wiederholen
lpDIKeyboard->Acquire();
return;
}
// die gedrückte Taste ausgeben
if (bKeyboard[DIK_RETURN])
{
GetReturn();
}
if (bKeyboard[DIK_LEFT])
{
...
}
if(bKeyboard[DIK_RIGHT])
{
...
}
... |
Soweit so gut... Geht auch alles...
Aber: Jetzt will ich an einer Stelle einen 4buchstaben Code eingeben lassen...
Kann ich irgendwie innerhalb der Funktion den eingegeben Buchstaben verabreiten ohne eine Routine für jeden Buchstaben einzeln einzugeben???
Plzzz |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 08.07.2003, 14:01 Titel: |
|
|
Für solche Eingaben würde ich WM_CHAR und WM_KEYDOWN abfangen. Das ist deutlich einfacher. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 08.07.2003, 14:02 Titel: |
|
|
windows is aber soweit ich weis langsamer... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 08.07.2003, 14:13 Titel: |
|
|
Hilft mir aber jetzt nicht weiter...
Gibt es einen Weg, dass über die obige Funktion zu realisieren??? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 08.07.2003, 14:24 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | Was meinst du denn konkret mit Buchstaben verarbeiten? |
Wenn ein 'A' oder 'a' eingeben wird soll der erste Buchstabe von
char Code[5]="####";
ein A sein (daher A###*);
und das selbe für die Buchstaben B bis Z und b bis z... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.07.2003, 14:43 Titel: |
|
|
Dann würde ich dir das empfehlen:
Code: |
//Globaler Zähler
int lenghtOfCode=0;
//input-funktion
case Taste
{
DIK_A:
Code[lenghtOfCode]='A';
lenghtOfCode++;
break;
DIK_B:
Code[lenghtOfCode]='B';
lenghtOfCode++;
break;
//[...]
DIK_Z:
Code[lenghtOfCode]='Z';
lenghtOfCode++;
break;
DIK_BACKSPACE:
lenghtOfCode--;
break;
}
|
Was einfacheres kann ich dir leider nicht empfehlen _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 08.07.2003, 14:48 Titel: |
|
|
char alphabet[] = "ABZDEFGHIJKL..........";
int DIK[] = {DIK_A, DIK_B, DIK_C ......... DIK_X, DIK_Y, DIK_Z};
dein_4_buchstaben_char[3];
int zaehler = 0;
for(int i=0;i == 26;i++)
{
if (bKeyboard[DIK[i])
{
dein_4_buchstaben_char[zaehler] = alphabet[i];
zaehler++;
}
if(zaehler == 3)break;
}
das müste gehen. der einzige haken ist das ich nich weis ob man den wert von einer DIK-constante(DIK_A.....DIK_Z) in einem integer speichern kann (wenn ich in dinput.h nachguck hat DIK_A zum beispiel den wert "0x1E" ob diese hexadezimale zahl von compiler automatisch in ganzzahlen umgerechnet werden weis ich nich)
p.s.: wenn das beispiel bei dir funktioniert benutz ich es auch für mein game (ist garkeine dumme idee das mit den arrays...)
[/EDIT]wenn du sonderzeichen haben willst müstest du für z.B. die Space taste ganz zum schluß von alphabet ein " " eintragen aber dadafür noch in der DIK[] ganz zum schluß "DIK_SPACE" eintragen dazu natürlich bei der for-schleife das "i == 26" in "i == 27" umändern....... dann könntest noch zum beispiel eine extra if-abfrage in die schleife hängen die so aussieht:
if (bKeyboard[DIK_BACKSPACE)
{
zaehler--;
}
so hättest du dann eine löschfunktion mitdrin......[/EDIT] |
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 08.07.2003, 17:39 Titel: |
|
|
DANK EUCH ES GEHT!!! |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 08.07.2003, 17:46 Titel: |
|
|
nigs hat Folgendes geschrieben: | windows is aber soweit ich weis langsamer... |
Das ist doch egal, wenn man einen Text eingeben muss. Bei mir geht es wunderbar. Ich habe einen Singleton, den man an- und ausschalten kann und je nach dem loggt der die Keys mit und im Programm kann man dann immer und überall den eingegebenen Text abfragen und verwenden. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 08.07.2003, 17:58 Titel: |
|
|
mit was geht es??hast du mein beispiel verwendet??? |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 08.07.2003, 19:11 Titel: |
|
|
Nein, das würde ich nie tun, der Code is besch... eiden. ;) Ich hab mir eine Klasse geschrieben, die die Window-Messages WM_CHAR und WM_KEYDOWN abfängt. Sie funktioniert genauso wie eine Edit Box(mit Cursor) und sie kann sogar die Editiertasten(Backspace, Entf, Pos1, Ende) und die Richtungstasten korrekt behandeln. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 08.07.2003, 19:13 Titel: |
|
|
Zitat: | wenn ich in dinput.h nachguck hat DIK_A zum beispiel den wert "0x1E" ob diese hexadezimale zahl von compiler automatisch in ganzzahlen umgerechnet werden weis ich nich |
Was ist an "0x1E" nicht ganzzahl? Das ist doch 30... _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 08.07.2003, 20:15 Titel: |
|
|
nigs hat Folgendes geschrieben: | mit was geht es??hast du mein beispiel verwendet??? |
Na klar... Funktioniert fehlerfrei... (abgesehen davon das da i<=26 und nicht i==26 hinmuss...)
Thx. |
|
Nach oben |
|
|
|