Página 1 de 1

_GUICtrlListView_Scroll y _GUICtrlListView_SetItemFocused

Publicado: 12 Abr 2012, 08:29
por avechuche
Bueno tengo 2 problemas con estas funciones.

La primera "_GUICtrlListView_Scroll". Anda perfectamente si la uso una sola vez, ahora si la quiero usar 2 o más veces, no hay caso no funciona, por ejemplo.

Código: Seleccionar todo

_GUICtrlListView_Scroll($ListView, 0, 500)
Mueve el Scroll hasta el pixel 500 en el eje Y del ListView.

Ahora si uso lo siguiente

Código: Seleccionar todo

_GUICtrlListView_Scroll($ListView, 0, 500)
_GUICtrlListView_Scroll($ListView, 0, 0)
Con la intención de que vuelva al inicio del ListView, no funciona -.-

_GUICtrlListView_SetItemFocused este es más raro todavia.
En la ayuda anda perfectamente, lo quiero usar en mi scrip y no me deja.

Código: Seleccionar todo

	For $a = 0 To _GUICtrlListView_GetItemCount($hListView)

		$Item = _GUICtrlListView_GetItemTextString($hListView, $a)
		$Item = StringSplit($Item, "|")

		If $Item[3] = $readCoord_X Then
			If $Item[4] = $readCoord_Y Then
				_GUICtrlListView_SetItemFocused($hListView, $a)
				SetError(1)
				ExitLoop
			EndIf
		EndIf

	Next
No me selecciona el item, ahora si uso _GUICtrlListView_SetItemSelected (No es lo mismo, casi, pero no) anda, pero se puede saber porque con el otro no anda?

Re: _GUICtrlListView_Scroll y _GUICtrlListView_SetItemFocuse

Publicado: 12 Abr 2012, 08:59
por Ximorro
_GUICtrlListView_Scroll mueve el control la cantidad de pixels que le dices, como le estás diciendo que se mueva cero pixeles se queda donde está.
No le dices la posición, sino cuánto tiene que moverse.
Prueba a poner valores negativos, en este caso -500, a ver si vuelve para atrás.

Además ten en cuenta que el modo del ListView cambia el significado de ese valor, según la ayuda en modo Report son líneas, no píxeles.

En la otra duda ¿por qué no haces un GUI con un ListView con algunas líneas para que lo podamos probar? Es un trabajo extra tener que hacer estas cosas nosotros mismos cada vez que resolvemos una duda, para que luego nos funcione perfectamente porque el problema depende del entorno, como pasaba con la duda del mensaje sobre el Listview.
Si no quieres hacernos el código revisa que las funciones _GUICtrlListView_GetItemCount y _GUICtrlListView_GetItemTextString estén funcionando como esperas, igual el problema está antes de _GUICtrlListView_SetItemFocused.

La verdad es que no soy capaz de entender ese código, ¿sacas las coordenadas del contenido del listview? ¿cómo esperas que comprobemos el código si ni siquiera sabemos qué forma tiene el listview, siendo que eso es vital para poder ejecutarlo? A lo mejor lo que está fallando es esa toma de coordenadas, que parece algo compleja pero no muestras.
¡Tenéis que ayudarnos para que os ayudemos!

Re: _GUICtrlListView_Scroll y _GUICtrlListView_SetItemFocuse

Publicado: 12 Abr 2012, 09:20
por avechuche
No se me ocurrio lo del numero negativo.
Cito:

Código: Seleccionar todo

Además ten en cuenta que el modo del ListView cambia el significado de ese valor, según la ayuda en modo Report son líneas, no píxeles.
No entender esta parte (sera la hora?)
Con respecto al FOR, anda perfectamente si uso la funcion _GUICtrlListView_SetItemSelected(), me marca perfectamente el item que quiero, ahora si uso _GUICtrlListView_SetItemFocused(), no funciona, osea no me marca ningun item. Y en el helpfile anda perfecto. Lei por ahi (foro ingles) que a la funcion _GUICtrlListView_SetItemFocused() tenes q pasarle el Handle, pero lo hice y tmp anda, en el helpfile le pasa el id y no el handle y anda.

Lo que hace el FOR, toma las coordenadas de cada linea del listview, donde $Item[3] es la coord X y $Item[4] es la coord Y.
$readCoord_X y $readCoord_Y son las coordenadas que toma de dos input diferentes. Lo que hago es comprar si las 2 coordenadas del listview son iguales a los 2 input, si es asi, que salga del FOR.

No te puedo pasar el code, porque tengo q modificarlo mucho, pasarlo todo seria interminable. Si se te ocurre algo en el aire, mejor, si no lo paso de a poco :)

Edito: Cuando uso _GUICtrlListView_SetItemSelected() me selecciona el item y me lo pinta de un color gris, en la ayuda lo pinta de azul, como si le hiciera clic, porque me pasa esto a mi :(

Re: _GUICtrlListView_Scroll y _GUICtrlListView_SetItemFocuse

Publicado: 12 Abr 2012, 12:30
por Ximorro
Lo de los píxeles o líneas depende del tipo de ListView. Puedes ignorarlo, si te va con píxeles pues ya está. Si algún día te pones a tocar estilos y de repente en vez de 500 píxeles se desplaza 500 líneas pues ya sabes que con esos estilos _GUICtrlListView_Scroll trabaja con líneas. :smt003

Respecto a lo otro no estoy muy de acuerdo con que no has puesto un código funcional porque cuesta mucho recortar el código que tienes. Claro que requiere cierto esfuerzo dejar un GUI con un único ListBox rellenado como ese que tienes, ¡pero es mucho más fácil hacer eso borrando lo que sobra de lo que tienes que empezar a programarlo de cero! Además me es casi imposible programarlo de cero porque tengo que rellenar el listbox de la misma manera que tú, y no tengo tan claro cómo hacerlo.

Así que ya te digo, sin un código más completo me es imposible hacer pruebas. Si dices que con la selección te va bien entonces probablemente lo tienes todo bien. Simplemente piensa que dar foco y seleccionar no es lo mismo, ¿seguro que el item no está recibiendo foco? Además, ¿es eso lo que quieres? ¿no te sirve seleccionar la línea en vez de sólo dar foco sin seleccionar?

Y te está seleccionando en gris seguramente porque el listbox no tiene el foco, puede que tu GUI no tenga el foco o que sí lo tenga pero esté en otro control. Entonces el listbox lo seleccionas pero se pinta gris porque no tiene foco.
Así que seguramente _GUICtrlListView_SetItemFocused está funcionando perfectamente, pero como el ListView no tiene foco no ves el foco del item.