SFML community forums
Help => Window => Topic started by: seal on February 06, 2008, 01:20:59 am
-
Hello.
I want to make a textfield where I type text like any other textfield. So when a keyPress event is received I could just put the unicode character for the key in a string?
Well, I though so but that dosen't work. When I press a key that aren't a character it bugs.
So.. then I found some code from a SDL tutorial and he checked if it was a valid character, and that's what Im using.
Here's the code:
in my event loop...
if(event.Key.Code == sf::Key::Back) //om man tryckt på backsteg..
{
if(inputField.length() > 0)
inputField.erase( inputField.length() - 1 );
}
else
{
//en ifsats för att kolla att det är en bokstav eller siffra..
// sorry, swedish comments :P
if(
(event.Text.Unicode >= (char)'0' && event.Text.Unicode <= (char)'9')
||
(event.Text.Unicode >= (char)'a' && event.Text.Unicode <= (char)'z')
||
(event.Text.Unicode >= (char)'A' && event.Text.Unicode <= (char)'Z')
||
event.Text.Unicode == (char)' '
)
{
inputField += (char)event.Text.Unicode;
}
}
if(event.Key.Code == sf::Key::Space)
inputField += (char)' ';
...
draw the text to the window.
Works really good, except when it comes to the rest of the characters I want to use, I want the user to be able to write any character..
And holding SHIFT and typing a character won't put any character in the string, why?
How would you do this?
PS, I've tried to use wxwidgets all day, but I just can't get it to work. And I just want to try to make a simple chat so I don't think I need a GUI yet.
Thanks!
Edit;
I just saw this topic:
http://sfml.sourceforge.net/forum/viewtopic.php?t=148
But it dosen't solve my problem as I want it to be able to write all characters (i.e. !"#¤%& etc), including the non-internationel ones (like å ä ö). And it dosen't work with upper case characters.
-
The Event.Text field is only valid when a Event::TextEntered has been received, which is the event you must catch (forget Event::KeyPressed for this kind of input).
-
The Event.Text field is only valid when a Event::TextEntered has been received, which is the event you must catch (forget Event::KeyPressed for this kind of input).
Works perfect, apart from when I press backspace or return. If I do that, I can't type. Also å ä ö dosen't work.
Thanks!
-
I would also know how to do this, I wouldn't mind a tutorial for dummies ;)
-
I think non-international characters are not working because you cast to char instead of wchar_t or something similar.
inputField += (char)event.Text.Unicode
Also you should check if event.Text.Unicode returns a printable character:
if(event.Text.Unicode < 0x80){
...do something with char...
}
The backspace/return issue should be solved then.
(Check for them manually and remove the last character or add a "\n" to your string if you want the backspace/newline functionality)
I would be interested in the casting part too, what do I have to do with the Uint16 event.Text.Unicode gives me, to be able to append it to a string?
-
Just use a wstring, and cast the character to wchar_t.