[SFML] Text Box i pisanie w nim
Ostatnio zmodyfikowano 2012-10-07 10:26
ridic14 Temat założony przez niniejszego użytkownika |
[SFML] Text Box i pisanie w nim » 2012-10-06 18:59:26 Tworzę tekstboxa i chcę żeby można było w nim pisać ... pierwsza myśl to: if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::A ) inActive += "a";
if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::B ) inActive += "b";
if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::C ) inActive += "c";
............
ale taki kod to jakaś bzdura i za długo będzie trwać pisanie tego irp... więc pomyślałem o getch() wydaje się że to świetny pomysł... lecz niestety bo ta metoda czeka na naciśnięcie przycisku(czyt. zatrzymuje program do naciśnięcia przycisku co jest kolejną bzdurą....) ... Czy ma ktoś jakiś pomysł? |
|
SeaMonster131 |
» 2012-10-06 19:05:28 Ja spojrzałem na tabelkę ASCII oraz na kod klawiszy: powiedzmy że sf::Keyboard::A to 1, a ..::Z to 10. Lecę pętlą for od tej 1 do 10. Teraz, 'A' w ASCII to 41, więc muszę dodać 40 (1+x=41; x=40): string text;
for( int i = 1; i <= 10; i++ ) { if( event.type == sf::Event::KeyPressed && event.key.code == i ) text += i + 40; }
Ja to zrobiłem mniej więcej w ten sposób, choć pewnie są też inne. :) |
|
ridic14 Temat założony przez niniejszego użytkownika |
» 2012-10-06 19:12:04 key.code ma tylko literowe nazwy tj. nie ma liczbowych zamienników |
|
Admixior |
» 2012-10-06 19:14:06 A nie ma czegoś takiego jak event "TextEntered"? Tam masz od razu zamienione na odpowiednią wielkość lub znak specjalny ;] else if( zdarzenie.Type == zdarzenie.TextEntered ) { chgnm.AddChar( zdarzenie.Text.Unicode ); }
|
|
ridic14 Temat założony przez niniejszego użytkownika |
» 2012-10-06 19:29:20 Dzięki za pomoc działa |
|
Admixior |
» 2012-10-06 19:33:23 A co chcesz tej zmiennej ustaawić (co to jest to inActive) i wydaje mi się że jak to jest czysty "..." to L powinno być bez nawiasów. |
|
ridic14 Temat założony przez niniejszego użytkownika |
» 2012-10-06 19:35:28 ale jest inny problem a mianowicie przycisk backspace i enter powoduje pojawienie się kwadracika... jak to zwalczyć?
lub jaki kod/nazwę ma to zdarzenie to za pomocą if/a się to wyeliminyje
Mają one kod 8 i 13 więc teraz zobaczę co da się zrobić
|
|
Admixior |
» 2012-10-06 19:41:57 po prostu sprawdzasz: bool is_text( wchar_t c ) { if(( c >= L'A' && c <= L'Z' ) ||( c >= L'a' && c <= L'z' ) ) return true; wstring pol = L"ęóąśłżźćńĘÓĄŚŁŻŹĆŃ"; if( pol.find_first_of( c ) != string::npos ) return true; return false; } int ChangeName::AddChar( wchar_t c ) { if( !wid ) return - 1; if( !is_text( c ) ) { if( c != 0x08 && c != 0x0d ) ::MessageBeep( MB_ICONINFORMATION ); return - 2; }
i obsługa enter i backspace else if( zdarzenie.Type == zdarzenie.KeyPressed ) { if( zdarzenie.Key.Code == sf::Key::Return || zdarzenie.Key.Code == sf::Key::Tab ) chgnm.TabOrEnterPressed(); if( zdarzenie.Key.Code == sf::Key::Back ) chgnm.DeleteChar();
|
|
« 1 » 2 |