[fxruby-users] changing FXTextField default behavior

Jeroen van der Zijp jeroen at fox-toolkit.org
Tue Aug 26 22:17:52 EDT 2008


On Tuesday 26 August 2008, angico wrote:
> Hi,
> 
> Is it possible to change the data from an event, SEL_KEYPRESS or
> SEL_KEYRELEASE or the like, in order to, say, randomly change the codes
> of each keystroke?
> 
> If it is, how could I achieve this?
> 
> I've tried this:
> 
> text = FXTextField.new(self, 20)
> text.connect(SEL_KEYPRESS, method(:changeText))
> ...
> def changeText(sender, selector, data)
> 	A = 'A'.sum 0
> 	Z = 'Z'.sum 0
> 	a = 'a'.sum 0
> 	z = 'z'.sum 0
> 
> 	c = data.code
> 
> 	case c
> 	when A .. Z
> 		c = rand(25) + A
> 	when a .. z
> 		c = rand(25) + a
> 	end
> 
> 	if c != data.code
> 		data.code = c
> 	end
> 
> 	false
> end
> 
> But it doesn't work, and if I type in "hello", that's exactly what I see
> in the control.
> 
> So, again, is it possible to change that data?

When you intercept SEL_KEYPRESS, the keysym is passed to FXEvent.code and
the translated text is in FXEvent.text. 

If the .code represents an editing command, the .text member is disregarded;
but if the .code is a regular character, the string which is the translation
of the [sequence of] keysyms is inserted.

This way, input methods can be used to insert text while regular editing commands
still work normally.


		- Jeroen




-- 
+----------------------------------------------------------------------------+
| Copyright (C) 21:10 08/26/2008 Jeroen van der Zijp.   All Rights Reserved. |
+----------------------------------------------------------------------------+


More information about the fxruby-users mailing list