Bom dia HASA e alsxts.
Voltando ao assunto DO EVENTS....
Quando iniciei o desenvolvimento do meu primeiro aplicativo em MiniGui, tive a inestimável colaboração do colega ASimoes.
No código há algumas linhas do tipo LABEL que informam o andamento do processo.
Estes LABEL estão, tanto na rotina de leitura de um Banco baseado em Oracle como também em pequenas funções chamadas a partir dela.
Quando o foco estava fora da tela (só tem uma), ou seja, o operador estava usando outro aplicativo naquele momento, as informações não eram atualizadas conforme os LABEL eram processados.
Para contornar isto, o colega ASimoes sugeriu usar o "HB_IdleSleep( 1 )" mais o "DO EVENTS". Isto deveria servir para "setar" o LABEL, como abaixo:
Código: Selecionar todos
FUNCTION Baixa_Prescr( oConexao )
...
...
_SetValue( 'label_1', 'form_1', 'Conexão ATIVA' )
Form_1.label_1.FontColor := RED
_SetValue( 'label_1', 'Form_1', '* * = = Abrindo conexão com o ' + c_NmHospCt + ' = = * *' )
_SetValue( 'label_2', 'Form_1', '* * = = ' + c_NmHospLg + ' = = * *' )
HB_IdleSleep( 1 )
DO EVENTS
...
...
Form_1.Title := "ConexÆo ATIVA com o Oracle do Hospital " + c_NmHospCt
Form_1.label_1.FontColor := BLUE
_SetValue( 'label_1', 'Form_1', '* * = = Conexão ABERTA com o ' + c_NmHospCt + ' = = * *' )
HB_IdleSleep( 1 )
DO EVENTS
...
...
Form_1.label_1.FontColor := GREEN
_SetValue( 'label_1', 'Form_1', 'Importando Prescrição n§ ' + c_Prescric )
Form_1.label_2.FontColor := BLUE
_SetValue( 'label_2', 'Form_1', 'Paciente: ' + c_Nome1 )
HB_IdleSleep( 1 )
DO EVENTS
...
...
Form_1.label_2.FontColor := BLUE
_SetValue( 'label_2', 'Form_1', 'Gravando a data/hora da BAIXA da Prescrição' )
HB_IdleSleep( 1 )
DO EVENTS
...
...
Form_1.label_1.FontColor := BLUE
_SetValue( 'label_2', 'Form_1', 'Download da Prescrição ' + c_Prescric + ' finalizada' )
HB_IdleSleep( 1 )
DO EVENTS
...
...
Form_1.label_1.FontColor := BLUE
_SetValue( 'label_1', 'Form_1', 'ENCERRADA a Conexão com o TASY - Aguardando novo período.' )
_SetValue( 'label_2', 'Form_1', 'Não há mais Prescrições para baixar.' )
HB_IdleSleep( 1 )
DO EVENTS
...
...
RETURN( l_Conex )
Realmente as informações são atualizadas mesmo que o foco não esteja na tela.
Aí começou a acontecer uma coisa estranha.
Em determinados pontos do processamento a rotina simplesmente encerra, retornando o processamento para a tela principal.
Ou seja: Parece que o DO EVENTS tem algumas particularidades especiais que devem ser observadas (ou é o HB_IdleSleep( 1 )

?).