Monitorear/Visualizar arranque de la aplicacion ( How to )
- 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 )
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
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
- Willi Quintana
- Posts: 859
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
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
// 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
Ray:
Podría servirte la función Mssgrun() ?
MsgRun( "Mensaje...",, {|| Funcion() } )
Saludos
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- 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
¿Te sirve esto?
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT ( MsgRun("Iniciando Sistema",,{||INICIO()}) )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT ( MsgRun("Iniciando Sistema",,{||INICIO()}) )
- Raymundo Islas M.
- Posts: 590
- Joined: Tue Mar 14, 2006 11:34 pm
- Location: Acapulco, Gro. MEXICO
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
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
- Alfredo Arteaga
- Posts: 326
- Joined: Sun Oct 09, 2005 5:22 pm
- Location: Mexico
- Contact:
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.
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)
- Raymundo Islas M.
- Posts: 590
- Joined: Tue Mar 14, 2006 11:34 pm
- Location: Acapulco, Gro. MEXICO
- Raymundo Islas M.
- Posts: 590
- Joined: Tue Mar 14, 2006 11:34 pm
- Location: Acapulco, Gro. MEXICO
- TecniSoftware
- Posts: 213
- Joined: Fri Oct 28, 2005 6:29 pm
- Location: Quilmes, Buenos Aires, Argentina
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!
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
Buenos Aires, Argentina
- Alfredo Arteaga
- Posts: 326
- Joined: Sun Oct 09, 2005 5:22 pm
- Location: Mexico
- Contact:
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)
- TecniSoftware
- Posts: 213
- Joined: Fri Oct 28, 2005 6:29 pm
- Location: Quilmes, Buenos Aires, Argentina