Monitorear/Visualizar arranque de la aplicacion ( How to )

Monitorear/Visualizar arranque de la aplicacion ( How to )

Postby Raymundo Islas M. » Tue Aug 19, 2008 1:47 am

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
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby Willi Quintana » Tue Aug 19, 2008 2:20 am

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
Willi Quintana
 
Posts: 1022
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Postby Armando » Tue Aug 19, 2008 2:36 am

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
Armando
 
Posts: 3239
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby FranciscoA » Tue Aug 19, 2008 4:05 am

¿Te sirve esto?

ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT ( MsgRun("Iniciando Sistema",,{||INICIO()}) )
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby Raymundo Islas M. » Tue Aug 19, 2008 2:45 pm

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
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby Alfredo Arteaga » Tue Aug 19, 2008 3:38 pm

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  Expand view  RUN
   -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
Alfredo Arteaga
 
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico

Postby Raymundo Islas M. » Tue Aug 19, 2008 10:03 pm

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
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby mmercado » Wed Aug 20, 2008 12:53 am

Hola Raymundo:

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

Saludos.

Manuel Mercado.
User avatar
mmercado
 
Posts: 782
Joined: Wed Dec 19, 2007 7:50 am
Location: Salamanca, Gto., México

Postby Raymundo Islas M. » Wed Aug 20, 2008 2:10 am

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
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby TecniSoftware » Wed Aug 20, 2008 8:45 pm

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
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Postby Alfredo Arteaga » Thu Aug 21, 2008 3:02 am

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

Code: Select all  Expand view  RUN
#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
Alfredo Arteaga
 
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico

Postby TecniSoftware » Thu Aug 21, 2008 12:39 pm

Gracias Alfredo, lo voy a probar.

Saludos!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 46 guests