;====================================================================================================== ; Programa .....: MiBiciPublica ; Autor ........: jamaro (marzo 2011) ; Correo-e .....: ja_ma_ro@hotmail.com ; Descripcion ..: Muestra datos sobre estaciones de bicicletas públicas de la empresa jcdecaux ; ; Historia .....: El sistema de bicicletas públicas de jcdecaux (http://www.jcdecaux.com/en/Innovation-Design/Cyclocity-R) ; se ha implantado en varias ciudades europeas, entre ellas Santander, Sevilla y Valencia. ; ; A raíz del uso de este servicio público en Valencia, y tras leer el artículo publicado en ; http://boozox.net/boozox/api-de-valenbisi-servicio-de-jcdeacaux/ ; donde se explica cómo obtener los datos de las distintas estaciones de Valencia (www.valenbisi.es) ; empecé a hacer una utilidad con Autoit, que mostrara, únicamente, los datos de las estaciones ; que utilizo habitualmente, sin necesidad de entrar a la página oficial, y otras, que muestran ; un mapa con todas las estaciones disponibles. ; Después surge la idea de facilitar el programa a amigos y usuarios del foro de www.Autoit.es ; lo que implica hacerlo un poco más abierto, y posibilitar que el usuario pueda configurar, ; entre otras cosas, los números de las estaciones que precisa monitorizar. ; ; Intenciones ..: - Crear un GUI para la personalización (números de estación, colores,...) ; - Configurar en el archivo .ini las direcciones de las páginas web de servicio de bicicletas, para dejarlo abierto al usuario ; - Crear archivo externo de idioma, para que el usuario pueda traducir el programa a su propio idioma ; - Buscar estaciones por el nombre/dirección ; ;------------------------------------------------------------------------------------------- ; Páginas utilizadas para la obtención de datos ;------------------------------------------------------------------------------------------- ; http://WEBSERVICIO/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://WEBSERVICIO/service/carto -> Contiene listado de estaciones con su información (nombre, número, dirección, latitud, longitud,...) ; http://www.bicicas.es/estado/EstadoActual.asp -> Contiene listado de estaciones e información de bicicletas de Castellón (distinto sistema al de JCDECAUX) ; ;====================================================================================================== ;------------------------------------------------------------------------------------------- #Region Includes ; ============================ Includes ============================ ; #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\_misfunc.au3" ; Funciones personales (mb, cw, ib) #include #include #include ; Para manejo de matrices #include ; Para _StringExplode #include #include ; Para variables de controles edit #include #include ; Para opciones de combo (P.ej: Evitar que se pueda editar el texto del combo) #include ; Para opciones de botones (P.ej: Poner icono en botón) #include #include ; Para _ChooseColor #include ;Para manejo de Listas ;#include ".\includes\LV_Format_include.au3" ; http://www.autoitscript.com/forum/topic/89654-listview-for-every-subitem-set-color-backcol-and-font/ ; Permitir que sólo se ejecute una vez el programa If _Singleton(@ScriptName, 1) = 0 Then MsgBox(0, @ScriptName, "Existe otra instancia del programa ejecutándose ya. No está permitido utilizar varias copias de este programa a la vez.") Exit EndIf #EndRegion Includes #Region Opciones y Variables ; ============================ 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 ; ============================ Definición de variables ============================ ; Global $oXML = ObjCreate("Microsoft.XMLHTTP") ;--- Datos para ventana GUI, posición, tamaño y anchos de columna de ListView --- Global $Autor="jamaro" Global $TituloGUI = StringLeft(@ScriptName,StringLen(@scriptname)-4) &" ("&$autor&"2011)" Global $Ventana_X = -1, $Ventana_Y = -1 ; Situación de ventana por defecto (centrada) Global $Ventana_Ancho = 450, $Ventana_Alto = 325 ; Ancho/Alto de ventana por defecto Global $columnaLV[5] = [50, 175, 65, 65, 65] ; Anchos de columna por defecto de lista Global $columnaLVleida[5] ; Anchos de columna de lista leidos en archivo .ini ;--- Colores --- Global $C_Blanco=0xFFFFFF, $C_Verde=0x00FF00, $C_Amarillo=0xFFFF00, $C_AmarilloClaro=0xF3F781, $C_Rojo=0xFF0000, $C_RojoClaro=0xF78181 ,$C_VerdeClaro=$CLR_MONEYGREEN,$C_Azul=0x0000FF Global $ColorFondo1, $ColorFondo2, $ColorTramo1, $ColorTramo2, $ColorTramo3 Global $defBkColLV = 0xFFFFFF ;--- Para manejo de archivo y lectura de datos de estación --- Global $sFile, $sFile1, $file1, $fileXML, $sXPath, $direccion_estacion ; Para LeeDatosEstacion() Global $XMLyaCreado=0 ; Para LeeDatosEstación. Si es 0, crea archivo temporal con XML, sino, no lo crea. Global $DatosCastellonCargados=0 Global $httpdirCast, $sDataCast, $nBytesReadCast,$DatosLeidosCast,$dDatosCastellon ; Para datos de Bicicletas de Castellón ;--- Utilizadas primero en LeeDatosIni() ;Global $archivoini = @ScriptDir & "\" & StringLeft(@ScriptName, StringLen(@ScriptName) - 4) & "_estaciones.ini" Global $archivoini = @ScriptDir & "\" & StringLeft(@ScriptName, StringLen(@ScriptName) - 4) & ".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 Global $TextoCWcolumnas = "" Global $haydatosenini=0 ; Marcador para indicar si existe(1) o no(0) datos en archivo .ini ;--- Utilizadas primero en Principal() Global $datoslibres, $datosestacion Global $NumBicisLibresTramo1=0, $NumBicisLibresTramo2=5 ; Intervalos para mostrar distintos colores según números de bicicletas libres Global $webServicioBicis="Valencia [www.valenbisi.es]" Global $webServicioBicisLeida, $webServicioBicisLeidaCompleta Global $webServiciosDisponibles="España - Valencia [www.valenbisi.es]|España - Castellón [www.bicicas.es]|España - Sevilla [www.sevici.es]|España - Santander [www.tusbic.es]|France - París [www.velib.paris.fr]|France - Amiens [www.velam.amiens.fr]|France - Aix-en-Provence [www.vhello.fr]|France - Besançon [www.velocite.besancon.fr]|France - Lyon [www.velov.grandlyon.com]|France - Nancy [www.velostanlib.fr]|France - Marseille [www.levelo-mpm.fr]|France - Mulhouse [www.velocite.mulhouse.fr]|France - Nantes [www.bicloo.nantesmetropole.fr]|France - Rouen [cyclic.rouen.fr]|France - Toulouse [www.velo.toulouse.fr]|France - Cergy Pontoise [www.velo2.cergypontoise.fr]|France - Créteil [www.cristolib.fr]|België - Bruselas [en.villo.be]|Österreich - Brisbane [www.citycycle.com.au]|Ireland - Dublin [www.dublinbikes.ie]|Sverige - Göteborg [www.goteborgbikes.se]|Lëtzebuerg [www.veloh.lu]|Nippon-koku - Toyama [www.cyclocity.jp]" ;--- Mensajes de ayuda --- Global $MensajeEstaciones1 = "Los números de estación puede obtenerlos del plano de estaciones de las páginas/mapas oficiales que se proporciona en cada ciudad." Global $MensajeEstaciones2 = "Puede conocer el número de estación pulsando sobre el icono de la estación en el mapa." Global $MensajeEstaciones3 = "En VALENCIA, también está disponible la página no oficial www.bicivalencia.com" Global $MensajeEstaciones = $MensajeEstaciones1 & @CR & $MensajeEstaciones2 & @CR & @CR & $MensajeEstaciones3 Global $MensajeEstaciones4 = "Actualmente el programa puede monitorizar las estaciones de las siguientes ciudades:" Global $MensajeEstaciones5 = StringReplace($webServiciosDisponibles,"|",@crlf) Global $MensajeAutor = "Para cualquier sugerencia puede contactar con el autor en: ja_ma_ro@hotmail.com" #EndRegion Opciones y Variables ; ============================ Inicio ============================ ; LeeDatosIni() ; Lectura de datos de archivo .ini antes de crear el GUI (dimensiones de ventana, anchos de columna de listview, número de estación, colores,...) #Region GUI Principal ; Crea Interfaz Gráfica de Usuario (GUI) Global $GUI_Principal = 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 $E_CajaEstaciones=GUICtrlCreateLabel("Estaciones",2,2,$Ventana_Ancho/2-5,20) ;~ Global $CajaEstaciones = GUICtrlCreateInput("",2,20,$Ventana_Ancho/2-5,20) ;~ GUICtrlSetTip(-1,"Números de estaciones que se monitorizan, separados por comas") ;~ GUICtrlSetOnEvent(-1,"ActualizaEstacionesIni") ;~ Global $E_CajaWebServicio=GUICtrlCreateLabel("Servicio Web",$Ventana_Ancho/2,2,$Ventana_Ancho- ($Ventana_Ancho/2)-10,20) ;~ Global $CajaWebServicio=GUICtrlCreateCombo($webServicioBicisLeidaCompleta, $Ventana_Ancho/2, 20, $Ventana_Ancho - ($Ventana_Ancho/2)-10, 20,$CBS_DROPDOWNLIST) Global $E_CajaWebServicio=GUICtrlCreateLabel("Servicio Web",2,2,$Ventana_Ancho- ($Ventana_Ancho/2)-10,20) Global $CajaWebServicio=GUICtrlCreateCombo($webServicioBicisLeidaCompleta, 2, 20, $Ventana_Ancho - 60, 20,$CBS_DROPDOWNLIST) GUICtrlSetTip(-1,"Desplegable con las ciudades soportadas y sus páginas oficiales.") GUICtrlSetFont(-1, -1, 600, -1) GUICtrlSetColor(-1,$C_Azul) GUICtrlSetData(-1, $webServiciosDisponibles) GUICtrlSetOnEvent(-1, "CambiaWebServicio") Global $btnConfig = GUICtrlCreateButton("", $Ventana_Ancho-50, 2, 40, 40, $BS_ICON) GUICtrlSetImage(-1, @WindowsDir & "\System32\shell32.dll", -166, 1) ; Valor en negativo para indicar el número de índice del icono, sino lo toma como el nombre del icono GUICtrlSetOnEvent(-1, "ConfiguraOpciones") Global $hListView = GUICtrlCreateListView("", 2, 45, $Ventana_Ancho - 10, $Ventana_Alto - 140) _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") ; 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 Global $ItemEditarColores = GUICtrlCreateMenuItem("Editar colores", $contextmenu) GUICtrlSetOnEvent(-1, "EditaColores") ; define el evento GUICtrlCreateMenuItem("", $contextmenu) ; separador Global $infoitem = GUICtrlCreateMenuItem("Info", $contextmenu) GUICtrlSetOnEvent(-1, "MuestraInfo") ; define el evento cw("----------> Se muestra el GUI") GUISetState() #EndRegion GUI Principal #Region GUI ConfiguraOpciones ; Crea Interfaz Gráfica de Usuario (GUI) para Opciones Local $size = WinGetPos($GUI_Principal) ; Obtiene las coordenadas de la ventana principal #Region ### START Koda GUI section ### Form=C:\Documents and Settings\Usuario\Mis documentos\Javier\AutoIt_Archivos\_XMLDomWrapper\MiValenbisi\MiBici_Opciones.kxf ;Global $GUI_ConfiguraOpciones = GUICreate("Configura Opciones", 386, 319, 192, 114) Global $GUI_ConfiguraOpciones = GUICreate("Configura Opciones", 386,319,$size[0]+20, $size[1]+20) ;Pone la ventana en la posición del GUI_Principal +20,+20 GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_ConfiguraOpcionesCierra") GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents") Global $I_NumEst = GUICtrlCreateInput("I_NumEst", 128, 24, 225, 21) Global $E_NumEst = GUICtrlCreateLabel("Número Estaciones", 24, 24, 96, 17) Global $E_BicMin1 = GUICtrlCreateLabel("Bicicletas mínimas", 24, 72, 91, 17) Global $I_BicMin1 = GUICtrlCreateInput("0", 128, 72, 73, 21) Global $I_BicMin2 = GUICtrlCreateInput("5", 128, 96, 73, 21) Global $GrupoColores = GUICtrlCreateGroup("Colores de ventana gráfica", 16, 136, 353, 169) ; Abre grupo Global $I_Col1 = GUICtrlCreateInput("Fondo estado espera", 40, 168, 273, 21) Global $I_Col2 = GUICtrlCreateInput("Fondo durante actualización de datos", 40, 192, 273, 21) Global $I_Col3 = GUICtrlCreateInput("Número mínimo de bicicletas", 40, 216, 273, 21) Global $I_Col4 = GUICtrlCreateInput("Menos de N bicicletas libres", 40, 240, 273, 21) Global $I_Col5 = GUICtrlCreateInput("Más de N bicicletas libres", 40, 264, 273, 21) Global $B_Col1 = GUICtrlCreateButton("...", 320, 168, 27, 17, $WS_GROUP) Global $B_Col2 = GUICtrlCreateButton("...", 320, 192, 27, 17, $WS_GROUP) Global $B_Col3 = GUICtrlCreateButton("...", 320, 216, 27, 17, $WS_GROUP) Global $B_Col4 = GUICtrlCreateButton("...", 320, 240, 27, 17, $WS_GROUP) Global $B_Col5 = GUICtrlCreateButton("...", 320, 264, 27, 17, $WS_GROUP) GUICtrlCreateGroup("", -99, -99, 1, 1) ; Cierra grupo Global $E_BicMin2 = GUICtrlCreateLabel("Bicicletas tramo2", 24, 96, 84, 17) ;GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUICtrlSetBkColor($I_Col1,$ColorFondo1) GUICtrlSetBkColor($I_Col2,$ColorFondo2) GUICtrlSetBkColor($I_Col3,$ColorTramo1) GUICtrlSetBkColor($I_Col4,$ColorTramo2) GUICtrlSetBkColor($I_Col5,$ColorTramo3) GUISetOnEvent($B_Col1, "EditaColores1") GUISetOnEvent($B_Col2, "EditaColores1") GUISetOnEvent($B_Col3, "EditaColores1") GUISetOnEvent($B_Col4, "EditaColores1") GUISetOnEvent($B_Col5, "EditaColores1") #EndRegion GUI ConfiguraOpciones principal() ; ejecuta la función principal While 1 ; WEnd #Region Funciones ; ========================================================================== ; ; ============================ INICIO Funciones ============================ ; ; ========================================================================== ; ; ==================================================================================================================== ; Nombre .............: LeeDatosIni() ; Descripción ........: Lectura de datos del archivo .ini (dimensiones y posición de ventana, anchos de columnas de listview y números de estaciones) ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func LeeDatosIni() ;--- Comprueba si hay algún archivo_estaciones.ini (utilizado en primeras versiones) y lo renombra a archivo.ini Local $archivoinibuscado=FileFindFirstFile(@ScriptDir & "\" & "*" & "_estaciones.ini") if $archivoinibuscado=-1 Then cw("No existe ningún archivo terminado en '_estaciones.ini'") Else Local $archivoinibuscadonombre=FileFindNextFile($archivoinibuscado) FileMove($archivoinibuscadonombre,$archivoini,0) ; Renombra 0=No sobreescribe cw("Se a renombrado: "&$archivoinibuscadonombre&@CRLF&"Por: "&$archivoini) EndIf ; --- Lee datos de la web de servicio de bicicletas $webServicioBicisLeidaCompleta = IniRead($archivoini, "Configuracion", "WebServicioBicis",$webServicioBicis) $webServicioBicisLeida = ExtraeWebServicio($webServicioBicisLeidaCompleta) ;mb($webServicioBicisLeida,1) ; Muestra la dirección de la página web oficial utilizada en la última ocasión y guardada en el .ini ; --- Lee datos de la ventana (pone valores por defecto si no los puede leer) $Ventana_X = IniRead($archivoini, "Configuracion", "Ventana_X", -1) $Ventana_Y = IniRead($archivoini, "Configuracion", "Ventana_Y", -1) $Ventana_Ancho = IniRead($archivoini, "Configuracion", "Ventana_Ancho", 450) $Ventana_Alto = IniRead($archivoini, "Configuracion", "Ventana_Alto", 325) cw("Datos de ventana: " & $Ventana_X & "," & $Ventana_Y & "," & $Ventana_Ancho & "," & $Ventana_Alto) IniWrite($archivoini, "Configuracion", "Ventana_X", $Ventana_X) IniWrite($archivoini, "Configuracion", "Ventana_Y", $Ventana_Y) IniWrite($archivoini, "Configuracion", "Ventana_Ancho", $Ventana_Ancho) IniWrite($archivoini, "Configuracion", "Ventana_Alto", $Ventana_Alto) ; --- Lee datos anchos de columnas (pone valores por defecto si no los puede leer) For $i = 0 To 4 $columnaLVleida[$i] = IniRead($archivoini, "Configuracion", "Columna" & $i, $columnaLV[$i]) IniWrite($archivoini, "Configuracion", "Columna" & $i, $columnaLVleida[$i]) $TextoCWcolumnas = $TextoCWcolumnas & " " & $columnaLVleida[$i] Next cw("Ancho Columnas: " & $TextoCWcolumnas) ; --- Lee datos de colores (pone valores por defecto si no los puede leer) $ColorFondo1=IniRead($archivoini, "Configuracion", "ColorFondo1",$C_Blanco) $ColorFondo2=IniRead($archivoini, "Configuracion", "ColorFondo2",$C_VerdeClaro) $ColorTramo1=IniRead($archivoini, "Configuracion", "ColorTramo1",$C_RojoClaro) $ColorTramo2=IniRead($archivoini, "Configuracion", "ColorTramo2",$C_AmarilloClaro) $ColorTramo3=IniRead($archivoini, "Configuracion", "ColorTramo3",$C_VerdeClaro) ;--- Comprueba si existe el archivo .ini necesario If FileExists($archivoini) Then ; Si existe el archivo .ini cw("Existe el archivo ini necesario") Else ; Si no existe el archivo .ini ;--- Pregunta si se desea crear el archivo o salir del programa If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer $iMsgBoxAnswer = MsgBox(52,"Aviso","No existe el archivo .ini necesario." & @CR & @CR & "Pulse: "&@CRLF&"[SI] para introducir los datos"&@CRLF&"[NO] para salir del programa") Select Case $iMsgBoxAnswer = 6 ;Sí GuardarValoresDefectoINI() CreaIniEstaciones() Case $iMsgBoxAnswer = 7 ;No Exit EndSelect EndIf $texto_estaciones = IniRead($archivoini, "Estaciones", "num", "NO_HAY") If $texto_estaciones = "NO_HAY" Then $haydatosenini=0 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) CreaIniEstaciones() $texto_estaciones = IniRead($archivoini, "Estaciones", "num", "NO_HAY") Else $haydatosenini=1 cw("Estaciones leidas: " & $texto_estaciones) $estaciones = _StringExplode($texto_estaciones, ",", 0) 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 EndIf EndFunc ;==>LeeDatosIni ; ==================================================================================================================== ; Nombre .............: CreaIniEstaciones() ; Descripción ........: Crea archivo .ini con los números de estaciones que introduce el usuario ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func CreaIniEstaciones($texto_estaciones = "",$input=1) ; 1=Usa InputBox, sino usa la caja de texto del GUI principal While 1 if $input=1 Then Local $estaciones_usuario = InputBox("Edición de estaciones", "Introduzca las estaciones que desea mostrar, separadas por coma. (ej: 173,172,143)" & @CR & @CR & $MensajeEstaciones & @CR & @CR, $texto_estaciones, " M", 500, 200) ; M para que necesariamente se introduzca algún valor Else ;~ Local $estaciones_usuario = guictrlread($CajaEstaciones) Local $estaciones_usuario = guictrlread($I_NumEst) EndIf If $estaciones_usuario = "" Then cw("Se ha cancelado la operación de modificar estaciones. Se saldrá de la operación.") ExitLoop Else 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,0) $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) ; 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($archivoini, "Estaciones", "Num", $estaciones_usuario) ExitLoop EndIf EndIf WEnd LeeDatosIni() ; Vuelve a leer datos del archivo .ini EndFunc ;==>CreaIniEstaciones Func ActualizaEstacionesIni() CreaIniEstaciones("",0) ; 0 para tomar los valores de la caja de texto del GUI principal EndFunc ;~ Func CompruebaSintaxis($cadena_a_comprobar) ;~ If StringRegExp($cadena_a_comprobar, "[^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,0) ;~ $texto_estaciones = $cadena_a_comprobar ; Pone en $texto_estaciones el texto introducido para que pueda ser modificado ;~ Else ;~ cw("Los datos introducidos en el INPUTBOX son correctos: " & $cadena_a_comprobar & @CRLF) ;~ ; Elimina posibles comas al inicio y/o final del texto introducido ;~ While StringInStr($cadena_a_comprobar, ",,") ;mientras encuentre comas repetidas ;~ $cadena_a_comprobar = stringreplace($cadena_a_comprobar, ",,", ",") ;reemplaza ,, por , en caso de que se haya introducido repetida ;~ WEnd ;~ If StringLeft($cadena_a_comprobar, 1) = "," Then $cadena_a_comprobar = StringRight($cadena_a_comprobar, StringLen($cadena_a_comprobar) - 1) ;~ If StringRight($cadena_a_comprobar, 1) = "," Then $cadena_a_comprobar = StringLeft($cadena_a_comprobar, StringLen($cadena_a_comprobar) - 1) ;~ IniWrite($archivoini, "Estaciones", "Num", $cadena_a_comprobar) ;~ EndIf ;~ EndFunc ; ==================================================================================================================== ; Nombre .............: principal() ; Descripción ........: Muestra el GUI con los datos leídos de las estaciones indicadas en el archivo .ini ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func principal() if $haydatosenini=1 Then ; Sólo se ejecuta si se han leido datos de un .ini ;mb("haydatosenini="&$haydatosenini) ;~ GUICtrlSetData($CajaEstaciones,$texto_estaciones) ; Utilizar sólo en caso de que esté el cuadro de texto en el GUI principal GUICtrlSetData($I_NumEst,$texto_estaciones) GUICtrlSetBkColor($hListView, $ColorFondo2) ; Cambia el color de fondo 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 Select Case $num_estacion[$a][2]=$NumBicisLibresTramo1 cw("Quedan "& $NumBicisLibresTramo1 &" bicicletas en la estación " & $num_estacion[$a][0] & " - " & $direccion_estacion & " Color: "& $ColorTramo1) GUICtrlSetBkColor(-1, $ColorTramo1) ; Color en RGB Case $num_estacion[$a][2]>$NumBicisLibresTramo1 and $num_estacion[$a][2]<$NumBicisLibresTramo2 cw("Quedan menos de "& $NumBicisLibresTramo2 &" bicicletas en la estación " & $num_estacion[$a][0] & " - " & $direccion_estacion & " Color: "& $ColorTramo2) GUICtrlSetBkColor(-1, $ColorTramo2) ; Color en RGB Case $num_estacion[$a][2]>=$NumBicisLibresTramo2 cw("Hay "& $NumBicisLibresTramo2 &" o más bicicletas en la estación " & $num_estacion[$a][0] & " - " & $direccion_estacion & " Color: "& $ColorTramo3) GUICtrlSetBkColor(-1, $ColorTramo3) ; Color en RGB EndSelect if $num_estacion[$a][1]="NO EXISTE ESTA ESTACIÓN" then GUICtrlSetBkColor(-1, 0xAAAAAA) ; Color en RGB Next $DatosCastellonCargados=0 ; Para volver a cargar los datos en la próxima actualización o cambio de servicioweb GUICtrlSetBkColor($hListView, $ColorFondo1) ; Vuelve a poner el color de fondo original GUICtrlSetData($BActualizar, "Actualizar") ; Vuelve a poner el texto del botón WinSetTitle($GUI_Principal, "", $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 EndIf ;_ArrayDisplay($num_estacion,"Estaciones del entorno") ;_GUICtrlListView_AddArray($hListView, $num_estacion) EndFunc ;==>principal ; ==================================================================================================================== ; Nombre .............: leelibres() ; Descripción ........: Lectura de datos (bicicletas libres, bornetas libres, bornetas totales) de una estación num_estacion ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: Utilizando XML lee datos de la página http:// $webServicioBicisLeida /service/stationdetails/NUM_ESTACIÓN ; Valencia ...: www.valenbisi.es ; Santander ..: www.tusbic.es ; Sevilla ....: www.servici.es ; ==================================================================================================================== Func leelibres($num_estacion) SiHayInternet() ; Comprueba si hay conexión a internet if $webServicioBicisLeida="www.bicicas.es" Then if $DatosCastellonCargados=0 then BiciCastellon() ; Carga datos de la página web Local $ResultadoEstCastellon=_ArraySearch($dDatosCastellon,$num_estacion,0,0,0,1,0,0) ;if $ResultadoEstCastellon=-1 then mb("Error: "&@error) ;mb("Estación encontrada en la posición: "& $ResultadoEstCastellon) if $ResultadoEstCastellon<>-1 Then ; Si encuentra la estación buscada pone los datos Local $Valenbisi_disponibles=$dDatosCastellon[$ResultadoEstCastellon][2] Local $Valenbisi_libres=$dDatosCastellon[$ResultadoEstCastellon][3] Local $Valenbisi_totales=$dDatosCastellon[$ResultadoEstCastellon][4] Else ; Si no encuentra la estación buscada pone un guión Local $Valenbisi_disponibles="-" Local $Valenbisi_libres="-" Local $Valenbisi_totales="-" EndIf return ($Valenbisi_disponibles & "," & $Valenbisi_libres & "," & $Valenbisi_totales) ;Exit Else $oXML.Open("GET", "http://" & $webServicioBicisLeida & "/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) EndIf EndFunc ;==>leelibres ; ==================================================================================================================== ; Nombre .............: LeeDatosEstacion() ; Descripción ........: Lectura de datos (dirección) una estación num_estacion ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: Utilizando XML lee datos de la página http:// $webServicioBicisLeida /service/carto ; Valencia ...: www.valenbisi.es ; Santander ..: www.tusbic.es ; Sevilla ....: www.servici.es ; ==================================================================================================================== Func LeeDatosEstacion($num_estacion) if $webServicioBicisLeida="www.bicicas.es" Then if $DatosCastellonCargados=0 then BiciCastellon() ; Carga datos de la página web Local $ResultadoEstCastellon=_ArraySearch($dDatosCastellon,$num_estacion,0,0,0,1,0,0) ;if $ResultadoEstCastellon=-1 then mb("Error: "&@error) ;mb("Estación encontrada en la posición: "& $ResultadoEstCastellon) if $ResultadoEstCastellon<>-1 Then ; Si encuentra la estación buscada pone los datos Local $direccion_estacion=$dDatosCastellon[$ResultadoEstCastellon][1] Else ; Si no encuentra la estación buscada pone un guión Local $direccion_estacion="NO EXISTE ESTA ESTACIÓN" ;En el caso de que no exista la estación lo indica EndIf Return $direccion_estacion Else if $XMLyaCreado=0 Then ; Si es 0, todavía no se ha creado el archivo XML temporal SiHayInternet() ; Comprueba si hay conexión a internet $oXML.Open("GET", "http://" & $webServicioBicisLeida & "/service/carto", 0) $oXML.Send $sFile1 = _TempFile(@TempDir, '~', '.xml') FileWrite($sFile1, $oXML.responseText) $file1 = FileRead($sFile1) $fileXML = _XMLLoadXML($file1) $XMLyaCreado=1 ; Cambia a 1 para que no se vuelva a crear el archivo XML temporal EndIf $sXPath = '//carto/markers/marker[@number="' & $num_estacion & '"]' $direccion_estacion = _XMLGetAttrib($sXPath, 'address') if $direccion_estacion ="" then $direccion_estacion = _XMLGetAttrib($sXPath, 'name') ;En el caso de que no exista address, mostrará el nombre de la estación if $direccion_estacion ="-1" then $direccion_estacion = "NO EXISTE ESTA ESTACIÓN" ;En el caso de que no exista la estación lo indica EndIf cw("Valor obtenido con _XMLGetAttrib: " & $direccion_estacion & @CRLF & " Error: " & @error) FileDelete($sFile1) Return $direccion_estacion EndIf EndFunc ;==>LeeDatosEstacion ;------------------------------------------------------------------------------------------- ; ==================================================================================================================== ; Nombre .............: SiHayInternet() ; Descripción ........: Comprobación de conexión a internet ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: Comprueba si hay conexión a internet, haciendo un PING ; ==================================================================================================================== Func SiHayInternet() Local $ping, $MsgBoxConexionInternet While 1 ;$ping = Ping("www.valenbisi.es") $ping = Ping("www.google.com") ;----- PROPUESTA DEL FORO AUTOIT.ES: COMPROBAR DOS O TRES VECES ANTES DE DAR ERROR ;----- PROPUESTA DEL FORO AUTOIT.ES: DAR ERROR TAMBIÉN SI NO SE ENCUENTRA ACTIVA LA PÁGINA DEL XML 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 ;------------------------------------------------------------------------------------------- ; ==================================================================================================================== ; Nombre .............: XMLget($file, $Path) ; Descripción ........: Lee datos de un archivo XML ; Sintaxis ...........: $file: Ruta del archivo xml a leer ; $path: Camino de las etiquetas del XML ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ==================================================================================================================== ;------------------------------------------------------------------------------------------- ; 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], '', 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], '', 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 ; ==================================================================================================================== ; Nombre .............: EditaEstaciones() ; Descripción ........: Llama a la función CreaIniEstaciones() y después actualiza la lista ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func EditaEstaciones() ;$texto_estaciones=IniRead(@scriptdir&"\valenbisi_estaciones.ini","Estaciones","num","NO_HAY") CreaIniEstaciones($texto_estaciones) BActualizar() EndFunc ;==>EditaEstaciones ; ==================================================================================================================== ; Nombre .............: EditaColores() ; Descripción ........: Muestra un cuadro de diálogo de selección de colores para cada elemento del GUI y lo guarda en .ini ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: En futuras versiones se pretende hacer un cuadro de diálogo de opciones, donde estará incluida ; la opción de cambiar los colores de una manera más práctica, sin necesidad de mostrara el cuadro ; para cada elemento, sino únicamente del elemento que se desa modificar ; ; ==================================================================================================================== Func EditaColores() msgbox(0,"Modificación de color","Seleccione el color de fondo en espera") $ColorFondo1=_ChooseColor(2,$ColorFondo1,2,$GUI_Principal) ; Color fondo msgbox(0,"Modificación de color","Seleccione el color de fondo mientras se actualiza la lista") $ColorFondo2=_ChooseColor(2,$ColorFondo2,2,$GUI_Principal) ; Color fondo mientras se está actualizando la lista msgbox(0,"Modificación de color","Seleccione el color para estaciones con "& $NumBicisLibresTramo1 & " bicis libres") $ColorTramo1=_ChooseColor(2,$ColorTramo1,2,$GUI_Principal) ; Color tramo 1 msgbox(0,"Modificación de color","Seleccione el color para estaciones con más de "& $NumBicisLibresTramo1 & " y menos de "& $NumBicisLibresTramo2 & " bicis libres") $ColorTramo2=_ChooseColor(2,$ColorTramo2,2,$GUI_Principal) ; Color tramo 2 msgbox(0,"Modificación de color","Seleccione el color para estaciones con más de "& $NumBicisLibresTramo2 & " bicis libres") $ColorTramo3=_ChooseColor(2,$ColorTramo3,2,$GUI_Principal) ; Color tramo 3 IniWrite($archivoini, "Configuracion", "ColorFondo1", $ColorFondo1) IniWrite($archivoini, "Configuracion", "ColorFondo2", $ColorFondo2) IniWrite($archivoini, "Configuracion", "ColorTramo1", $ColorTramo1) IniWrite($archivoini, "Configuracion", "ColorTramo2", $ColorTramo2) IniWrite($archivoini, "Configuracion", "ColorTramo3", $ColorTramo3) BActualizar() EndFunc ;==>EditaColores Func EditaColores1() msgbox(0,"Modificación de color","Seleccione el color") mb(@GUI_CtrlHandle) Select Case @GUI_CtrlHandle=$B_Col1 $ColorFondo1=_ChooseColor(2,$ColorFondo1,2,$GUI_ConfiguraOpciones) ; Color fondo ActualizaColoresGUIConfiguraOpciones() Case @GUI_CtrlHandle=$B_Col2 $ColorFondo2=_ChooseColor(2,$ColorFondo2,2,$GUI_ConfiguraOpciones) ; Color fondo mientras se está actualizando la lista ActualizaColoresGUIConfiguraOpciones() Case @GUI_CtrlHandle=$B_Col3 $ColorTramo1=_ChooseColor(2,$ColorTramo1,2,$GUI_ConfiguraOpciones) ; Color tramo 1 ActualizaColoresGUIConfiguraOpciones() Case @GUI_CtrlHandle=$B_Col4 $ColorTramo2=_ChooseColor(2,$ColorTramo2,2,$GUI_ConfiguraOpciones) ; Color tramo 2 ActualizaColoresGUIConfiguraOpciones() Case @GUI_CtrlHandle=$B_Col5 $ColorTramo3=_ChooseColor(2,$ColorTramo3,2,$GUI_ConfiguraOpciones) ; Color tramo 3 ActualizaColoresGUIConfiguraOpciones() EndSelect IniWrite($archivoini, "Configuracion", "ColorFondo1", $ColorFondo1) IniWrite($archivoini, "Configuracion", "ColorFondo2", $ColorFondo2) IniWrite($archivoini, "Configuracion", "ColorTramo1", $ColorTramo1) IniWrite($archivoini, "Configuracion", "ColorTramo2", $ColorTramo2) IniWrite($archivoini, "Configuracion", "ColorTramo3", $ColorTramo3) BActualizar() EndFunc ;==>EditaColores Func ActualizaColoresGUIConfiguraOpciones() GUICtrlSetBkColor($I_Col1,$ColorFondo1) GUICtrlSetBkColor($I_Col2,$ColorFondo2) GUICtrlSetBkColor($I_Col3,$ColorTramo1) GUICtrlSetBkColor($I_Col4,$ColorTramo2) GUICtrlSetBkColor($I_Col5,$ColorTramo3) EndFunc ;==>ActualizaColoresGUIConfiguraOpciones() ; ==================================================================================================================== ; Nombre .............: BActualizar() ; Descripción ........: Actualiza los datos del ListView ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func BActualizar() LeeDatosIni() ; Lectura de datos de archivo .ini _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView)) principal() EndFunc ;==>BActualizar Func CambiaWebServicio() ;mb("El combo muestra: "& guictrlread($CajaWebServicio)) ;-- Guardar web de servicio de bicicletas seleccionado en el combo IniWrite($archivoini, "Configuracion", "WebServicioBicis", guictrlread($CajaWebServicio)) $XMLyaCreado=0 ; Se pone a 0 porque al cambiar de web de servicio, se tiene que crear de nuevo un XML en LeeDatosEstacion() BActualizar() EndFunc ;==>CambiaWebServicio Func ExtraeWebServicio($WebLeida) ;mb("Función ExtraWebServicio: "&$WebLeida) Local $poscorcheteini=StringInStr($WebLeida,"[") Local $poscorchetefin=StringInStr($WebLeida,"]") Local $WebServicioDeCombo=StringMid($WebLeida,$poscorcheteini+1,stringlen($WebLeida)-$poscorcheteini-1) ;mb($WebServicioDeCombo) return ($WebServicioDeCombo) EndFunc ;==>ExtraeWebServicio ; ==================================================================================================================== ; Nombre .............: BiciCastellon() ; Descripción ........: Obtiene los datos de las bicicletas públicas de Castellón, que tienen un sistema distinto al de JCDECAUX ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func BiciCastellon() Global $httpdirCast="http://www.bicicas.es/estado/EstadoActual.asp" Global $sDataCast = InetRead($httpdirCast) Global $nBytesReadCast = @extended Global $DatosLeidosCast=BinaryToString($sDataCast,4) ; 4= UTF8 ;msgbox(0,"Aviso",$DatosLeidos) Global $dDatosCastellon0=stringregexp($DatosLeidosCast,'100 nowrap>(.*?\w+)\.',3) ; Texto entre 100 nowrap> y . ;_Arraydisplay($dDatosCastellon1,"Estaciones") Global $dDatosCastellon1=stringregexp($DatosLeidosCast,'100 nowrap>.*?\w+\. (.*?\w+)',3) ; Texto entre 100 nowrap>NUMERO. y ;_Arraydisplay($dDatosCastellon1,"Direcciones") Global $dDatosCastellon2=stringregexp($DatosLeidosCast,'nowrap>ESTADO - \((.*?\w+)/',3) ; Texto entre nowrap>ESTADO - ( y /. El \( hace que el ( sea literal. Luego (.*\w+) es el valor que debe mostrar ;_Arraydisplay($dDatosCastellon2,"Libres/Bornetas") Global $dDatosCastellon3=stringregexp($DatosLeidosCast,'nowrap>ESTADO - \(.*?\w+/(.*?\w+)\)<',3) ; Texto entre nowrap>ESTADO - (CUALQUIERTEXTO/ y )<. El \( hace que el ( sea literal. Luego .*?\w+ es CUALQUIERTEXTO y (.*\w+) es el valor que debe mostrar ;_Arraydisplay($dDatosCastellon3,"Bornetas") Global $dDatosCastellon[ubound($dDatosCastellon1)][5] for $i=0 to ubound($dDatosCastellon1)-1 $dDatosCastellon[$i][0]=$dDatosCastellon0[$i] ; Número de estación $dDatosCastellon[$i][1]=$dDatosCastellon1[$i] ; Nombre/Dirección de estación $dDatosCastellon[$i][2]=$dDatosCastellon2[$i] ; Bicicletas libres $dDatosCastellon[$i][3]=$dDatosCastellon3[$i]-$dDatosCastellon2[$i] ; Bornetas libres calculadas: Bornetas totales-Bicicletas libres $dDatosCastellon[$i][4]=$dDatosCastellon3[$i] ; Bornetas totales Next ;_Arraydisplay($dDatosCastellon,"Estación-Libres-Bornetas") ; Muestra la matriz con todos los datos Número estación, Nombre/Dirección estación, Bicicletas libres, Bornetas libres calculadas, Bornetas totales $DatosCastellonCargados=1 ; Indica que se han cargado los datos para que no se vuelva a cargar los datos en cada estación a monitorizar. Sólo se carga al cambiar de servicioweb y al actualizar. EndFunc ; ==================================================================================================================== ; Nombre .............: ConfiguraOpciones() ; Descripción ........: Muestra cuadro de diálogo con opciones ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func ConfiguraOpciones() GUISetState(@SW_SHOW,$GUI_ConfiguraOpciones) EndFunc ; ==================================================================================================================== ; Nombre .............: GUI_ConfiguraOpcionesCierra() ; Descripción ........: Muestra cuadro de diálogo con opciones ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func GUI_ConfiguraOpcionesCierra() ;-- Guardar números de estaciones del GUI_ConfigurarOpciones IniWrite($archivoini, "Estaciones", "Num", Guictrlread($I_NumEst)) GUISetState(@SW_HIDE,$GUI_ConfiguraOpciones) EndFunc ; ==================================================================================================================== ; Nombre .............: MuestraInfo() ; Descripción ........: Muestra un cuadro de diálogo con información sobre el programa ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func MuestraInfo() Local $Mens1,$Mens2,$Mens3 $Mens1="Esta utilidad permite mostrar la situación actual de las estaciones cuyos números se encuentren almacenados en el archivo .ini" $Mens2="Puede introducir nuevas estaciones o modificar la existentes con 'Editar estaciones' del menú contextual." $Mens3="Mediante colores se muestran las estaciones con distintos números de bicicletas libres." MsgBox(0, "Información", $Mens1 & @CR & @CR & $Mens2 & @CR & @CR & $Mens3 & @CR & @CR & $MensajeEstaciones & @CR & @CR & $MensajeEstaciones4 & @CR & @CR & $MensajeEstaciones5 & @CR & @CR & $MensajeAutor) EndFunc ;==>MuestraInfo ; ==================================================================================================================== ; Nombre .............: SpecialEvents() ; Descripción ........: Eventos especiales de cuadro de diálogo ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== 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 ; ==================================================================================================================== ; Nombre .............: GuardarValoresDefectoINI() ; Descripción ........: Guarda en el archivo .ini los valores por defecto ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func GuardarValoresDefectoINI() ;-- Guardar web de servicio de bicicletas IniWrite($archivoini, "Configuracion", "WebServicioBicis", $webServicioBicisLeidaCompleta) ;-- Guardar colores cw("Datos de Colores que se van a guardar: "&$ColorFondo1&" "&$ColorFondo2&" "&$ColorTramo1&" "&$ColorTramo2&" "&$ColorTramo3) IniWrite($archivoini, "Configuracion", "ColorFondo1", $ColorFondo1) IniWrite($archivoini, "Configuracion", "ColorFondo2", $ColorFondo2) IniWrite($archivoini, "Configuracion", "ColorTramo1", $ColorTramo1) IniWrite($archivoini, "Configuracion", "ColorTramo2", $ColorTramo2) IniWrite($archivoini, "Configuracion", "ColorTramo3", $ColorTramo3) EndFunc ;==>GuardarValoresDefectoINI ; ==================================================================================================================== ; Nombre .............: GUI_Principal_Cierra() ; Descripción ........: Guarda en el archivo .ini los valores actuales de la ventana-GUI (posición, dimensiones, anchos de columna, colores) ; Elimina $File y $File1 de temporales (si existen) ; Sintaxis ...........: ; Parámetros .........: ; Valores devueltos ..: ; Autor ..............: ; Comentarios ........: ; ; ==================================================================================================================== Func GUI_Principal_Cierra() ;-- Guardar coordenadas de ventana Local $size = WinGetPos($GUI_Principal) ; Obtiene las coordenadas de la ventana ;MsgBox(0, "Coordenadas de ventana $GUI_Principal (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]) ;-- Guardar anchos de columnas 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 ;-- Guardar números de estaciones del GUI_principal ;~ IniWrite($archivoini, "Estaciones", "Num", Guictrlread($CajaEstaciones)) ; Utiliza sólo en el caso de que esté el cuadro de texto en el GUI principal ;-- Guardar números de estaciones del GUI_ConfigurarOpciones IniWrite($archivoini, "Estaciones", "Num", Guictrlread($I_NumEst)) GuardarValoresDefectoINI() cw("Borrando: " & $sFile) FileDelete($sFile) cw("Borrando: " & $sFile1) FileDelete($sFile1) Exit EndFunc ;==>GUI_Principal_Cierra #EndRegion Funciones