Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

11

25.05.2004, 19:16

oder machs so :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int KeyArray[] = {DIK_A, DIK_B, DIK_C, DIK_D, DIK_E, DIK_F, DIK_G,
DIK_H, DIK_I, DIK_J, DIK_K, DIK_L, DIK_M, DIK_N, DIK_O, DIK_P, DIK_Q, DIK_R, DIK_S, DIK_T, DIK_U, DIK_V, DIK_W, DIK_X, DIK_Y,
DIK_Z, 10000};

// hier muss man noch ergänzen
char CharArray[] = {'a', 'b', 'c', 'd', 'e',............., 'z'};

BOOL bBigLetters = FALSE;
if((Keys[DIK_LSHIFT] & 0x80) || ((Keys[DIK_RSHIFT] & 0x80))) 
  bBigLetters = TRUE;

int i = 0;
char BStabe;
while(KeyArray[i] != 10000)
{
  if(Keys[KeyArray[i]] & 0x80)
  {
    if (bBigLetters) 
    { 
      strcat ( txt, CharArray[i]);                
    }
    else
    { 
       BStabe = (char)((int)CharArray[i]-32);
       strcat ( txt, &BStabe); 
    } 
  }
}


das geht bestimmt auch eleganter aber viel mir gerade so ein....

Achja : die doppelte If-Abfrage bei unten in deinem Code ist überflüssig wenn nicht "lettersize == true" dann muss es false sein !

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

25.05.2004, 19:17

Öhmm ich würde mal sagen, wenn man großbuchstaben haben will müsste man die buchstaben doch dazu umformieren.........

Anonymous

unregistriert

13

25.05.2004, 19:19

Achso : vor der letzten Klammer ganz unten muss natürlich noch "i++;" rein

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

14

26.05.2004, 11:32

Zitat von »"cbee"«

Mich würde auch mal interessieren, was die Funktion KeyDown macht!

Ich könnte mir vorstellen, dass der Fehler durch das zweimalige Aufrufen der Funktion KeyDown zustande kommt.


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Taste gedrückt?
int KeyDown( bool number_value )
{
    BYTE aKey[256];
    HRESULT hr;

    //Daten abfragen
    hr = g_pKeyboard->GetDeviceState( sizeof( aKey ), &aKey );
    
    for ( int a = 0; a < 256; a++ )
    {
        if ( aKey[ a ] & 0x80 )
        {
            if ( number_value == true )
            {
                return a;   
            }

            else if ( number_value == false )
            {
                return static_cast <BYTE> ( a );
            }
        };
    };

    return NULL;
};

Anonymous

unregistriert

15

26.05.2004, 14:41

Na da haste doch den Fehler...
Du fragst 2x mal die States ab und brichst bei der ersten gedrückten Taste ab

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

16

26.05.2004, 14:44

Zitat von »"Fabster"«

Na da haste doch den Fehler...
Du fragst 2x mal die States ab und brichst bei der ersten gedrückten Taste ab


Beziehst du dich auf den Code der Funktion KeyDown oder auf den zuvor geposteten Code?

Ich verstehe irgendwie nicht wirklich, was du meinst. ???

17

26.05.2004, 14:56

Wenn du mehrere Tasten gleichzeitig haben willst must du auch schon alle Tasten in einem Fram abfragen und nicht nach der ersten gedrückten abbrechen ;)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
char szKey[256];

// Abfragen der States
GetKeyStateArray(&szKey);

// Print Big letters
if(szKey[DIK_LSHIFT] & 0x80 || szKey[DIK_RSHIFT] & 0x80)
{
  ToBigLetters(szKey);
}

PrintLetters(szKey);

Ist doch ganz einfach. Wenn eine der beiden Shift-Tasen gedrückt wurden must du einfach alle Buchstaben in Großbuchstaben verwandeln und dann auf die Konsole ausgeben. Dafür zig If-Abfrgen zu setzen ist verschwendung an Rechnenleistung ;D
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

18

26.05.2004, 16:49

Änderungen

Also sieht meine KeyDown-Funktion jetzt so aus:

Quellcode

1
2
3
4
5
void KeyDown( BYTE aKey[256] )
{
    //Daten abfragen
    g_pKeyboard->GetDeviceState( sizeof( aKey ), &aKey );
};


Und der Rest so:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    bool lettersize = false;
    BYTE szKey[256];

    if ( active == true )
        {
            KeyDown( szKey );
        
            if ( szKey[DIK_LSHIFT] & 0x80 || szKey[DIK_RSHIFT] & 0x80 )
            {
                lettersize = true;
            };
        
            for( int a; a < 256; a++ )
            {
                if ( szKey[a] & 0x80 )
                {
                    strcat ( txt, diArray [ szKey[a] ] );
                };
            };
        };


Da habe ich dann erst mal aufgehört zu coden, da es bereits in der Zeile if ( szKey[a] & 0x80 ) einen Access Violation-Fehler gibt, wenn ich das Programm ausführe.

Anonymous

unregistriert

19

26.05.2004, 20:18

Re: Änderungen

for( int a= 0; a < 256; a++ )

Allanon

Frischling

  • »Allanon« ist der Autor dieses Themas

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

20

26.05.2004, 21:32

Re: Änderungen

Zitat von »"Fabster"«

for( int a= 0; a < 256; a++ )


*kopfgegendiewandhau*

Danke, Fabster!

EDIT: Jetzt erscheinen nicht mal mehr kleine Buchstaben auf meinem Bildschirm. Hä?

EDIT AGAIN: Ah, ups. Hab den Fehler IMO gefunden. Kann ihn aber nicht beheben.

Quellcode

1
2
3
4
5
*p_aKey[256] )
{
    //Daten abfragen
    g_pKeyboard->GetDeviceState( sizeof( p_aKey ), &p_aKey );
};



Die folgende Zeile verursacht einen Konvertierungsfehler, obwohl die übergebene Variable doch dem Parameter entspricht. Oder irre ich mich da (wahrscheinlich ja*g*)?

Quellcode

1
KeyDown( &szKey );

Werbeanzeige