ayuda para cambiar txt en un imput

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Andres_sc
Aprendiz de Mago
Mensajes: 59
Registrado: 16 Jul 2010, 23:54

ayuda para cambiar txt en un imput

Mensaje por Andres_sc »

Bueno tengo una duda de como puedo lograr cambiar el texto de un imput apretando un boton
por ejemplo tengo un imput "$in"
para ke salga dentro de ese imput ago lo siguiente

Código: Seleccionar todo

case $boton 
GUICtrlSetData($in, "bbbbb")
como ago para ke apretando el mismo boton me devuelva por ejemplo "ccccc"
espero ke se alla entendido :smt017
gracias !!
Avatar de Usuario
Fredinchy
Aprendiz de Mago
Mensajes: 32
Registrado: 30 Mar 2010, 01:27
Ubicación: Unknown

Re: ayuda para cambiar txt en un imput

Mensaje por Fredinchy »

Pues puedes hacer un contador y cada ves que se presione el botón que aumente el contador.. Y según el número del contador que se coloque "x" texto en el input. Bueno llevo mucho tiempo sin programar quizá esta no es la mejor forma pero funciona y es una forma de hacerlo :smt001

Aquí te va un código para que lo veas tu mismo con calma:

Código: Seleccionar todo

#include <GuiConstantsEx.au3>
GUICreate("GUI input",200,200)
$input=GUICtrlCreateInput("",20,50,160)
$Boton=GUICtrlCreateButton("Boton",50,140,100)
GUISetState(@SW_SHOW)

$i=1 ;contador

$a1="aaaaa" ;dato 1
$a2="bbbbb" ;dato 2
$a3="ccccc"  ;dato 3

While 1
	$Msg= GUIGetMsg()
	If $i>3 Then $i=1
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $Boton
			If $i=1 Then
				GUICtrlSetData($input,$a1)
			ElseIf $i=2 Then
				GUICtrlSetData($input,$a2)
			Else
				GUICtrlSetData($input,$a3)
			EndIf
			$i=$i+1 ;aquí aumento el contador
	EndSwitch
	Sleep(50)
WEnd
En este caso solo tengo 3 datos que colocar en mi input.. asi que al inicio del while coloco que si mi contador $i es mayor que 3 que vuelva a su valor inicial 1..

Saludos! :smt020
Cause no one here can ever stop us! They can try but we won't let them! No way.. :smt020
Andres_sc
Aprendiz de Mago
Mensajes: 59
Registrado: 16 Jul 2010, 23:54

Re: ayuda para cambiar txt en un imput

Mensaje por Andres_sc »

Muchas Gracias Fredinchy
yo estaba tratando de hacerlo de esa manera pero por alguna razon me devolvia todos los datos
uno tras otro sin volver a apretar el boton :smt021
ahora ya me di cuenta cual era mi error !!
gracias nuevamente :smt039
Avatar de Usuario
Alastor
Aprendiz de Mago
Mensajes: 59
Registrado: 13 Dic 2009, 14:27
Ubicación: Zaragoza, España
Contactar:

Re: ayuda para cambiar txt en un imput

Mensaje por Alastor »

¿Qué os parece así, sin tener que preocuparse por tanto "If, Else..."?

Código: Seleccionar todo

#include <GuiConstantsEx.au3>

GUICreate("GUI input", 200, 200)
$input = GUICtrlCreateInput("", 20, 50, 160)
$Boton = GUICtrlCreateButton("Boton", 50, 140, 100)
GUISetState(@SW_SHOW)

Global $Lista[3] = ["aaaaa", "bbbbb", "ccccc"], $Contador = -1


While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $Boton
			$Contador += 1 ; Aumentar el contador

			If $Contador = 3 Then $Contador = 0 ; Si esta al limite, resetearlo

			GUICtrlSetData($input, $Lista[$Contador]) ; Poner el array correspondiente

	EndSwitch

	Sleep(50)
WEnd
Creo un array y un contador, despues de eso solo hay que preocuparse de resetearlo y añadir más es tan facil como editar 2 números.
Última edición por Alastor el 15 Nov 2010, 16:19, editado 2 veces en total.
Aprendiendo AutoIt y C++
Andres_sc
Aprendiz de Mago
Mensajes: 59
Registrado: 16 Jul 2010, 23:54

Re: ayuda para cambiar txt en un imput

Mensaje por Andres_sc »

Muy buena variante Alastor :smt038
Lo voy a tener en cuenta no sabia ke se podia hacer de esa manera tambien :smt023
Gracias por los consejos y ayuda :smt003
saludos !!
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: ayuda para cambiar txt en un imput

Mensaje por jamaro »

Alastor escribió:¿Qué os parece así, sin tener que preocuparse por tanto "If, Else..."?

Código: Seleccionar todo

			If $Contador =$Lista[0] Then $Contador = 0 ; Si esta al limite, resetearlo
Creo un array y un contador, despues de eso solo hay que preocuparse de resetearlo y añadir más es tan facil como editar 2 números.
No lo he probado, pero si no me equivoco, con esta pequeña modificación $Lista[0] dará el total de elementos de la matriz, y ya sólo habrá que añadir o eliminar elementos en la definición de la matriz.

Saludos y gracias por vuestras ayudas.
Avatar de Usuario
Alastor
Aprendiz de Mago
Mensajes: 59
Registrado: 13 Dic 2009, 14:27
Ubicación: Zaragoza, España
Contactar:

Re: ayuda para cambiar txt en un imput

Mensaje por Alastor »

jamaro escribió:
Alastor escribió:¿Qué os parece así, sin tener que preocuparse por tanto "If, Else..."?

Código: Seleccionar todo

			If $Contador =$Lista[0] Then $Contador = 0 ; Si esta al limite, resetearlo
Creo un array y un contador, despues de eso solo hay que preocuparse de resetearlo y añadir más es tan facil como editar 2 números.
No lo he probado, pero si no me equivoco, con esta pequeña modificación $Lista[0] dará el total de elementos de la matriz, y ya sólo habrá que añadir o eliminar elementos en la definición de la matriz.

Saludos y gracias por vuestras ayudas.
"$Lista[0]" apunta al primer elemento de la matriz. Creo que te confundes con $CMDLine[0] que apunta al tamaño de la matriz de parametros, esto no ocurre con las matrices normales.
Aprendiendo AutoIt y C++
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: ayuda para cambiar txt en un imput

Mensaje por Ximorro »

Efectivamente que en la posición cero esté el tamaño de la matriz es cosa del que la crea, hay funciones que devuelven sus matrices con esa particularidad pero no es obligatorio.

En cualquier caso, si lo que quieres es evitar ese 3 de If $Contador = 3, y calcularlo automáticamente (lo cual es muy buena práctica de programación para poder ampliar la matriz sin tener que cambiar mucho el código) pues puedes hacerlo con la función UBound, que te dice el número de elementos de la matriz:
If $Contador = UBound($Lista) Then...

Por cierto, para esto hay que declarar bien la matriz con el número de elementos, pues se le ha puesto cuatro pero son 3 (índices de 0 a 2):
Cambiar Global $Lista[4] por Global $Lista[3].
(De lo contrario se mostraría el cuarto elemento, que está en blanco porque no le hemos puesto nada)

Antes no había problema porque reseteábamos el contador a mano, pero UBound no mira si los elementos están vacíos o llenos, simplemente da el tamaño total de la matriz.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: ayuda para cambiar txt en un imput

Mensaje por Chefito »

EDITADO. El comentario con letra pequeña está mal. Ximorro tiene razón, se debe utilizar UBound($lista) para poder utilizar todos los elementos del array. Siento la confusión y la mala corrección al compañero Ximorro :smt021 .
Puestos a corregir :smt005 :
Ximorro escribió:If $Contador = UBound($Lista) Then...

Sería un elemento menos. Recuerda que el primer elemento es el 0.

Código: Seleccionar todo

If $Contador =UBound($Lista)-1 Then $Contador = 0 ; Si esta al limite, resetearlo
También puedes declarar una variable fuera con el valor del UBound($Lista)-1 para que no tenga que estar calculándolo siempre. No es muy importante :smt001 .[/i][/size]
A mi en vez de leclarar $contador=-1 me gustaría más declararlo como $contador=0 y aumentarlo al final del código en vez de al principio. Cuestión de gustos :smt003 . Claro que al hacer esto habría que variar un poquito el código:

Código: Seleccionar todo

      Case $Boton
         If $Contador = UBound($Lista) Then $Contador = 0 ; o if $Contador>UBound($Lista)-1 then.......
         GUICtrlSetData($input, $Lista[$Contador]) ; Poner el array correspondiente
         $Contador += 1 ; Aumentar el contador
Bueno, me estoy rayando para una chorrada :smt005 :smt005 .

Hay otras formas de hacer que escriba cosas distintas dándole a un mismo botón. Si por ejemplo son pocos textos (por ejemplo 2 o 3) se puede hacer con un if o con un case y textos fijos sin necesidad de utilizar una matriz. Incluso se puede poner una variable auxiliar (en vuestro caso sería $Contador) asignandole los valores directamente, sin necesidar de tener que incrementarlo. Lo dicho, otra forma :smt002 .
Pero que conste que lo de la matriz esta muy bien :smt023 .

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 ;).
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: ayuda para cambiar txt en un imput

Mensaje por jamaro »

Menos mal que puse "si no me equivoco", así me libro de culpa :-)
Ximorro escribió:Efectivamente que en la posición cero esté el tamaño de la matriz es cosa del que la crea, hay funciones que devuelven sus matrices con esa particularidad pero no es obligatorio.
En varias ocasiones había utilizado la posición cero como el tamaño de la matriz, y efectivamente, creo que siempre ha sido al usar funciones como StringSplit, _StringInLine, _FileReadToArray,....

Disculpadme por empezar a opinar con una idea errónea.

Saludos
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: ayuda para cambiar txt en un imput

Mensaje por Ximorro »

Chefito escribió:Puestos a corregir :smt005 :
Ximorro escribió:If $Contador = UBound($Lista) Then...
Sería un elemento menos. Recuerda que el primer elemento es el 0.

Código: Seleccionar todo

If $Contador =UBound($Lista)-1 Then $Contador = 0 ; Si esta al limite, resetearlo
Pues no estoy muy de acuerdo, querido amigo. UBound da el número de elementos, no el índice máximo. Así si nuestra matriz es de 3 elementos (como decía había que declararla como Global $Lista[3], UBound($Lista) devuelve 3, aunque la matriz tiene celdas de la 0 a la 2.
Por lo tanto en el bucle, cuando $Contador valga 1, este código
$Contador += 1
If $Contador = UBound($Lista)-1 Then $Contador = 0
GUICtrlSetData($input, $Lista[$Contador])
se traduce a:
Incrementamos contador a 2
UBound($Lista)-1 es 2, por lo que la condición se cumple y reseteamos contador.
Por lo tanto la tercera línea no llega a ver $Lista[2], el último elemento, porque lo hemos reseteado antes.

Y también puede ser que me haya armado un cacao y esté totalmente liado... :smt003
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: ayuda para cambiar txt en un imput

Mensaje por Chefito »

Jejejeje.....sí, me equivoqué :smt005 . Erré en eso. Creo que me confundí con el orden del $Contador y lo hice como si estuviese después y no antes. Culpa mía. Ahora lo corrijo en el post.

Eso pasa por no fijarme bien en los códigos y no probarlos, aunque creas que es algo facil :smt005 .

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 ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: ayuda para cambiar txt en un imput

Mensaje por Ximorro »

No problem la cosa es no confundir a la peña ;-)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder