Me falla este código

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Colmillitos
Mensajes: 9
Registrado: 29 Mar 2009, 02:13

Me falla este código

Mensaje por Colmillitos »

Bueno, acabo de empezar con Autoit, y este código me da fallo:

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 130, 138, 193, 125)
$Input1 = GUICtrlCreateInput(0, 48, 8, 73, 21)
$Input2 = GUICtrlCreateInput(0, 48, 40, 73, 21)
$Input3 = GUICtrlCreateInput(0, 48, 72, 73, 21)
$Button1 = GUICtrlCreateButton("Calc", 8, 104, 55, 25, 0)
$Button2 = GUICtrlCreateButton("Reset", 64, 104, 55, 25, 0)
$Label1 = GUICtrlCreateLabel("(V)", 8, 8, 36, 17)
$Label2 = GUICtrlCreateLabel("(I)", 8, 40, 36, 17)
$Label3 = GUICtrlCreateLabel("(R)", 8, 72, 36, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Select
		Case $nMsg = $GUI_EVENT_CLOSE
			Exit
		Case $nMsg = $Button1
			$VV=GUICtrlRead($Input1)
			$VA=GUICtrlRead($Input2)
			$VR=GUICtrlRead($Input3)
			if GUICtrlRead($Input1) = 0 then $Input1 = GUICtrlSetData($Input1,$VA*$VR)
		Case $nMsg = $Button2
			$Input1=GUICtrlSetData($Input1,0)
			$Input2=GUICtrlSetData($Input2,0)
			$Input3=GUICtrlSetData($Input3,0)
	EndSelect
WEnd
lo que quiero que haga es que la darle al boton calc si el primer input es decir $VV = 0 entonces en ese mismo cuadro ponga el resultado de los otros 2 multiplicados, y que si le doy al boton reset se pongan a 0 todos, pues resulta que solo me funciona la primera vez que le doy al boton despues deja de funcionar.

Les agradeceria que me dijesen cual es el fallo ^^

Saludos


EDITO -------------------


Bueno viendo algunos ejemplos y tal vi que la organizacion que tenia mi codigo era un poco pésima, asi que aqui dejo el codigo tal cual lo tengo ahora cambie algunas cosas y esta mas ordenado, pero sigue sirviendo solo para la primera vez que pulse cada boton

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Calculadora()

Func Calculadora()
	Local $VV, $VA, $VR, $Button1, $Button2, $Label1, $Label2, $Label3, $msg
	GUICreate("Calculadora Ley Ohm", 130, 138, 193, 125)
	
	
	$VV = GUICtrlCreateInput(0, 48, 8, 73, 21)
	$VA = GUICtrlCreateInput(0, 48, 40, 73, 21)
	$VR = GUICtrlCreateInput(0, 48, 72, 73, 21)
	$Button1 = GUICtrlCreateButton("Calc", 8, 104, 55, 25, 0)
	$Button2 = GUICtrlCreateButton("Reset", 64, 104, 55, 25, 0)
	$Label1 = GUICtrlCreateLabel("(V)", 8, 8, 36, 17)
	$Label2 = GUICtrlCreateLabel("(I)", 8, 40, 36, 17)
	$Label3 = GUICtrlCreateLabel("(R)", 8, 72, 36, 17)
		
	GUISetState()


	While 1
		$msg = GUIGetMsg()
		Select
			Case $msg = $GUI_EVENT_CLOSE
				ExitLoop
			Case $msg = $Button1
				if GUICtrlRead($VV) = 0 then $VV = GUICtrlSetData($VV,$VA*$VR)
			Case $msg = $Button2
				$VV=GUICtrlSetData($VV,0)
				$VA=GUICtrlSetData($VA,0)
				$VR=GUICtrlSetData($VR,0)
		EndSelect
	WEnd
EndFunc
Colmillitos
Mensajes: 9
Registrado: 29 Mar 2009, 02:13

Re: Me falla este código

Mensaje por Colmillitos »

Bueno siento responderme yo a mi mismo, pero ya encontre la solucion ^^ era un pequeño fallo una tonteria.

Aqui dejo el codigo corregido:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Calculadora()

Func Calculadora()
	Local $VV, $VA, $VR, $Button1, $Button2, $Label1, $Label2, $Label3, $msg
	GUICreate("Calculadora Ley Ohm", 130, 138, 193, 125)
	
	
	$VV = GUICtrlCreateInput(0, 48, 8, 73, 21)
	$VA = GUICtrlCreateInput(0, 48, 40, 73, 21)
	$VR = GUICtrlCreateInput(0, 48, 72, 73, 21)
	$Button1 = GUICtrlCreateButton("Calc", 8, 104, 55, 25, 0)
	$Button2 = GUICtrlCreateButton("Reset", 64, 104, 55, 25, 0)
	$Label1 = GUICtrlCreateLabel("(V)", 8, 8, 36, 17)
	$Label2 = GUICtrlCreateLabel("(I)", 8, 40, 36, 17)
	$Label3 = GUICtrlCreateLabel("(R)", 8, 72, 36, 17)
		
	GUISetState()


	While 1
		$msg = GUIGetMsg()
		Select
			Case $msg = $GUI_EVENT_CLOSE
				ExitLoop
			Case $msg = $Button1
				if GUICtrlRead($VV) = 0 then GUICtrlSetData($VV,GUICtrlRead($VA)*GUICtrlRead($VR))
			Case $msg = $Button2
				GUICtrlSetData($VV,0)
				GUICtrlSetData($VA,0)
				GUICtrlSetData($VR,0)
		EndSelect
	WEnd
EndFunc
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Me falla este código

Mensaje por Chefito »

Y yo te pregunto....pero sabes por que no funcionaba de la forma anterior?? :smt003

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Colmillitos
Mensajes: 9
Registrado: 29 Mar 2009, 02:13

Re: Me falla este código

Mensaje por Colmillitos »

creo que si, el problema estaba en que a las variables $VV y tal les asignaba el valor de cambiar, en vez de ejecutar el comando cambiar. Creo que es eso, no estoy seguro, recien estoy empezando a programar ^^
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Me falla este código

Mensaje por Chefito »

Por ahí van los tiros, pero no es exactamente la solución :smt002 .
Inicialmente le asignas a las variables $input1, $input2 y $input3 el identificador de los controles input (ID). Con esto, siempre podrás trabajar con estos controles.
Y despues, en el código pones que cuando le des al $button2 (reset), de el valor 0 a todos los inputs. Pero en esta parte tienes un fallo muy gordo (ahí está el verdadero error). Que en esta parte asignas lo que devuelve las funciones GUICtrlSetData (1 o 0, según si le ha asignado el valor bien o no) a los 3 inputs, perdiendo su valor anterior....el cual era el identificador del control.
Y entonces que pasa? que cuando llames otra vez a las 3 variables inputs, van a tener un valor distinto a los IDs de los controles, por lo tanto no vas a hacer nada de nada ya que han perdido ese Identificador de control (ID) :smt002 .

En definitiva, cambiando en el 1º código solamente esto:

Código: Seleccionar todo

      Case $nMsg = $Button2
         $Input1=GUICtrlSetData($Input1,0)
         $Input2=GUICtrlSetData($Input2,0)
         $Input3=GUICtrlSetData($Input3,0)
por esto otro:

Código: Seleccionar todo

      Case $nMsg = $Button2
         GUICtrlSetData($Input1,0)
         GUICtrlSetData($Input2,0)
         GUICtrlSetData($Input3,0)
te debe de funcionar sin problemas.
Espero haberte aclarado algo más el error :smt020 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Colmillitos
Mensajes: 9
Registrado: 29 Mar 2009, 02:13

Re: Me falla este código

Mensaje por Colmillitos »

Si, ahora lo vi mas claro ^^

Muchas gracias, y muy buena la explicación.

Por cierto, hay alguna forma de cambiar el aspecto visual, me refiero por ejemplo a que los label, no sean letras negras y fondo gris, quitarle por ejemplo el fondo, y cosas por el estilo.

Saludos
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Me falla este código

Mensaje por Chefito »

Si claro....se puede hacer de todo :smt003 .
Por ejemplo....para el estilo de los controles, ve a la ayuda de ese control, y mira los argumentos style y exStyle. Mira en los enlaces que te pones y te dirigirás a las constantes para darle estilo.
Por ponerte un ejemplo, tienes en exStyle la posibilidad de hacer el laber transparente con la constante $WS_EX_TRANSPARENT. Recuerda que estas constantes están definidas en las librerías que te pone la ayuda al principio. En el caso del ejemplo tendrías que incluir #include <WindowsConstants.au3> al principio del programa.

Y para cambiar varias propiedades de los controles tienes varias funciones. Por ejemplo:
GUICtrlSetBkColor para definir el color de fondo de un control.
GUICtrlSetColor para definir el color del texto del control.
GUICtrlSetFont para cambiar la fuente, su tamaño, su grosor, etc. Mirala.

Mira en la ayuda las funciones que están en la misma sección que estas (AutoIt>Function Reference>GUI Reference>GUI Control Update). Te resultaran muy interesantes para todo esto.

Por cierto....en el parámetro style de la función GuiCtrlCreateInput tienes la constante $ES_NUMBER, que es para que acepte solamente dígitos (números). Por si te interesa eso :smt002 .

Investiga un poco por la ayuda.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Colmillitos
Mensajes: 9
Registrado: 29 Mar 2009, 02:13

Re: Me falla este código

Mensaje por Colmillitos »

Muchas Gracias.

Ahora tengo un pequeño problema:

Puse esto arriba del todo:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
Y despues esto:

Código: Seleccionar todo

$VV = GUICtrlCreateInput("", 146, 8, 73, 21, $ES_NUMBER)
	$VA = GUICtrlCreateInput("", 146, 40, 73, 21, $ES_NUMBER)
	$VR = GUICtrlCreateInput("", 146, 72, 73, 21, $ES_NUMBER)
Pero al ejecutarlo me lanza el siguiente error:

Código: Seleccionar todo

C:\Documents and Settings\Javy\Escritorio\Proyectos\01.au3(20,57) : WARNING: $ES_NUMBER: possibly used before declaration.
	$VV = GUICtrlCreateInput("", 146, 8, 73, 21, $ES_NUMBER)
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\Javy\Escritorio\Proyectos\01.au3(20,57) : ERROR: $ES_NUMBER: undeclared global variable.
	$VV = GUICtrlCreateInput("", 146, 8, 73, 21, $ES_NUMBER)
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\Javy\Escritorio\Proyectos\01.au3 - 1 error(s), 1 warning(s)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Me falla este código

Mensaje por Chefito »

Tienes que poner #include <EditConstants.au3>. Te lo pone en la ayuda como te dije.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Colmillitos
Mensajes: 9
Registrado: 29 Mar 2009, 02:13

Re: Me falla este código

Mensaje por Colmillitos »

Wops, que fallo mas tonto jejejej. vi en la ayuda pero puse el include de la siguiente tabla en vez del de la tabla que estaba usando jejeje.

Bueno muchas gracias ^^

Ya va tomando forma esto y pense que no seria capaz.


Saludos
Colmillitos
Mensajes: 9
Registrado: 29 Mar 2009, 02:13

Re: Me falla este código

Mensaje por Colmillitos »

Ufff, algo he tocado que me e cargao el codigo ...

Código: Seleccionar todo

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=beta
#AutoIt3Wrapper_outfile=CalcOhm.exe
#AutoIt3Wrapper_Compression=4
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Opt('MustDeclareVars', 1)

Calculadora()

Func Calculadora()
	Local $VV, $VA, $VR, $Button1, $Button2, $Label1, $Label2, $Label3, $msg
	GUICreate("Calculadora Ley Ohm", 350, 100, 193, 125)
	GUICtrlCreatePic("C:\Documents and Settings\Javy\Escritorio\Proyectos\base.bmp",0,0,350,100)
	
	$VV = GUICtrlCreateInput("", 146, 8, 73, 21, $ES_NUMBER)
	$VA = GUICtrlCreateInput("", 146, 40, 73, 21, $ES_NUMBER)
	$VR = GUICtrlCreateInput("", 146, 72, 73, 21, $ES_NUMBER)
	$Button1 = GUICtrlCreateButton("Calc", 250, 8, 55, 25, 0)
	$Button2 = GUICtrlCreateButton("Reset", 250, 68, 55, 25, 0)
	$Label1 = GUICtrlCreateLabel("(V)", 106, 8, 36, 17)
	$Label2 = GUICtrlCreateLabel("(I)", 106, 40, 36, 17)
	$Label3 = GUICtrlCreateLabel("(R)", 106, 72, 36, 17)
		
	GUISetState()


	While 1
		$msg = GUIGetMsg()
		Select
			Case $msg = $GUI_EVENT_CLOSE
				ExitLoop
			Case $msg = $Button1
				If GUICtrlRead($VV) = "" And GUICtrlRead($VA) = "" And GUICtrlRead($VR) = "" Then MsgBox(0, 'ERROR', 'Todos los campos estan vacios, Rellene 2 campos para calcular el que falte.')
				If GUICtrlRead($VV) <> "" And GUICtrlRead($VA) <> "" And GUICtrlRead($VR) <> "" Then MsgBox(0, 'ERROR', 'Todos los campos estan rellenos, deje vacio el que quiera calcular.')
				If GUICtrlRead($VV) = "" And GUICtrlRead($VA) <> "" And GUICtrlRead($VR) <> "" Then GUICtrlSetData($VV,GUICtrlRead($VA)*GUICtrlRead($VR))
				If GUICtrlRead($VV) <> "" And GUICtrlRead($VA) = "" And GUICtrlRead($VR) <> "" Then GUICtrlSetData($VA,GUICtrlRead($VV)/GUICtrlRead($VR))
				If GUICtrlRead($VV) <>"" And GUICtrlRead($VA) <> "" And GUICtrlRead($VR) = "" Then GUICtrlSetData($VR,GUICtrlRead($VV)/GUICtrlRead($VA))
			Case $msg = $Button2
				GUICtrlSetData($VV,"")
				GUICtrlSetData($VA,"")
				GUICtrlSetData($VR,"")
		EndSelect
	WEnd
EndFunc
Ahora no me deja hacer click en ningun sitio
Responder