Página 1 de 1

ayuda para cambiar txt en un imput

Publicado: 13 Nov 2010, 07:10
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 !!

Re: ayuda para cambiar txt en un imput

Publicado: 13 Nov 2010, 18:29
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

Re: ayuda para cambiar txt en un imput

Publicado: 13 Nov 2010, 19:50
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

Re: ayuda para cambiar txt en un imput

Publicado: 13 Nov 2010, 21:05
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.

Re: ayuda para cambiar txt en un imput

Publicado: 13 Nov 2010, 23:03
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 !!

Re: ayuda para cambiar txt en un imput

Publicado: 15 Nov 2010, 03:00
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.

Re: ayuda para cambiar txt en un imput

Publicado: 15 Nov 2010, 10:11
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.

Re: ayuda para cambiar txt en un imput

Publicado: 15 Nov 2010, 11:47
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.

Re: ayuda para cambiar txt en un imput

Publicado: 15 Nov 2010, 13:50
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.

Re: ayuda para cambiar txt en un imput

Publicado: 15 Nov 2010, 19:49
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

Re: ayuda para cambiar txt en un imput

Publicado: 16 Nov 2010, 10:49
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

Re: ayuda para cambiar txt en un imput

Publicado: 16 Nov 2010, 18:32
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.

Re: ayuda para cambiar txt en un imput

Publicado: 17 Nov 2010, 09:19
por Ximorro
No problem la cosa es no confundir a la peña ;-)