Estimados, las funciones abajo definidas las uso para poner un mensaje en pantalla cuando estoy calculando o procesando algo que tarda algunos minutos:
Ej.
- Code: Select all Expand view RUN
bPant:=mensaje('Calculando inventario','espere...')
while !eof()
...
...
CursoMens('No. parte '+cPieza
end
eval(bPant)
el problema de este codigo, es que en algun momento durante el proceso si entro a otra aplicacion o tarea en mi pc, esté dialogo me pone en el titulo "(no responde)", pero si lo esta haciendo
Alguien de ustedes maneja algo algo parecedio a lo que hago, pero sin datalles del que platico. Compartan algun ejemplo...!!!
- Code: Select all Expand view RUN
function Mensaje(cMensaje,cTitulo,cPie,cBitMap)
local oFont,nAncho,nMensaje,oSay,oBtn,oPie,nR
default cBitMap:='GOMENS'
aadd(aMensaje,NIL) ; nMensaje:=len(aMensaje)
if cTitulo==NIL
cTitulo:="Procesando..."
endif
if ISOBJECT(aMensaje[nMensaje])
aMensaje[nMensaje]:End()
aMensaje[nMensaje]:=NIL
SysRefresh()
endif
DEFINE FONT oFont NAME "ARIAL" SIZE 0,-12
nAncho:=max(len(cMensaje),len(cTitulo))
if cPie<>NIL
nAncho:=max(nAncho,len(cPie))
endif
nAncho+=10
DEFINE DIALOG aMensaje[nMensaje] FROM 0,0 TO 6,nAncho;
TITLE Ota(cTitulo) STYLE DS_MODALFRAME
SET FONT OF aMensaje[nMensaje] TO oFont
if cMensaje==NIL
cMensaje:='Un momento...'
endif
aMensaje[nMensaje]:lHelpIcon:=.f.
aMensaje[nMensaje]:nWidth:=max(len(cMensaje),len(cTitulo))*8
CursorWait()
@ 0,0 BITMAP oBmpMens RESOURCE cBitMap SIZE 35,35 ADJUST PIXEL NOBORDER OF aMensaje[nMensaje]
oSay:=TSay():New(Row2Pxl(0.8),Col2Pxl(6),{||Ota(cMensaje)},aMensaje[nMensaje],,aMensaje[nMensaje]:oFont,.F.,.F.,.F.,.T.,COLOR_NEGRO,,SAYS_LARGO(cMensaje,aMensaje[nMensaje]:oFont),10,.F.,.F.,.F.,.F.,.F.)
if cPie<>NIL
oPie:=TSay():New(Row2Pxl(1.5),Col2Pxl(6),{||Ota(cPie)},aMensaje[nMensaje],,aMensaje[nMensaje]:oFont,.F.,.F.,.F.,.T.,COLOR_AZUL,,nAncho*DLG_CHARPIX_W/2,10,.F.,.F.,.F.,.F.,.F.)
endif
ACTIVATE DIALOG aMensaje[nMensaje] CENTER NOWAIT
SysRefresh()
return {||CursorArrow(),CierraMens()}
// --- Cierra un Mensaje
static function CierraMens()
local nMensaje:=len(aMensaje)
if ISOBJECT(aMensaje[nMensaje])
aMensaje[nMensaje]:End()
endif
oBmpMens:End()
SysRefresh()
adel(aMensaje,nMensaje) ; asize(aMensaje,--nMensaje)
return NIL
// --- Despliega en area de mensaje el curso del avance
function CursoMens(cMensaje)
local nMensaje:=len(aMensaje),i
if cMensaje<>NIL
i:=aScan(aMensaje[nMensaje]:aControls,{|oCtrl|oCtrl:ClassName=='TSAY'})
if i>0
aMensaje[nMensaje]:aControls[i]:nWidth:=Max(len(cMensaje)*8,aMensaje[nMensaje]:aControls[i]:nWidth)
aMensaje[nMensaje]:aControls[i]:VarPut(Ota(cMensaje))
aMensaje[nMensaje]:aControls[i]:Refresh()
endif
endif
return NIL