En cuanto al programa MiValenBisi, ayer estuve peleando para poner color a los números de bicicletas libres, según si eran 0, menores o mayores que 5. El ListView lo rellenaba con _GUICtrlListView_AddItem, pero después de buscar maneras de poner color a una celda de la lista, encontrar programas y UDFs, pero no conseguir hacerlo funcionar en mi programa, decidí cambiarlo por GUICtrlCreateListViewItem y así poder dar color (aunque en este caso a toda la línea) con GUICtrlSetBkColor.
He limpiado, ordenado y comentado un poco el código. Os dejo la última versión hasta la fecha, incluyendo las cosillas que me habéis comentado, antes de crear un nuevo tema en el sub-foro de "esScripts".
Aprovecho para preguntar (por no abrir otro tema) ¿qué es y para qué sirve AutoIt3Wrapper? Lo veo en muchos códigos, como, por ejemplo, en alguno de los que ha publicado BasicOS en el tema sobre Autoit Portable.
Código: Seleccionar todo
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=App\Icons\autoitEspanol.ico
#AutoIt3Wrapper_outfile=AutoItPortableES.exe
#AutoIt3Wrapper_UseX64=N
#AutoIt3Wrapper_Res_Description=AutoIt3 Portable
#AutoIt3Wrapper_Res_Fileversion=3.3.6.1
#AutoIt3Wrapper_Res_Field=Website|
#AutoIt3Wrapper_Res_Field=E-Mail|comment at the website
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#AutoIt3Wrapper_Run_Obfuscator=Y
#Obfuscator_Parameters=/SF /SV /OM /CS=0 /CN=0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****¡Un saludo!
Código actualizado de MiValenBisi
|
V
Código: Seleccionar todo
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
; Lee datos de estación de Valenbisi según explicación en la página: http://boozox.net/boozox/api-de-valenbisi-servicio-de-jcdeacaux/
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;
;
; http://www.valenbisi.es/service/stationdetails/num_estacion -> Contiene los datos de la estación "num_estacion" relativos al número de bornetas totales, libres y número de bicicletas libres
;
; http://www.valenbisi.es/service/carto	-> Contiene listado de estaciones con su información (nombre, número, dirección, latitud, longitud,...)
; ---------- Versiones ----------
; 20110213: Guarda posición y dimensiones de ventana, y anchos de columna en archivo .ini para utilizarlo en la siguiente sesión
; 20110225: Corregidos errores con ayuda del foro Autoit en Español: http://www.emesn.com/autoitforum/viewtopic.php?f=12&t=2545
; 20110228: Comprueba si existe conexión a internet
;			Añadidos colores según haya 0, 1 a 4, 5 o más bicicletas
;
#include ".\includes\_XMLDomWrapper.au3"	; Comillas para que busque en relación al directorio del programa. Punto para indicar la carpeta raíz del programa.
;#include ".\includes\LV_Format_include.au3"	; http://www.autoitscript.com/forum/topic/89654-listview-for-every-subitem-set-color-backcol-and-font/
#include <File.au3>
#include <Array.au3>
#include <String.au3>	; Para _StringExplode
#include <Constants.au3>
#include <EditConstants.au3>; Para variables de controles edit
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Global $s_GIF_Report_Activity_Running = @ScriptDir & "\smf_progress_running.gif"
#include "_misfunc.au3"
; ============================ Opciones ============================ ;
Opt("MustDeclareVars", 1) ;Después de los includes porque sino, también se obliga a declarar las variables en éstos, y no siempre están declaradas.
;Opt("GUIResizeMode", 802) ; 802=(2+32+256+512) el control no se moverá durante el cambio de tamaño
Opt("GUIOnEventMode", 1) ; Para tener un evento en cada control
#Region Variables
; ============================ Definición de variables ============================ ;
Global $oXML = ObjCreate("Microsoft.XMLHTTP")
;--- Datos para ventana GUI, posición, tamaño y anchos de columna de ListView ---
Global $TituloGUI = "MiValenBisi (jamaro 2011)"
Global $Ventana_X = -1, $Ventana_Y = -1
Global $Ventana_Ancho = 450, $Ventana_Alto = 325
Global $columnaLV[5] = [50, 175, 65, 65, 65]
Global $columnaLVleida[5]
;--- Colores ---
Global $C_Blanco=0xFFFFFF, $C_Verde=0x00FF00, $C_Amarillo=0xFFFF00, $C_AmarilloClaro=0xF3F781, $C_Rojo=0xFF0000, $C_RojoClaro=0xF78181 ,$C_VerdeClaro=$CLR_MONEYGREEN
Global $defBkColLV = 0xFFFFFF
;--- Para manejo de archivo y lectura de datos de estación ---
Global $sFile, $sFile1, $file1, $fileXML, $sXPath, $direccion_estacion ; Para LeeDatosEstacion()
;--- Mensajes de ayuda ---
Global $MensajeEstaciones = "Los números de estación puede obtenerlos del plano de estaciones de Valenbisi de:" & @CR & "- mapa en papel" & @CR & "- página oficial www.valenbisi.es (pulsando sobre el icono de la estación)" & @CR & "- Página no oficial www.bicivalencia.com (pulsando sobre el icono de la estación)"
Global $MensajeAutor = "Para cualquier sugerencia puede contactar con el autor en: [email protected]"
;--- Utilizadas primero en LeeDatosIni()
Global $archivoini = @ScriptDir & "\" & StringLeft(@ScriptName, StringLen(@ScriptName) - 4) & "_estaciones.ini"
Global $num_estacion[1][1] ;Estación, Dirección, BicisLibres, BornetasLibres, BornetasTotales (Después se ReDimensiona en la función correspondiente)
Global $texto_estaciones, $estaciones
;--- Utilizadas primero en Principal()
Global $datoslibres, $datosestacion
LeeDatosIni() ; Lectura de datos de archivo .ini (dimensiones de ventana, anchos de columna de listview, número de estación a
;_ArrayDisplay($num_estacion)
; Crea Interfaz Gráfica de Usuario (GUI)
Global $gui_main = GUICreate($TituloGUI, $Ventana_Ancho, $Ventana_Alto, $Ventana_X, $Ventana_Y, $WS_SIZEBOX)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_Principal_Cierra")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")
Global $hListView = GUICtrlCreateListView("", 2, 2, $Ventana_Ancho - 10, $Ventana_Alto - 100)
_GUICtrlListView_SetUnicodeFormat($hListView, False)
GUICtrlSetResizing($hListView, $GUI_DOCKAUTO)
Global $CajaTextoMensaje = GUICtrlCreateEdit("Utilice el menú contextual (botón derecho del ratón) para opciones", 2, $Ventana_Alto - 80, $Ventana_Ancho - 10, 20, $ES_CENTER + $ES_READONLY)
GUICtrlSetResizing($CajaTextoMensaje, $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKHCENTER)
Global $BActualizar = GUICtrlCreateButton("Actualizar", 2, $Ventana_Alto - 50, $Ventana_Ancho - 10, 20)
GUICtrlSetResizing($BActualizar, $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKHCENTER)
GUICtrlSetOnEvent($BActualizar, "BActualizar")
GUISetState()
; Añade columnas al ListView
_GUICtrlListView_AddColumn($hListView, "Estación", $columnaLVleida[0])
_GUICtrlListView_AddColumn($hListView, "Dirección", $columnaLVleida[1])
_GUICtrlListView_AddColumn($hListView, "Bicis Libres", $columnaLVleida[2])
_GUICtrlListView_AddColumn($hListView, "Bornetas Libres", $columnaLVleida[3])
_GUICtrlListView_AddColumn($hListView, "Bornetas Totales", $columnaLVleida[4])
; Crea menú contextual
Global $contextmenu = GUICtrlCreateContextMenu($hListView)
Global $ItemEditarEstaciones = GUICtrlCreateMenuItem("Editar estaciones", $contextmenu)
GUICtrlSetOnEvent(-1, "EditaEstaciones")	; define el evento
GUICtrlCreateMenuItem("", $contextmenu) ; separator
Global $infoitem = GUICtrlCreateMenuItem("Info", $contextmenu)
GUICtrlSetOnEvent(-1, "MuestraInfo")	; define el evento
principal()	; ejecuta la función principal
While 1
	;
WEnd
; ============= FUNCIONES =============
;-------------------------------------------------------------------------------------------
; Lectura de datos del archivo .ini (dimensiones y posición de ventana, anchos de columnas de listview y números de estaciones)
;-------------------------------------------------------------------------------------------
Func LeeDatosIni()
	If FileExists($archivoini) Then ; Si existe el archivo .ini
		;MsgBox(0,"Aviso","Existe el archivo .ini")
		$Ventana_X = IniRead($archivoini, "Configuracion", "Ventana_X", 400)
		$Ventana_Y = IniRead($archivoini, "Configuracion", "Ventana_Y", 325)
		$Ventana_Ancho = IniRead($archivoini, "Configuracion", "Ventana_Ancho", -1)
		$Ventana_Alto = IniRead($archivoini, "Configuracion", "Ventana_Alto", -1)
		cw("Datos de ventana: " & $Ventana_X & "," & $Ventana_Y & "," & $Ventana_Ancho & "," & $Ventana_Alto)
	Else
		MsgBox(0, "Aviso", "No existe el archivo .ini necesario." & @CR & @CR & "A continuación se le pedirá que introduzca los números de estación deseados, separados por comas." & @CR & @CR & $MensajeEstaciones)
		CreaIni()
	EndIf
	Local $TextoCWcolumnas = ""
	$texto_estaciones = IniRead($archivoini, "Estaciones", "num", "NO_HAY")
	If $texto_estaciones = "NO_HAY" Then
		MsgBox(0, "Aviso", "No existe ninguna estación en el archivo .ini" & @CR & @CR & "A continuación se le pedirá que introduzca los números de estación deseados, separados por comas." & @CR & @CR & $MensajeEstaciones)
		CreaIni()
		$texto_estaciones = IniRead($archivoini, "Estaciones", "num", "NO_HAY")
	EndIf
	cw("Estaciones leidas: " & $texto_estaciones)
	$estaciones = _StringExplode($texto_estaciones, ",", 0)
	For $i = 0 To 4
		$columnaLVleida[$i] = IniRead($archivoini, "Configuracion", "Columna" & $i, $columnaLV[$i])
		$TextoCWcolumnas = $TextoCWcolumnas & " " & $columnaLVleida[$i]
	Next
	cw("Ancho Columnas: " & $TextoCWcolumnas)
	ReDim $num_estacion[UBound($estaciones)][5] ;Estación, Dirección, BicisLibres, BornetasLibres, BornetasTotales
	For $i = 0 To UBound($estaciones) - 1
		$num_estacion[$i][0] = $estaciones[$i] ; Estación
		$num_estacion[$i][1] = 0 ; Dirección
		$num_estacion[$i][2] = 0 ; BicisLibres
		$num_estacion[$i][3] = 0 ; BornetasLibres
		$num_estacion[$i][4] = 0 ; BornetasTotales
	Next
EndFunc   ;==>LeeDatosIni
;-------------------------------------------------------------------------------------------
; Crea archivo .ini con los números de estaciones que introduce el usuario
;-------------------------------------------------------------------------------------------
Func CreaIni($texto_estaciones = "")
	While 1
		Local $estaciones_usuario = InputBox("Nuevas estaciones", "Introduzca las estaciones que desea mostrar, separadas por coma. (ej: 173,172,143)" & @CR & @CR & $MensajeEstaciones & @CR & @CR, $texto_estaciones, " M", 500, 250) ; M para que necesariamente se introduzca algún valor
		If StringRegExp($estaciones_usuario, "[^0-9|,]", 0) = 1 Then ; si no se introducen sólo digitos y comas
			mb("Se ha introducido caracteres no válidos." & @CR & "Sólo puede introducir números y comas." & @CRLF)
			$texto_estaciones = $estaciones_usuario ; Pone en $texto_estaciones el texto introducido para que pueda ser modificado
		Else
			cw("Los datos introducidos en el INPUTBOX son correctos: " & $estaciones_usuario & @CRLF)
			If $estaciones_usuario = "" Then
				cw("Se ha cancelado la operación de modificar estaciones. Se saldrá de la operación.")
				ExitLoop
			Else
				; Elimina posibles comas al inicio y/o final del texto introducido
				While StringInStr($estaciones_usuario, ",,") ;mientras encuentre comas repetidas
					$estaciones_usuario = stringreplace($estaciones_usuario, ",,", ",") ;reemplaza ,, por , en caso de que se haya introducido repetida
				WEnd
				If StringLeft($estaciones_usuario, 1) = "," Then $estaciones_usuario = StringRight($estaciones_usuario, StringLen($estaciones_usuario) - 1)
				If StringRight($estaciones_usuario, 1) = "," Then $estaciones_usuario = StringLeft($estaciones_usuario, StringLen($estaciones_usuario) - 1)
				IniWrite(@ScriptDir & "\" & StringLeft(@ScriptName, StringLen(@ScriptName) - 4) & "_estaciones.ini", "Estaciones", "Num", $estaciones_usuario)
				ExitLoop
			EndIf
		EndIf
	WEnd
EndFunc   ;==>CreaIni
Func principal()
	Local $ColorListViewActual
	$ColorListViewActual = $C_Blanco ; Define el blanco como color de fondo del ListView
	GUICtrlSetBkColor($hListView, $C_VerdeClaro) ; Cambia el color de fondo a verde
	GUICtrlSetData($BActualizar, "... Actualizando datos de estaciones ...")	; Cambia el texto del botón
	For $a = 0 To UBound($estaciones) - 1 ; Número de estaciones
		$datoslibres = leelibres($num_estacion[$a][0])
		cw("Leido datoslibres de " & $num_estacion[$a][0])
		$datoslibres = StringSplit($datoslibres, ",")
		;_ArrayDisplay($datoslibres)
		$datosestacion = leedatosestacion($num_estacion[$a][0])
		cw("Leido 'datosestacion' de " & $num_estacion[$a][0])
		$num_estacion[$a][1] = $datosestacion	; Dirección de estación
		$num_estacion[$a][2] = $datoslibres[1]	; Bicis libres
		$num_estacion[$a][3] = $datoslibres[2]	; Bornetas libres
		$num_estacion[$a][4] = $datoslibres[3]	; Bornetas totales
		cw("Estación: " & $num_estacion[$a][0] & " - " & "Dirección: " & $num_estacion[$a][1] & " - Bicis libres / Bornetas libres / Bornetas totales: " & $num_estacion[$a][2] & " / " & $num_estacion[$a][3] & " / " & $num_estacion[$a][4])
		;_GUICtrlListView_AddItem($hListView, $num_estacion[$a][0], 0)	; Número de estación en la primera (0+1) columna
		GUICtrlCreateListViewItem($num_estacion[$a][0],$hListView)	; Con función propia de Autoit para que se pueda cambiar el color facilmente
		_GUICtrlListView_AddSubItem($hListView, $a, $num_estacion[$a][1], 1)	; Dirección de estación en la segunda (1+1) columna
		_GUICtrlListView_AddSubItem($hListView, $a, $num_estacion[$a][2], 2)	; Bicis libres en la tercera (2+1) columna
		_GUICtrlListView_AddSubItem($hListView, $a, $num_estacion[$a][3], 3)	; Bornetas libres en la cuarta (3+1) columna
		_GUICtrlListView_AddSubItem($hListView, $a, $num_estacion[$a][4], 4)	; Bornetas totales en la quinta (4+1) columna
		;#cs
			Select
				Case $num_estacion[$a][2]=0
					cw("No quedan bicicletas en la estación " & $num_estacion[$a][0] & " - " & $direccion_estacion)
						GUICtrlSetBkColor(-1, $C_RojoClaro)
					Case $num_estacion[$a][2]>=1 and $num_estacion[$a][2]<5
					cw("Quedan menos de 5 bicicletas en la estación " & $num_estacion[$a][0] & " - " & $direccion_estacion)
						GUICtrlSetBkColor(-1, $C_AmarilloClaro)
					Case $num_estacion[$a][2]>=5
					cw("Hay 5 o más bicicletas en la estación " & $num_estacion[$a][0] & " - " & $direccion_estacion)
						GUICtrlSetBkColor(-1, $C_VerdeClaro)
			EndSelect
		;#ce
	Next
	GUICtrlSetBkColor($hListView, $ColorListViewActual) ; Vuelve a poner el color de fondo original
	GUICtrlSetData($BActualizar, "Actualizar")	; Vuelve a poner el texto del botón
	WinSetTitle($gui_main, "", $TituloGUI & " - Última actualización de datos (" & @HOUR & ":" & @MIN & ":" & @SEC & ")")	; Muestra en la barra de título de la ventana la hora de la última lectura/actualización de datos
	;_ArrayDisplay($num_estacion,"Estaciones del entorno")
	;_GUICtrlListView_AddArray($hListView, $num_estacion)
EndFunc   ;==>principal
;-------------------------------------------------------------------------------------------
; Lectura de datos (bicicletas libres, bornetas libres, bornetas totales) de una estación num_estacion
;-------------------------------------------------------------------------------------------
Func leelibres($num_estacion)
	SiHayInternet() ; Comprueba si hay conexión a internet
	$oXML.Open("GET", "http://www.valenbisi.es/service/stationdetails/" & $num_estacion, 0)
	$oXML.Send
	$sFile = _TempFile(@TempDir, '~', '.xml')
	FileWrite($sFile, $oXML.responseText)
	Local $file = FileRead($sFile)
	$file = StringReplace($file, @LF, '')
	$file = StringSplit($file, @CR, 1)
	Local $Valenbisi_disponibles = XMLget($file, 'station\available')
	Local $Valenbisi_libres = XMLget($file, 'station\free')
	Local $Valenbisi_totales = XMLget($file, 'station\total')
	Local $DisponibilidadEstacion = "Estación / Bicis / Bornetas libres / Bornetas totales: " & $num_estacion & " / " & $Valenbisi_disponibles & " / " & $Valenbisi_libres & " / " & $Valenbisi_totales
	cw($DisponibilidadEstacion&@CRLF)
	FileDelete($sFile)
	return ($Valenbisi_disponibles & "," & $Valenbisi_libres & "," & $Valenbisi_totales)
EndFunc   ;==>leelibres
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
; Lectura de datos (dirección) una estación num_estacion
;-------------------------------------------------------------------------------------------
Func LeeDatosEstacion($num_estacion)
	SiHayInternet() ; Comprueba si hay conexión a internet
	$oXML.Open("GET", "http://www.valenbisi.es/service/carto", 0)
	$oXML.Send
	$sFile1 = _TempFile(@TempDir, '~', '.xml')
	FileWrite($sFile1, $oXML.responseText)
	$file1 = FileRead($sFile1)
	$fileXML = _XMLLoadXML($file1)
	$sXPath = '//carto/markers/marker[@number="' & $num_estacion & '"]'
	$direccion_estacion = _XMLGetAttrib($sXPath, 'address')
	cw("Valor obtenido con _XMLGetAttrib: " & $direccion_estacion & @CRLF & " Error: " & @error)
	FileDelete($sFile1)
	Return $direccion_estacion
EndFunc   ;==>LeeDatosEstacion
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
; Comprobación de conexión a internet
;-------------------------------------------------------------------------------------------
Func SiHayInternet()
	Local $ping, $MsgBoxConexionInternet
	While 1
		$ping = Ping("www.valenbisi.es")
		If $ping > 0 Then ; Si hay respuesta del PING
			ExitLoop
		Else ; Si no hay respuesta del PING
			$MsgBoxConexionInternet = MsgBox(53, "Error de Conexión a Internet", "Para que el programa funcione es necesario tener conexión a internet." & @CRLF & @CRLF & "Pulse REINTENTAR cuando tenga la conexión a internet activada, o CANCELAR para salir del programa.")
			Select
				Case $MsgBoxConexionInternet = 4 ;Reintentar
					ContinueLoop ; Continúa intentándolo
				Case $MsgBoxConexionInternet = 2 ;Cancelar
					Exit ; Sale del programa
			EndSelect
		EndIf
	WEnd
EndFunc   ;==>SiHayInternet
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
; http://www.autoitscript.com/forum/topic/97466-xml-read/
Func XMLget($file, $Path); XMLget($file,'adc_database\currentconditions\realfeel')
	Local $lastline, $hstart, $hstarta, $end, $ends, $return
	$Path = StringSplit($Path, '/\|', 0)
	$lastline = 0
	For $lvl = 1 To $Path[0] Step 1
		For $line = $lastline To $file[0] Step 1
			$lastline = $line
			$hstart = StringInStr($file[$line], '<' & $Path[$lvl] & '>', 0)
			$hstarta = StringInStr($file[$line], '<' & $Path[$lvl] & ' ', 0)
			If $hstart Or $hstarta Then
				If $lvl == $Path[0] Then
					If $hstart Then
						$end = StringInStr($file[$line], '</' & $Path[$lvl] & '>', 0)
						If $end Then
							$hstart = $hstart + StringLen('<' & $Path[$lvl] & '>')
							Return StringMid($file[$line], $hstart, $end - $hstart)
						EndIf
					EndIf
					If $hstarta Then
						$end = StringInStr($file[$line], '/>', 0)
						If $end Then
							$hstarta = $hstarta + StringLen('<' & $Path[$lvl] & ' ')
							$return = StringMid($file[$line], $hstarta, $end - $hstarta)
							Return $return
						EndIf
						$ends = StringInStr($file[$line], '>', 0)
						If $ends Then
							$hstart = $ends + 1
							$end = StringInStr($file[$line], '</' & $Path[$lvl] & '>', 0)
							If $end Then
								$return = StringMid($file[$line], $hstart, $end - $hstart)
								Return $return
							EndIf
						EndIf
					EndIf
				EndIf
				ContinueLoop 2
			EndIf
		Next
		If $line == $file[0] Then ExitLoop
	Next
	Return 'not found'
EndFunc   ;==>XMLget
Func EditaEstaciones()
	;$texto_estaciones=IniRead(@scriptdir&"\valenbisi_estaciones.ini","Estaciones","num","NO_HAY")
	CreaIni($texto_estaciones)
	BActualizar()
EndFunc   ;==>EditaEstaciones
Func MuestraInfo()
	MsgBox(0, "Información", "Esta utilidad permite mostrar la situación actual de las estaciones cuyos números se encuentren almacenados en el archivo .ini" & @CR & @CR & "Puede introducir nuevas estaciones o modificar la existentes con 'Editar estaciones' del menú contextual."& @CR & @CR & "Mediante colores se muestran las estaciones que no tienen bicicletas libres (rojo), estaciones con menos de 5 bicicletas libres (amarillo) y estaciones con 5 o más bicicletas libres (verde)." & @CR & @CR & $MensajeEstaciones & @CR & @CR & $MensajeAutor)
EndFunc   ;==>MuestraInfo
Func BActualizar()
	LeeDatosIni() ; Lectura de datos de archivo .ini
	_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView))
	principal()
EndFunc   ;==>BActualizar
Func SpecialEvents()
	Select
		Case @GUI_CtrlId = $GUI_EVENT_CLOSE
			;MsgBox(0, "Close Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
			GUISetState(@SW_HIDE, @GUI_WinHandle) ; Esconde la ventana
		Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
			;MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
		Case @GUI_CtrlId = $GUI_EVENT_RESTORE
			;MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
	EndSelect
EndFunc   ;==>SpecialEvents
Func GUI_Principal_Cierra()
	Local $size = WinGetPos($gui_main) ; Obtiene las coordenadas de la ventana
	;MsgBox(0, "Coordenadas de ventana $gui_main (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])
	IniWrite($archivoini, "Configuracion", "Ventana_X", $size[0])
	IniWrite($archivoini, "Configuracion", "Ventana_Y", $size[1])
	IniWrite($archivoini, "Configuracion", "Ventana_Ancho", $size[2])
	IniWrite($archivoini, "Configuracion", "Ventana_Alto", $size[3])
	For $i = 0 To 4
		$columnaLV[$i] = _GUICtrlListView_GetColumnWidth($hListView, $i)
		IniWrite($archivoini, "Configuracion", "Columna" & $i, $columnaLV[$i])
		cw("Columna " & $i & " ancho: " & $columnaLV[$i])
	Next
	cw("Borrando: " & $sFile)
	FileDelete($sFile)
	Exit
EndFunc   ;==>GUI_Principal_Cierra


 (Pensaba en si sería capaz de hacer algo similar para el móvil (aunque ya hay aplicaciones muy buenas para el tema de las bicis públicas que hasta te indican las distancias a las que se encuentran respecto a tu móvil, y qué dirección tomar para llegar hasta ellas).
 (Pensaba en si sería capaz de hacer algo similar para el móvil (aunque ya hay aplicaciones muy buenas para el tema de las bicis públicas que hasta te indican las distancias a las que se encuentran respecto a tu móvil, y qué dirección tomar para llegar hasta ellas). )
 ) . El caso es que para algo así se suelen usar métodos como el que se usa en la función StringFormat, poniendo en los archivos de lenguaje los formatos correspondientes y luego formateándolos con esa función.
 . El caso es que para algo así se suelen usar métodos como el que se usa en la función StringFormat, poniendo en los archivos de lenguaje los formatos correspondientes y luego formateándolos con esa función. 
 
 
 