Página 1 de 1

CREAR REJILLA DE DATOS

Publicado: 14 Sep 2011, 13:21
por quinux
Hola a todos,

necesito crear una rejilla de datos para que el usuario pueda ir rellenando manualmente. Es decir, como si estuviera introduciendo datos en Excel. He visto que está el listbox y listview pero en todas hay que ir rellenando con la función add o insert y yo lo que quiero es algo parecido pero que sea editable para que el usuario pueda escribir, borrar, etc. ¿qué debo usar?

GRACIAS

Re: CREAR REJILLA DE DATOS

Publicado: 16 Sep 2011, 08:28
por Ximorro
Bueno, si quieres hacer cosas muy complicadas hay una udf para manejar directamente objetos Excel, puede que hasta se pueda incrustar una hoja en un GUI AutoIt, aunque esto último no lo tengo claro.
Los usuarios pueden hacer todo el trabajo complicado en una hoja Excel gestionada por el programa y cuando acaban tomas los datos con _ExcelReadSheetToArray, que te pasa la hoja a una Array de AutoIt.

Pero para ediciones sencillas puedes usar simplemente un ListView, quizás no has visto un estilo muy interesante:
$LVS_EDITLABELS: Los item de texto pueden ser editados manualmente. :smt004
También te interesará poner el flag $LVS_SINGLESEL para que sólo se pueda seleccionar una celda cada vez, sino puede ser un lío.

Re: CREAR REJILLA DE DATOS

Publicado: 16 Sep 2011, 11:39
por jamaro
Hola, aprovecho el hilo para preguntar sobre ListView.

Ximorro, con los estilos que comentas, se hacen editables los listview, y supongo que después de la edición, el programa debe leer los datos y guardarlos (en archivo de texto, sqlite,...) Vamos, como si fuera cualquier input o control de texto ¿verdad?

Re: CREAR REJILLA DE DATOS

Publicado: 19 Sep 2011, 09:19
por Ximorro
Claro, los controles están en memoria, si quieres guardar su contenido tendrás que guardarlo en disco de alguna manera, ya sea un simple txt o metiéndose en cosas más complejas como bases de datos.
Vaya, no es por ser un ListView, como bien dices si quisieras guardar el texto de un Input también tendrías que guardarlo en disco. Aquí es lo mismo.

Re: CREAR REJILLA DE DATOS

Publicado: 18 Oct 2011, 16:34
por quinux
Hola de nuevo


lo primero gracias por los consejos y ayudas.
Segundo, ya estoy lanzado con el programa, de hecho, casi lo tengo terminado pero me falta resolver lo siguiente: para ir añadiendo líneas he usado el "HotKeySet" para capturar la tecla intro e ir insertando líneas en el listview. El problema es que si no cierro el programa cualquier pulsación de la tecla intro es capturada por el programa impidiendo su fucionamiento normal. ¿Existe alguna otra forma de realizar esto?

GRACIAS Y SALUDOS

Re: CREAR REJILLA DE DATOS

Publicado: 19 Oct 2011, 08:33
por Ximorro
Es un poco difícil contestar sin saber dónde estás poniendo los ENTER... ¿en un controlinput?
Hay algunas posibilidades:
Podrías capturar el Enter en el Input (simplemente capturando su evento).
También puedes poner un botón que añada la línea.
O en vez de Hotkey puedes usar aceleradores de teclas, es como un Hotkey pero sólo funciona en tu GUI. Eso ya lo he explicado varias veces por el foro, busca "GUISetAccelerators".

Huuuum, como se pasó a lo del ListView creo que me he liado... ¿te refieres a cuando presionas ENTER en Excel?
Eso es más complicado... podrías comprobar en la función de hotkey si es la ventana de Excel la que está activa, si no lo está reenvías el Enter para que la otra aplicación lo pueda usar. El problema es que eso también sería capturado por el Hotkey, con lo que hay que desactivarlo temporalmente:

Código: Seleccionar todo

HotKeySet("{ENTER}", "capturaENTER")
...
Func capturaENTER()
    If WinActive($excel_win) Then
       ; insertar la línea
    Else
       ; no estamos en Excel, relanzamos la tecla
       HotKeySet("{ENTER}") ; para no volverla a capturar ¡o entraríamos en un bucle infinito!
       Send("{ENTER}") ; Envía el enter a la ventana activa
       HotKeySet("{ENTER}", "capturaENTER") ; Restauramos el hotkey
EndFunc
Saludos

Re: CREAR REJILLA DE DATOS

Publicado: 19 Oct 2011, 09:17
por quinux
Muchas gracias, me ha sido de gran ayuda :smt041