Monitorear/Visualizar arranque de la aplicacion ( How to )

Post Reply
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Monitorear/Visualizar arranque de la aplicacion ( How to )

Post by Raymundo Islas M. »

Hola a Todos,

Tengo la siguiente curiosidad :

En la app que estoy ajustando/depurando, al momento de ejecutarla muestro un dialogo que indica el avance en la creacion de archivos indices ( si estos no existen ) y como todos sabemos segun sea el tamaño de los archivos sera el tiempo usado para tal fin y con el Progress los usuarios ven que tanto falta para que acabe el proceso.
Esto lo hago en el Init Procedure.

Ahora, cuando la funcion Main() toma control empiezo a "levantar" la aplicacion : definir el Folder principal, los controles de cada pestaña, obtener los datos de algunos arreglos, etc, etc.
Esto toma algunos segundos ( 2 a 3 ) en el caso de la Pc Servidor ya que tiene los archivos y ( 5 a 6 ) en las Pcs terminales via lan.

Y durante este lapso ( que para algunos usuarios que son desesperados e impacientes ) como no ven nada en la pantalla, piensan que no se esta ejecutando la app o que ya se congelo la Pc.

Me gustaria mostrar con un progress algo que indique el avance de como la App se esta "armando" para que sepan cuanto falta, el detalle que todo esto se hace en la funcion Main(), cosa que complica la situacion.

Ya probe sacando todo eso de la Main() y pasarla a otra Funcion, pero nop, no le encuentro.

Alguien que pueda darme una poca de luz.


Gracias de antemano.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Post by Willi Quintana »

Lo hago asi:

// inicio del prgrama

oObjT := AvisoConexion("Analizando la Base de Datos,,,", 1, cTitle)
HazFunction1()
oObjT:End()
oObjT := AvisoConexion("Verificando Integridad,,,", 66, cTitle)
HazFunction2()
oObjT:End()
oObjT := AvisoConexion("Abriendo Base de Datos,,,", 66, cTitle)
HazFunction3()
oObjT:End()

DEFINE ICON oIcon RESOURCE "SVITE"
DEFINE CURSOR oCursor HAND
DEFINE BRUSH oBrush FILENAME oApp:iLogo
DEFINE WINDOW oWnd MDI .......................................


//--------------------------------
Function AvisoConexion(cSay, nAva, cTitle)
local oDlgAv, oSay, oEka, oMySQL
local oPMeter, vPMeter, oFont
DEFAULT cTitle := ""

vPMeter := nAva

cTitle := IF(EMPTy(cTitle),"SVITE...", cTitle)

DEFINE FONT oFont NAME "Arial" BOLD SIZE 7,16
DEFINE DIALOG oDlgAv RESOURCE "MYSQL" TITLE cTitle

REDEFINE BTNBMP oEka ;
RESOURCE "EKA0" NOBORDER ;
ID 103 OF oDlgAv
REDEFINE BTNBMP oMySql ;
RESOURCE "MYSQL" NOBORDER ;
ID 104 OF oDlgAv
REDEFINE SAY oSay ;
VAR cSay ;
FONT oFont ;
COLOR CLR_RED ;
ID 101 OF oDlgAv
REDEFINE METER oPMeter ;
VAR vPMeter ID 102 OF oDlgAv

ACTIVATE DIALOG oDlgAv ;
CENTER NOWAIT ;
ON INIT (oPMeter:SET( nAva ) )
oFont:End()

Return( oDlgAv )

//---------------------------------------------------------
Salu2
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Post by Armando »

Ray:

Podría servirte la función Mssgrun() ?

MsgRun( "Mensaje...",, {|| Funcion() } )

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Monitorear/Visualizar arranque de la aplicacion ( How to

Post by FranciscoA »

¿Te sirve esto?

ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT ( MsgRun("Iniciando Sistema",,{||INICIO()}) )
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

Gracias Compañeros por las sugerencias,

Hare pruebas al respecto, de inicio mi intencion era tratar de hacerlo desde un dialogo para mostrar varios progress, pero creo que al final y dependiendo de los resultados, tendria que usar el MsgRun aunque sea solo algun texto.

Willi, de alguna manera la forma que comentas es parecida a la que tengo actualmente, el detalle ( sorry, creo que no lo dije ) es que estoy usando un dialogo como pantalla principal y no una ventana y dentro de dicho dialogo construyo todo.


Muchas Gracias


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Alfredo Arteaga
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico
Contact:

Post by Alfredo Arteaga »

Una opción mas:

Consiste en mostrar un díalogo con la imagen o logo del sistema hasta que se encuentre la estabilidad de la aplicación.

Code: Select all

   -Definición de variables globales y entorno principal
   lInit:=.T.
   ...
   // Solo muestra imagen del sistema
   DEFINE DIALOG oDlc RESOURCE "CARGANDO"
   REDEFINE IMAGE oImg RESOURCE "Carga" ID 100 OF oDlc ADJUST
   REDEFINE SAY oSay PROMPT "Cargando el sistema, espere..." CENTER ID 110 OF oDlc
   ACTIVATE DIALOG oDlc NOWAIT CENTERED
   ...
   - Identificación del ambiente, rutas, permisos, derechos, etc.
   - Construcción de ventana principal
   ...
   ACTIVATE WINDOW oWnd            ;
      ON PAINT Paint_Wnd(hDC,oDlc) ;
      ON INIT  Init_Wnd(...,oDlc:End())  ;
      VALID    End_Wnd(...)

STAT FUNC Paint_Wnd(hDC,oDlc)
   - Coloca Brush o imagen de fondo, ajusta ventana según pantalla y/o resolución usada

   // Vuelve a mostrar el diálogo de carga sobre la ventana ya creada,
   // sucede que todavía le falta estabilizarse y puede tardar varios
   // segundos, mas cuando es la primera vez que se ejecuta la
   // aplicación.
   IF lInit
      oDlc:SetFocus()
      SysRefresh()
      CursorWait()
      lInit:=.F.
   ENDIF

RETURN (NIL)
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

Alfredo,

Es exactamente lo que andaba queriendo hacer !!!


Quedo perfecto !!!


:P


Muchas Gracias por tu opcion.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
mmercado
Posts: 782
Joined: Wed Dec 19, 2007 7:50 am
Location: Salamanca, Gto., México

Post by mmercado »

Hola Raymundo:

Una alternativa más, podrías usar un objeto TAnimate, checa Win32.prg en \FWH\Samples.

Saludos.

Manuel Mercado.
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

Excelente alternativa Maestro Mercado !!

Tambien andaba buscando ese ejemplo con los avi, solo que no recordaba en que archivo se encuetra.


Agradezco enormemente a todos por sus atenciones.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Post by TecniSoftware »

En mi caso, yo ejecuto multiples operaciones ANTES de crear la ventana principal y me gustaría agregar un mensaje de espera mientras se van ejecutando, tal como mencionaban.
Quisiera mostrar un dialogo y como decía Manuel, con una animacion, pero veo que no es posible mostrar un dialogo sin antes crear una ventana.
Hay alguna manera de hacerlo sin ventana o si se puede crear una ventana de manera invisible y luego cerrarla cuando hayan finalizado los procesos?

Desde ya, muchas gracias!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
Alfredo Arteaga
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico
Contact:

Post by Alfredo Arteaga »

Alejando, si es posible crear diálogos. Prueba este código:

Code: Select all

#Include "FiveWin.Ch" 

FUNCTION Main() 
   LOCAL oWnd, lInit:=.T., oDlg, oSay, cSay 

   cSay:="Loading, please wait..." 

   DEFINE DIALOG oDlg FROM 0, 0 TO 5,40 
   @ 1, 1 SAY oSay PROMPT cSay CENTERED 
   ACTIVATE DIALOG oDlg NOWAIT CENTERED 
   SysRefresh() 
   WaitSeconds(2) 

   DEFINE WINDOW oWnd 
   ACTIVATE WINDOW oWnd MAXIMIZED; 
      ON PAINT Paint_Window(oDlg,@lInit) ; 
      ON INIT  Init_Window(oSay,@cSay,oDlg) 

RETURN (NIL) 

STAT FUNC Init_Window(oSay,cSay,oDlg) 
   cSay:="Init process, wait..." 
   oSay:Refresh() 
   WaitSeconds(3) 
   cSay:="Ready!" 
   oSay:Refresh() 
   MsgBeep() 
   WaitSeconds(1) 
   oDlg:End() 
RETURN (NIL) 

STAT FUNC Paint_Window(oDlg,lInit) 
   IF lInit 
      oDlg:SetFocus() 
      SysRefresh() 
      CursorWait() 
      lInit:=.F. 
   ENDIF 
RETURN (NIL) 
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Post by TecniSoftware »

Gracias Alfredo, lo voy a probar.

Saludos!
Alejandro Cebolido
Buenos Aires, Argentina
Post Reply