Página 1 de 1

Ajuda com RichEdit

Enviado: 17 Nov 2011 23:24
por asimoes
Pessoal,
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:
Imagem
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


Ajuda com RichEdit

Enviado: 18 Nov 2011 01:58
por sygecom
Coloque depois do oEdit:REFRESH() a linha abaixo e veja se resolve:
hwg_doevents()

Ajuda com RichEdit

Enviado: 18 Nov 2011 09:10
por asimoes
Mestre Leonardo,

Como sempre a sua solução resolveu a parada.

[]´s