Recorro a vocês nesse probleminha:
Acontece o seguinte estou contruindo uma rotina de processamento que deve exibir para o usuário vários processos.
No qual inicializo a janela com a função msgini() como nomodal, até ai ok.
A função msgtroca() atualiza o RichEdit iniciado na msgini, quando há um loop "DO WHILE !&cProprios.->(Eof())" com muitos registros, parece que dá uma travada, exibindo mensagem de erro:

Tentei oEdit:Refresh(), mas nada aconteceu.
Tem alguma outra forma?
Código: Selecionar todos
MsgIni()
cTexto:=PADR("Processando "+cProprios,50," ")
MsgTroca(2,cTexto)
&cProprios.->(DbGoTop())
DO WHILE !&cProprios.->(Eof())
IF !PROPRIO->(DbSeek(&cProprios.->NumLote+&cProprios.->NumCad,.T.))
PROPRIO->(DbAppend())
PROPRIO->NumLote :=&cProprios.->NumLote
PROPRIO->NumCad :=&cProprios.->NumCad
ELSE
PROPRIO->(DbRLock())
ENDIF
PROPRIO->NumPasta:=&cProprios.->NumPasta
PROPRIO->(DbCommit())
PROPRIO->(DbUnLock())
oEdit:Refresh()
&cProprios.->(DbSkip())
ENDDO
Código: Selecionar todos
FUNCTION MsgIni( nOrdem, cMensagem )
LOCAL oFonte := HFont():Add( "Courier New" , 0 ,-15,500,255 )
LOCAL oFont2 := HFont():Add( "Lucida Console",0,-13 )
LOCAL cTitulo:="Aviso do Sistema"
INIT DIALOG oDlg ;
TITLE cTitulo ;
AT 0,0 SIZE 605,300 ;
CLIPPER ;
FONT oFonte ;
STYLE DS_CENTER + WS_VISIBLE
@ 10,10 RichEdit oEdit TEXT "" SIZE 580,230;
OF oDLG ID ID_TEXTO;
COLOR 0 BACKCOLOR 16777215 ;
ON getfocus {|| TopoDoc()};
STYLE WS_HSCROLL+WS_VSCROLL+ES_LEFT+ES_MULTILINE+ES_READONLY;
FONT oFont2
ACTIVATE DIALOG oDlg NOMODAL
oDlg:center()
UPDATEWINDOW( oDlg:handle )
RETURN .T.
FUNCTION MsgTroca(nOrdem,cMensagem)
LOCAL cAux:=""
nPosicao:=ASCAN(aTexto,{|AVAL|AVAL[1] == nOrdem})
IF nPosicao = 0
AADD(aTexto,{nOrdem,cMensagem})
ELSE
aTexto[nPosicao,2]:=aTexto[nPosicao,2]+" "+cMensagem+Chr(13)+Chr(10)
ENDIF
FOR V:=1 TO Len(aTexto)
cAux+=aTexto[V,2]
NEXT
oEdit:SetText(cAux)
oDlg:Refresh()
UPDATEWINDOW( oDlg:handle )
RETURN Nil

