[sfml]Wpisywanie z klawiatury polskich znaków
Ostatnio zmodyfikowano 2012-06-12 20:59
mar3 Temat założony przez niniejszego użytkownika |
[sfml]Wpisywanie z klawiatury polskich znaków » 2012-06-12 17:50:01 Piszę aplikację w której można będzie za pomocą klawiatury wpisywać tekst. Problem jest w tym, że jak ktoś chce wpisać ą wciśnie alt+a to pojawiają się dwie litery a. Gdy ktoś wciśnie alt+e to pojawia się ea. Oto mój kod: sf::String nDoZgadniecia; nDoZgadniecia.SetPosition( oknoAplikacji.GetWidth() / 2 - 200, 450 ); nDoZgadniecia.SetSize( 24 ); nDoZgadniecia.SetColor( sf::Color::White ); nDoZgadniecia.SetText( "" ); sf::Font mojaCzcionka; mojaCzcionka.LoadFromFile( "arial.ttf", 30 * 5, L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ąćęłńóśźżĄĆĘŁŃÓŚŹŻ" ); nDoZgadniecia.SetFont( mojaCzcionka );
sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) oknoAplikacji.Close(); if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape ) oknoAplikacji.Close(); if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code >= 97 && zdarzenie.Key.Code <= 122 ) { std::string aktualny = nDoZgadniecia.GetText(); if( aktualny.size() / 14 < 5 ) { sf::String tmp2( & zdarzenie.Text.Unicode ); std::string tmp3 = tmp2.GetText(); nDoZgadniecia.SetText( aktualny + tmp3 ); } } } oknoAplikacji.Clear( sf::Color::Black ); oknoAplikacji.Draw( nDoZgadniecia ); oknoAplikacji.Display(); Bardzo proszę o pomoc w rozwiązaniu tego problemu. Z góry dziękuję. |
|
DejaVu |
» 2012-06-12 19:25:11 sprawdź czy alt wciśnięty jest w trakcie wciskania klawisza i jeżeli tak to wstaw odpowiedni znak. |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2012-06-12 20:59:05 Dzięki DejaVu. Podczas pisania dodatkowych if'ów zauważyłem, że wystarczy dodać oknoAplikacji.GetEvent( zdarzenie ); w if'ie sprawdzającym literkę, która została wciśnięta. Teraz mój kod wygląda tak: if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code >= 97 && zdarzenie.Key.Code <= 122 ) { std::string aktualny = nDoZgadniecia.GetText(); oknoAplikacji.GetEvent( zdarzenie ); if( aktualny.size() / 14 < 5 ) { sf::String tmp2( & zdarzenie.Text.Unicode ); std::string tmp3 = tmp2.GetText(); nDoZgadniecia.SetText( aktualny + tmp3 ); } } Teraz wszystkie: ą, ę, ó... działają dobrze. Tylko jak się wciśnie np. alt+k to pojawia się ka. Próbowałem dopisać if, ale mi nie wyszło. Jak temu zaradzić? Edit:Przypadkiem odkryłem, że wystarczy dopisać if( zdarzenie.Key.Alt == true ) continue; Teraz kod wygląda tak: if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code >= 97 && zdarzenie.Key.Code <= 122 ) { std::string aktualny = nDoZgadniecia.GetText(); oknoAplikacji.GetEvent( zdarzenie ); if( zdarzenie.Key.Alt == true ) continue; if( aktualny.size() / 14 < 10 ) { sf::String tmp2( & zdarzenie.Text.Unicode ); std::string tmp3 = tmp2.GetText(); nDoZgadniecia.SetText( aktualny + tmp3 ); } } Teraz wszystko działa ok. Nie rozumiem dlaczego? Czy ktoś może mi to wytłumaczyć? |
|
« 1 » |