teclado y checkboxes

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Hola;
Tengo un problema que me trae de cabeza y no me sale despues de mucho mirar por los foros y probar, estoy intentando poner un evento de teclado con las key 37 ( derecha ) y 39 (izquierda ) de las flechas --> y <-- del teclado. La idea es hacer resalte del checkbox seleccionado o resaltado como si fuera un menú.

El codigo es este:

Tu creas 4 checkboxes por ejemplo ; checkbox1 hasta el 4 ...

ON SHOW:
Page.SetFocus("CheckBox1");
ON KEY:


CheckBox.SetChecked("CheckBox1", false);
CheckBox.SetChecked("CheckBox2", false);
CheckBox.SetChecked("CheckBox3", false);
CheckBox.SetChecked("CheckBox4", false);
CheckBox.SetChecked("CheckBox5", false);


CH1 = CheckBox.GetChecked("CheckBox1");
CH2 = CheckBox.GetChecked("CheckBox2");
CH3 = CheckBox.GetChecked("CheckBox3");
CH4 = CheckBox.GetChecked("CheckBox4");
CH5 = CheckBox.GetChecked("CheckBox5");



if (e_Key == 37) then

	
	
	-- Get the names of all of the objects on the page.
	str_37 = Page.EnumerateObjects();


        for index, object in pairs(str_37) do
            -- Get the type of the object
            typem = Page.GetObjectType(object);
            if (typem == OBJECT_CHECKBOX) then
            
            	for n=1, 5 do
				chkn = Page.GetFocus("CheckBox"..n);
					if chkn ~= "" then
					Page.SetFocus("CheckBox"..(n+1));
					end
				
				end
            
            end
        end


	
end

if (e_Key == 39) then
	
	-- Get the names of all of the objects on the page.
	str_39 = Page.EnumerateObjects();


        for index, objectu in pairs(str_39) do
            -- Get the type of the object
            type = Page.GetObjectType(object);
            if (type == OBJECT_CHECKBOX) then
            
            
				for i=1, 5 do
				chk = Page.GetFocus("CheckBox"..i);
					if chk ~= "" then
					Page.SetFocus("CheckBox"..(i-1));
					end
				
				end
            
            end

        end

end

El caso es cuando le digo "Accion!" no hace nada con los teclados que mencione arriba, se queda resaltado el primero ( para que pueda empezar por algun sitio).

¿Alguien me puede decir en donde carallo me estoy rallando?

Gracias
te explicas como un libro abierto, he leido 2 veces el post y no me entero que quieres hacer
XD ya veo ... A ver la idea es en vez de usar el raton para ir navegando de objeto en objeto es navegar usando por poner un ejemplo las teclas up down derecha o izquierda, de modo que cada vez que seleccionas un objeto o un control ( input, listbox, checkbox etc...) no lo haces con el raton sino con las teclas ( e_Key = numero ), no se si me explico... Y el script o no esta bien planteado o no es la forma correcta de hacerlo... :(
sube el ejemplo , y lo miramos
aqui esta, algo modificado pero sin resultado:
yo he estado haciendo pruebas con tu idea y no me funciona del todo bien he probado a hacer alguna modificaciones personales en vez de usar tablas usar un sistema mas simple pero la verdad es que el royo este de ON KEY no purula muy bien creo que es un error del programa, en tu script el único error que he visto a primera vista esta en:
for index, objectu in pairs(str_39) do
que seria:
for index, object in pairs(str_39) do
mírate que no sea un bug de esta versión y sube un ejemplo para que otros usuarios se lo puedan mirar con mas calma!
el ejemplo esta un post antes que el tuyo, a ver si sacas algo en claro, espero que no sea un bug porsino vaya melda!
Bueno, me he tirado un ratejo probando, he escrito con mi propio codigo, y no funciona, le he estado dando vueltas un buen rato hasta que me he hecho un super petardo y lo he visto claro.

Todo trata de como se manejan estas ventanas, y como se comportan los objetos. Si bien nuestra ventana o pagina de ams procesa los eventos de teclado, sobre ella tambien tenemos objetos, estos objetos actuan como otra ventana mas, solo que es hija de esta otra.

Al pasar el focus de la ventana al objeto, es el objeto quien recibe los eventos de teclado, y quien ahora, deberia procesarlos. Esto es asi ya que por ejemplo podiriamos tener un richtext, y al escribir en el, tambien saltarian eventos de teclado, asi que el foco mantiene estos eventos en la ventana activa, justamente para eso está.

Cuando le pasas el focus a un checkbox, la pagina pierde el poder de procesar los eventos y como checkbox no incluye este evento de teclado es mas dificil hacerlo.

Llegados a este punto, tienes 2 soluciones...

La corta, no uses objetos "windowed" usa por ejeplo imagenes, currate 3 imagenes con un check, focusado, marcado y desmarcado, tambien puedes usar shape para el fondo y cambiar los colores, luego de evitar el uso de setfocus puedes trabajar con los key events sin problemay guardar el estado, por ejemplo en una tabla.

La solucion chunga de cojones, es usar el memory, tiene un sistema para recoger los mensajes de windows de un hwnd, usariamos el de la ventana maestra, y procesariamos todos los eventos con uMsg WM_CHAR aqui teneis la informacion http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Capturando los eventos de teclado se pueden capturar todos sea cual sea el hwnd de destino, por lo que se puede procesar en una funcion callback.

Realmente no es un bug, pero si que es una vagueza de los desarrolladores por no implementar on key en los objetos principales

Espero haber ayudado
Holas:
Bueno esto es lo máximo que he podido conseguir con el evento e_Key:

http://www.mediafire.com/?np18zc8c6nbc488

Usando un listbox y un combo los eventos de teclados funcionan solo si dejas en on preload por defecto como seleccionado un item el que sea, asi funciona pero nada mas..

Pabloko, esto tiene mala pinta porque la pagina que me has facilitado ya se lo podrian haber incluido los de hindigol rose esas llamadas a funcion tipo WM-Keydown y todas esas polladas, manda cojones que sea un "bug" no declarado ( como bien dices no es un bug basta con mirar el ejemplo del listbox combobox que he puesto aqui y sin polladas de por medio XD ).¿No será esta pagina algo relacionado con el lenguaje makina no? si es asi entonces me rajo es dificil de cojones :hypno:
Por cierto tengo 2 preguntas:
1) el amsmemory ok, y que tipo accion hay que usar para llamar a por ej WM_KEYUP ? hay que usar algun dll del propio windows o?
2) Cuando te refieres a objetos windowed te refieres a objetos de ventana no? cuales son para hacerme una idea...

Gracias por la aclaracion tio. No se si poner el ejemplo en hingidol rose porque manda cojones ( igual no me harian caso pero weno a ver si a la proxima mejoran el soporte de teclado en fin. gracias de todos modos.
La funncion se llama createwinndowsubclass, ella llama a una funcion callback dondne indica el resultado de todos los miles de mensajes que pasan cada segundo a procesar por el gestor de ventanas

function test(hWnd, uMsg, wParam, lParam)
--do something
--do something
end
Memory.CreateWindowSubClass(Application.GetWndHandle(), 0, "test");
Memory.FreeWindowSubClass(0);

por tanto tu capturas todos los uMsg que corresponden a WM_CHAR que equivale a 0x0102 lo que en decimal es 258 en wParam enncontraras el valor del key, lParam no tienes porque usarlo ya que incluye cosas de comprobacion y tal que no vas a usar, aunque n vistazo a la referencia que postee nunca viene mal
Y con system.iskeydown?
Nunca antes habia usado esa funcion, pero parece que funciona, el unico problema que veo es que habria que leerlo en un timer, y si este no ajusta bien se pueden producir varias lecturas.

Segun he probado, 100ms parecen funcionar mas o menos bien, y si dentro metemos un application.sleep de otros 100 o 200ms(cuando una tecla es presionada) quizas pueda hacerte el apaño
No me acordaba de esta funcion...Pabloko lo del timer te refieres a poner la funcion iskeydown ( 37 o 39 )
dentro de la pestaña on timer? o el timer de 100ms ponerlo en on show y la funcion iskeydown en la pestaña on timer? No me acabo de entender la idea...
si, en on show programas el timer para 100ms y en on timer haces un if para usar solo ese timer id, y dentro metes ifs para las teclas 37 y 39
Yo uso TAB y SHIFT+TAB jajajajajaja :lol:
En breve postearé los resultados de la investigacion XD
Bueno, algo he conseguido con las teclas, los botones normales son algo jodidos y hay que programar de forma muy mental y esta pasable pero weno...Los xbuttons me hace una cosa rara y se comporta de forma errática a veces cuando activo la opcion focus para xbutton ( una veces funciona y otras no ) no se si a vosotros os pasa lo mismo, los demas objetos funcionan bien.

Aviso que el codigo es una chapuza de cojones pero weno funciona de alguna manera, qeu opinais?

EL APZ: