Página 1 de 1

Cuenta atrás en MsgBox y macro @ScriptDir

Publicado: 12 Ago 2011, 00:32
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

Re: Dos preguntillas

Publicado: 12 Ago 2011, 09:23
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.

Re: Dos preguntillas

Publicado: 12 Ago 2011, 13:22
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!

Msgbox con contador de cierre.

Publicado: 12 Ago 2011, 16:44
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

Re: Cuenta atrás en MsgBox y macro @ScriptDir

Publicado: 16 Ago 2011, 09:37
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