Ajuda com RichEdit

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Ajuda com RichEdit

Mensagem 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

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Ajuda com RichEdit

Mensagem por sygecom »

Coloque depois do oEdit:REFRESH() a linha abaixo e veja se resolve:
hwg_doevents()
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Ajuda com RichEdit

Mensagem por asimoes »

Mestre Leonardo,

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

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder