Cuenta atrás en MsgBox y macro @ScriptDir

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
deep_red
Mensajes: 3
Registrado: 12 Ago 2011, 00:22

Cuenta atrás en MsgBox y macro @ScriptDir

Mensaje por deep_red »

Hola! Tengo dos preguntas, creo que básicas:

- Necesito un MsgBox en el que me aparezca una cuenta atrás desde 15 hasta 0, reduciéndose uno cada seg. Es decir, el texto tendría que cambiar conforme pasa el tiempo, hasta que la cuenta atrás llega a cero, y el msgbox desaparece. ¿Cómo lo hago? Porque en el argumento del texto del msgbox no sé cómo ponerlo.

- En un GUI que he hecho, he incluído algunas imágenes de mi disco duro localizadas. Sin embargo, cuando pruebo el programa en otro ordenador, necesito conocer la ruta exacta de la carpeta con las imágenes, y luego que mi programa acceda a dicha ruta sin modificar el código, ¿cómo lo hago? He pensado en colocar el macro "@DesktopDir", que proporciona la ruta a la carpeta del Escritorio del usuario, y en ese caso, sólo tendría que poner la carpeta de las imágenes en el escritorio del ordenador donde quisiera ejecutar el programa. ¿Pero no habría otra forma mejor donde el programa me leyera las imágenes desde cualquier carpeta? Por ejemplo, sería ideal un macro con la ruta a la carpeta en la que se está ejecutando el programa, porque luego sólo añadiría la carpeta de las imágenes y sería suficiente, pero no encuentro dicho macro.

Gracias por la ayuda

saludos
Última edición por deep_red el 12 Ago 2011, 20:32, editado 1 vez en total.
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Dos preguntillas

Mensaje por Ximorro »

Hola,
te recomiendo que cuando hagas varias preguntas totalmente desconectadas uses dos posts diferentes. Hace que sea más fácil de seguir para otros usuarios que estén interesados en alguno de los problemas. Además así podrías poner al post un título aclarativo de la cuestión, lo que es una norma de buen uso del foro...

a) Bueno, vayamos al asunto, respecto a la primera pregunta, hasta donde yo sé no se puede cambiar al vuelo el texto del MsgBox, no con su propio comando. Quizás se pueda acceder "a pelo" a los controles con otro programa (tu programa probablemente está esperando que el usuario lo cierre). Lo que sí puedes hacer es que se cierre a los 15 segundos, hay un parámetro para especificar que se cierre automáticamente en un tiempo especificado.
Así que igual eso te sirve, indicando "esta ventana se cerrará dentro de 15 segundos", pero sin cambiar el texto cada segundo.
Si quieres cambiar el texto supongo que lo mejor será hacer tu propio GUI personalizado...

b) Para las imágenes hay dos opciones.
b1) Simplemente pon las imágenes relativas al ejecutable, o que estén en la misma carpeta o en una carpeta dentro de la del ejecutable, por ejemplo.
Se puede saber la carpeta del ejecutable (o del script cuando estás desarrollando, es lo mismo) con @ScriptDir. Así si están en la misma carpeta, una imagen la puedes referenciar con @ScriptDir & "\imagen.jpg".
De manera similar si las tuvieras en una carpeta "imágenes" para tenerlas más organizadas, pues sería
@ScriptDir & "\imágenes\imagen.jpg", por ejemplo.

b2) La otra manera es insertar las imágenes dentro del EXE, pero no es buena idea si son muy grandes. El mecanismo es insertarlas en compilación, y cuando se ejecutan se extraen a una carpeta concreta, por ejemplo el temporal de Windows, y se usan desde allí. Cuando se acaba de trabajar con ellas hay que borrarlas o se quedan donde se han extraído.
Te recomiendo lo de tener las imágenes fuera del EXE, pero esto de meterlas dentro se hace con FileInstall, si te interesa mira bien la ayuda y si no te aclaras nos preguntas concretamente las dudas.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
deep_red
Mensajes: 3
Registrado: 12 Ago 2011, 00:22

Re: Dos preguntillas

Mensaje por deep_red »

Vale lo siento, era mi primer post en el foro, en los próximos separaré y pondré asunto explicativo.

a) Vale, entonces haré un GUI o añadiré el tiempo del msgbox como me recomiendas, gracias.

b) Perfecto, el macro "@ScriptDir" era justo lo que estaba buscando, busqué en "Relativos a directorios" y estaba en "Relativos a AutoIt".
No sabía que también se podían incrustar, aunque ahora no lo necesito, es interesante la información, muchas gracias.

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

Msgbox con contador de cierre.

Mensaje por Chefito »

Bienvenido.

Yo haría como dice Ximorro, un gui a mi medida, con los estilos que quisiese, e incluso le puedes meter una barra de progreso junto con el contador numérico para rizar el rizo. Eso quedaría genial.

Y aunque no sea lo suyo, como curiosidad, decir que sí, que se puede hacer un contador en un msgbox. La verdad es que se podría hacer cualquier cosa, incluso introducirle una barra de progreso (es una ventana al fin y al cabo no? :smt003 ). Pero es complicarse algo la vida sabiendo que tú lo puedes hacer más facilmente y mejor con tu propio gui. Un ejemplo de lo dicho:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>
Global $cont=15
$hGUI=GUICreate("Insertar al final en Edit", 400, 300)
$boton = GUICtrlCreateButton("Msgbox con contador", 140, 270, 120)
GUISetState()

$lin = 1
While 1
   Switch GUIGetMsg()
	Case $boton
		$cont=15
		$timer=_Timer_SetTimer($hGUI, 1000, "_Msgbox_Contador")
		MsgBox(0,"Mi msgbox con contador","Este msgbox se cerrará en " & $cont & " sg.")
		_Timer_KillTimer($hGUI, $timer)
      Case $GUI_EVENT_CLOSE
         ExitLoop
   EndSwitch
WEnd

Func _Msgbox_Contador($hWnd, $Msg, $iIDTimer, $dwTime)
    #forceref $hWnd, $Msg, $iIDTimer, $dwTime
	$cont-=1
	ControlSetText("Mi msgbox con contador","","Static1","Este msgbox se cerrará en " & $cont & " sg.")
	If $cont<=0 Then WinClose("Mi msgbox con contador")
EndFunc
Por cierto, te recomiendo que te leas las normal y recomendaciones del foro: http://www.emesn.com/autoitforum/viewtopic.php?f=1&t=8

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: Cuenta atrás en MsgBox y macro @ScriptDir

Mensaje por Ximorro »

Muy interesante, un buen ejemplo de uso de Timers, más claro que el que viene en la ayuda :smt004

JA, JA, ¡el GUI principal me suena! ¡ni le has cambiado el título :smt005 :smt044
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder