Eliminar item de una lista

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Marcelo
Aprendiz de Mago
Mensajes: 34
Registrado: 29 Ene 2011, 18:13

Eliminar item de una lista

Mensaje 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
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Eliminar item de una lista

Mensaje 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!
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Marcelo
Aprendiz de Mago
Mensajes: 34
Registrado: 29 Ene 2011, 18:13

Re: Eliminar item de una lista

Mensaje por Marcelo »

Entiendo, ahora en un rato la pruebo y cuento como me fue....
Muchas gracias!!

Marcelo
Marcelo
Aprendiz de Mago
Mensajes: 34
Registrado: 29 Ene 2011, 18:13

Re: Eliminar item de una lista

Mensaje 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!!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Eliminar item de una lista

Mensaje 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.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Eliminar item de una lista

Mensaje 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"!
Responder