Página 1 de 1

Problema raro :S

Publicado: 22 Dic 2010, 21:38
por avechuche
Antes de nada les dejo la parte del code q me da error ...

Resumiendo, tengo un GUI con un ListView. Cada ListViewItem se rellena con cada fila de una base de datos, hasta ahi todo bien. Cuando uno le hace clic a un ListViewItem llama a esta funcion, q lo q hace es permitir cambiar los datos, mostrar algunas imagenes y tmb hay un RichEdit para poner datos extras...

Bueno aqui el problema. Resulta que para mostrar las imagenes yo hago un _FileListToArray del directorio que quiero. En este caso, cada vez que agrego un usuario a la db se crea una carpeta llamada "Registros" (por unica vez), dentro de esa se crea una carpeta con el ($Legajo & " - " & $Apellido & ", " & $Nombre), dentro de esa carpeta se crea otra que se llama "Imágenes", para meter todas las imagenes de ese usuario. Bueno, si el _FileListToArray no encuentra ninguna imagen "*.jpg" en este caso, me va a dar un error y se me va a salir del programa, por eso necesito ponerle una condicion que seria con un If" $Lista_Imagenes[0] <> "0" Then que haga el for y muetre todas las imagenes que alla encontrado (todavia lo estoy armando, solo puse que se vean 5 imágenes)

El problema es que el _FileListToArray pareciera q no anda o anda por la mitad, porque? Bueno si se fijan hay un _ArrayDisplay documentado, si yo lo activo, cuando llamo a la funcion se me tilda, aparece el _ArrayDisplay, pero se tilda el programa y tengo que cerrarlo.
Si lo documento como ahora, el programa anda perfecto, me deja recorrer el Array con el For y me muetra la imagenes, pero $Lista_Imagenes[0] no funciona, osea no me llena el lugar 0 del array con la cantidad de imagenes que encontro, por lo lo que no puedo usar el If que comente anteriormente, y si no hay imagenes, el prgrama me da error y se cierra.

Les pongo una imagen del error.

http://picturetogo.com/images/2010/12/2 ... dibujo.jpg

Foto para q vean que anda si saco _ArrayDisplay y demas

http://picturetogo.com/images/2010/12/2 ... ibujo2.jpg

No pongo el code completo porque tiene 1500 lineas

Código: Seleccionar todo

Func _Edit($ID, $Apellido, $Nombre, $Direccion, $Numero, $Piso, $Localidad, $CP, $DNI, $Legajo, $Telefono, $Prioridad, $Email, $Fecha)
;~ 	Local $Left = "0"

	$Directorio = @ScriptDir & "\Registros\" & $Legajo & " - " & $Apellido & ", " & $Nombre & "\Imágenes\"

;~ 	MsgBox(0, "", $Directorio)

	$Lista_Imagenes = _FileListToArray($Directorio, "*.png")

	_ArrayDisplay($Lista_Imagenes)

	$GUI_Datos = GUICreate("Editar - " & $ID & " - " & $Apellido & ", " & $Nombre, 800, 600, -1, -1)

;~ 	If $Lista_Imagenes[0] <> "0" Then

;~ 		For $s = 1 To $Lista_Imagenes[0]

;~ 			GUICtrlCreatePic($Directorio & $Lista_Imagenes[$s], 30 + $Left, 440, 140, 100)

;~ 			$Left += 150

;~ 		Next

;~ 	EndIf

	GUICtrlCreateGroup("Datos personales ...", 10, 10, 230, 365)

	$Apellido_Input_MD = GUICtrlCreateInput($Apellido, 80, 30, 150, 21)
	$Apellido_Label_MD = GUICtrlCreateLabel("Apellido", 24, 30, 46, 20, $SS_CENTERIMAGE)

	$Nombre_Input_MD = GUICtrlCreateInput($Nombre, 80, 55, 150, 21)
	$Nombre_Label_MD = GUICtrlCreateLabel("Nombre", 24, 55, 54, 20, $SS_CENTERIMAGE)

	$Direccion_Input_MD = GUICtrlCreateInput($Direccion, 80, 80, 150, 21)
	$Direccion_Label_MD = GUICtrlCreateLabel("Dirección", 24, 80, 54, 20, $SS_CENTERIMAGE)

	$Numero_Input_MD = GUICtrlCreateInput($Numero, 80, 105, 58, 21)
	$Numero_Label_MD = GUICtrlCreateLabel("Número", 24, 105, 40, 20, $SS_CENTERIMAGE)

	$Piso_Input_MD = GUICtrlCreateInput($Piso, 180, 105, 50, 21)
	$Piso_Label = GUICtrlCreateLabel("Piso", 150, 105, 20, 20, $SS_CENTERIMAGE)

	$Localidad_Input_MD = GUICtrlCreateInput($Localidad, 80, 130, 150, 21)
	$Localidad_Label_MD = GUICtrlCreateLabel("Localidad", 24, 130, 54, 20, $SS_CENTERIMAGE)

	$CP_Input_MD = GUICtrlCreateInput($CP, 80, 155, 150, 21)
	$CP_Label_MD = GUICtrlCreateLabel("C.P", 24, 155, 22, 20, $SS_CENTERIMAGE)

	$DNI_Input_MD = GUICtrlCreateInput($DNI, 80, 180, 150, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
	$DNI_Label_MD = GUICtrlCreateLabel("DNI", 24, 180, 22, 20, $SS_CENTERIMAGE)

	$Legajo_Input_MD = GUICtrlCreateInput($Legajo, 80, 205, 150, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
	$Legajo_Label_MD = GUICtrlCreateLabel("Legajo", 24, 205, 38, 20, $SS_CENTERIMAGE)

	$Telefono_Input_MD = GUICtrlCreateInput($Telefono, 80, 230, 150, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
	$Telefono_Label_MD = GUICtrlCreateLabel("Teléfono", 24, 230, 54, 20, $SS_CENTERIMAGE)

	$Prioridad_Input_MD = GUICtrlCreateCombo($Prioridad, 80, 255, 150, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
	GUICtrlSetData(-1, "1 - Corto plazo|2 - Largo plazo|3 - Urgente|4 - Entregado")
	$Prioridad_Label_MD = GUICtrlCreateLabel("Prioridad", 24, 255, 46, 20, $SS_CENTERIMAGE)

	$eMail_Input_MD = GUICtrlCreateInput($Email, 80, 280, 150, 21)
	$eMail_Label_MD = GUICtrlCreateLabel("E-mail", 24, 280, 38, 20, $SS_CENTERIMAGE)

	$Fecha_Input_MD = GUICtrlCreateInput($Fecha, 80, 305, 150, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
	$Fecha_Label_MD = GUICtrlCreateLabel("Fecha", 24, 305, 46, 20, $SS_CENTERIMAGE)

	$ID_Input_MD = GUICtrlCreateInput($ID, 10, 10, 50)
	GUICtrlSetState(-1, $GUI_DISABLE + $GUI_HIDE)

	GUICtrlCreateGroup("Información extra ...", 250, 10, 540, 365)

	$Tamanio_Letra = GUICtrlCreateCombo("", 260, 30, 40, 50)
	GUICtrlSetData(-1, "8|9|10|11|12|14|16|18|20|22|24|26|28|36|48|72|", "10")

	$Tipo_Letra = GUICtrlCreateCombo("", 305, 30, 125, 50)
	GUICtrlSetData(-1, "Times New Roman|Arial", "Times New Roman")

	$Rich_Edit = _GUICtrlRichEdit_Create($GUI_Datos, "", 260, 55, 520, 310, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))

	GUICtrlCreateGroup("Imágenes ...", 10, 380, $Ancho_GUI - 20, 205)

	$Boton_Guardar_Cambios = GUICtrlCreateButton("Guardar cambios", 20, 340, -1, 25)
	$Boton_Cancelar = GUICtrlCreateButton("Cancelar", 180, 340, 50, 25)
	$Boton_Limpiar = GUICtrlCreateButton("Limpiar", 130, 340, 50, 25)

	If FileExists(@ScriptDir & "\Registros\" & $Legajo & " - " & $Apellido & ", " & $Nombre & "\Información extra.rtf") Then
		_GUICtrlRichEdit_StreamFromFile($Rich_Edit, @ScriptDir & "\Registros\" & $Legajo & " - " & $Apellido & ", " & $Nombre & "\Información extra.rtf")
	EndIf

;~ 	MsgBox(0, "", @ScriptDir & "\Registros\" & $Legajo & " - " & $Apellido & ", " & $Nombre & "\Imágenes\")

	GUISetState(@SW_SHOW)

	While 1

		Switch GUIGetMsg()

			Case -3, $Boton_Cancelar

				GUIDelete($GUI_Datos)

				ExitLoop

			Case $Boton_Guardar_Cambios

				;Aca va un code largo que comprueba si los imputs estan todos llenos, si es asi, llama a una funcion para rellenar una base de datos con esos datos. Y un par de cosas mas q no vienen al caso porque no es aca el errror

				GUIDelete($GUI_Datos)

				ExitLoop

			Case $Boton_Limpiar

				_Borrar_Inputs_MD()

			Case $Tamanio_Letra, $Tipo_Letra

				_GUICtrlRichEdit_SetFont($Rich_Edit, GUICtrlRead($Tamanio_Letra), GUICtrlRead($Tipo_Letra))

		EndSwitch

		Sleep(10)

	WEnd

EndFunc   ;==>_Edit

Re: Problema raro :S

Publicado: 22 Dic 2010, 23:21
por BasicOs
Puedes dejar una imagen por defecto como cuando en los foros no hay imagen, o bien usar una función como esta no controlando el resultado del Array sino el resultado de la función, que te controla si no hay imagenes If (Not IsArray($FilesList)) and (@Error=1) o bien con If @error <>0 Then MsgBox(0, "", "@error="&@error):

Código: Seleccionar todo

Global $List[1]=[0]
Func FileListToArray($Dir)
    Dim $FilePath,$FilesList,$Files,$i
    $FilesList=_FileListToArray($Dir)
    If (Not IsArray($FilesList)) and (@Error=1) Then
        MsgBox (0,"","No Files\Folders Found.")
        Return 
    EndIf
    $Files=_FileListToArray($Dir,"*",1)
    If IsArray($Files) Then
        For $i=1 To $Files[0]
            $FilePath=$Dir&"\"&$Files[$i]
            ReDim $List[UBound($List)+1]
            $List[0]=$List[0]+1
            $List[UBound($List)-1]=$FilePath
        Next
    EndIf
    $SubDir=_FileListToArray($Dir,"*",2)
    If IsArray($SubDir) Then
        For $i=1 To $SubDir[0]
            $FullPath=$Dir&"\"&$SubDir[$i]
            $tempList=FileListToArray($FullPath)
            For $i=1 To $tempList[0]
                ReDim $List[UBound($List)+1]
                $List[0]=$List[0]+1
                $List[UBound($List)-1]=$tempList[$i]
            Next    
        Next
    EndIf
    Return $List
EndFunc
Salu22:)

Re: Problema raro :S

Publicado: 23 Dic 2010, 01:01
por avechuche
Bueno anda de maravilla, me di cuenta q si no hay archivos no puedo usar el [0] me di cuenta recien ¬¬, lo que no entiendo es porque el _ArrayDisplay no anda alla o no archivos :S ... bueno pero andubo muchas gracias :)