Página 1 de 1

Eliminar item de una lista

Publicado: 08 Feb 2011, 04:42
por Marcelo
Hola, estoy enviciado con AutoIt, me parece cada vez más interesante!!
En esta ocación estoy intentando manejar listas pero tengo problemas para eliminar items.... Siempre devuelve FALSE.
Adjunto un ejemplo super básico para ver en que estoy fallando y si de paso hay algún manejo que esté haciendo mal, acepto sugerencias.... :smt002

Muchas gracias por la ayuda!!

Marcelo

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#Region ### START Koda GUI section ### Form=c:\Fuentes\Autoit\Lista\Form1.kxf
$Form1 = GUICreate("Form1", 623, 449, 192, 114)
$ListView = GUICtrlCreateListView("", 56, 72, 498, 286)
$Button1 = GUICtrlCreateButton("Item", 112, 400, 75, 25)
$Button2 = GUICtrlCreateButton("Agregar", 272, 400, 75, 25)
$Button3 = GUICtrlCreateButton("Eliminar", 420, 400, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GUICtrlListView_InsertColumn($ListView, 0, "Column 1", 100)
_GUICtrlListView_AddItem($ListView, "Item 1")
_GUICtrlListView_AddItem($ListView, "Item 2")
_GUICtrlListView_AddItem($ListView, "Item 3")
_GUICtrlListView_AddItem($ListView, "Item 4")
_GUICtrlListView_AddItem($ListView, "Item 5")
_GUICtrlListView_AddItem($ListView, "Item 6")
_GUICtrlListView_AddItem($ListView, "Item 7")
_GUICtrlListView_AddItem($ListView, "Item 8")
_GUICtrlListView_AddItem($ListView, "Item 9")


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$i = Int(_Guictrllistview_GetSelectedIndices($ListView))
			$item  = _GUICtrlListView_GetItem($ListView,$i)
			MsgBox(0,"Item","Indice: " & $i & @CR & "Texto: " & $item[3])
		Case $Button2
			$Agregar = InputBox("Agregar ítem.", "Agregar:")
			If @error <> 1 And $Agregar <> "" Then
				_GUICtrlListView_AddItem($ListView,$Agregar)
			EndIf
		Case $Button3
			$i = Int(_Guictrllistview_GetSelectedIndices($ListView))
			$item  = _GUICtrlListView_DeleteItem($ListView,$i)
			MsgBox(0,"",$item)
	EndSwitch
WEnd

Re: Eliminar item de una lista

Publicado: 08 Feb 2011, 09:08
por Ximorro
Pues pasa porque estas funciones en GuiListView.au3 normalmente funcionan mandando directamente mensajes Windows a los controles (y quizás alguna llamada a alguna DLL del sistema) por lo que requieren que les pases el handler Windows del control. A veces es intercambiable una variable AutoIt con un handler (sobre todo con las ventanas) pero no siempre.

Para los controles tienes la función GUICtrlGetHandle, así que para borrar items creados con la UDF (con _GUICtrlListView_AddItem, por ejemplo) tienes que usar eso.
Para borrar items creados desde las funciones internas de AutoIt (por ejemplo con GUICtrlCreateListViewItem) sí debes usar la variable de AutoIt.

Así que lo mejor es que te hagas una variable tipo:
$hListView = GUICtrlGetHandle($ListView)

y uses $hListView en las funciones de la UDF, y la original $ListView para las funciones internas AutoIt.

¡Adelante!

Re: Eliminar item de una lista

Publicado: 08 Feb 2011, 13:37
por Marcelo
Entiendo, ahora en un rato la pruebo y cuento como me fue....
Muchas gracias!!

Marcelo

Re: Eliminar item de una lista

Publicado: 08 Feb 2011, 15:15
por Marcelo
:smt038 :smt038
Espectacular!!!!
Una más que aprendo :smt002
Hice la prueba y funciona perfecto. entonces me guardo como regla que para las funciones _GUICtrl_xxxx que son las de UDF (archivos externos a autoit) uso el puntero que me entrega GUICtrlGetHandle() y para las demás el que me devuelve GUICreatexxx.
Muchas gracias otra vez Ximorro!!

Re: Eliminar item de una lista

Publicado: 09 Feb 2011, 09:25
por Ximorro
¡Me alegro que haya sido de ayuda! :smt004

Bueno, la norma no es general, eso depende de la UDF. Podría haber otra que extendiera las funciones internas de AutoIT usando AutoIT puro, entonces hay que seguir usando las variables de autoit. Cuando se usan Dlls o el sistema de mensajes de Windows es cuando hay que usar los identificadores internos de Windows. Lo normal es que lo ponga en la ayuda de la udf.

Re: Eliminar item de una lista

Publicado: 09 Feb 2011, 10:27
por jamaro
Muchas gracias por la pregunta y respuesta.
Es una de esas cuestiones que, por desconocimiento, te hacen estar un día dándole vueltas a ver qué falla en nuestro programa. Hace poco me pasó algo similar con los TreeView.

¡Me anoto esa "regla semi-general"!