Página 1 de 1

DO EVENTS

Enviado: 06 Jun 2015 12:08
por Hasse
Bom dia colegas.

a)-Onde e como posso estudar e aprender algo a respeito de DO EVENTS e suas variantes ?

b)-Em quais situações o DO EVENTS traz problemas ?


Preciso aprender e dominar este comando / função ( ???? ) - Entender o que ele faz, qual a sua real utilidade.

Procurei no Fórum e nada me ajudou.

Procurei na Internet ->
https://support.microsoft.com/pt-br/kb/118468/pt-br, e a coisa complicou de vez.....

Aqui até melhorou um pouco ->
http://forum.baboo.com.br/index.php?/to ... -que-isso/

DO EVENTS

Enviado: 08 Jun 2015 11:20
por HASA
:))
Eu uso o Do Events no caso de chamadas repetitivas a eventos EX:

form1.texto1.enable := .f.
form1.texto2.enable := .f.
form1.texto3.enable := .f.
form1.texto4.enable := .f.

do events

Quando carrego uma progressbar na indexação de arquivos, e sempre que executo vários comando de uma vez, o Do events libera o processamento impedindo aquela impressão que o sistema travou, ficando BRANCA a tela ou dando a mensagem que o sistema parou de responder ok.

Uso assim
:)Pos
HASA

DO EVENTS

Enviado: 08 Jun 2015 12:22
por alxsts
Olá!

Em uma tradução livre, "do events" significa "execute eventos". Mas quais eventos? Resposta: os eventos do sistema operacional e de outros processos em execução.

Este comando é indicado quando um aplicativo executa tarefas demoradas e/ou que consumam vários recursos do sistema, tomando tempo e recursos de outros processos. Quando se emite um DO EVENTS, estamos dizendo ao sistema operacional para dedicar uma fatia de seu tempo aos outros processos. Como o sistema operacional trabalha em multi-tarefa, o tempo é dividido entre as tarefas, de acordo com as prioridades definidas.

DO EVENTS

Enviado: 08 Jun 2015 17:41
por Hasse
Boa tarde.

Obrigado aos colegas HASA e alxsts que me encaminharam os seus conhecimentos a respeito.

Nos próximos dias postarei algumas dúvidas concretas, com códigos.

DO EVENTS

Enviado: 09 Jun 2015 19:27
por Hasse
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 ) ????).

DO EVENTS

Enviado: 10 Jun 2015 09:22
por HASA
:-o
Hasse, use somente o do events retire o outro comando ok.

HASA

DO EVENTS

Enviado: 10 Jun 2015 11:05
por alxsts
Olá!

Operações de preenchimento de textos de labels e text boxes não são pesadas, a não ser que estejam dentro de um loop. Se o código mostrado não estiver dentro de um loop, não é necessário invocar DO EVENTS tantas vezes. Deixe apenas a última chamada.

DO EVENTS

Enviado: 10 Jun 2015 11:35
por HASA
:))
Olá Hasse, bem colocado pelo colega alxsts, use o DO EVENTS com moderação, ou seja, a cada carga de varios eventos 1 do events, ok.
:)Pos
HASA

DO EVENTS

Enviado: 11 Jun 2015 20:38
por Mario Mesquita
Pessoal, boa noite.

Tenho um programa que também, dá esse "branco" de tela em algumas operações, principalmente se o usuário tira o foco para outro aplicativo. Ao voltar ao programa ele fica com a tela aparentemente travada com aquele prompt do windows "girando". Embora ele continue processando, o usuário acha que está travado e aborta o programa. Imagino que isso dependa de coisas como: capacidade da máquina, quantas janelas abertas etc.

Vendo esse post, acho que o DO EVENTS pode resolver isso. Como nunca o usei, pergunto a vocês:

Qual as operações que mais podem causar esses problemas que o comando pode evitar?

Como devo usa-lo? No início do módulo ou antes de um loop em uma tabela, por exemplo?

Reparei que o uso do objeto BROWSE da MiniGui, deixa o programa lento algumas vezes. Seria o caso de usar o DO EVENTS na hora de abrir um browse, que em tese edita e navega numa tabela inteira?

Desde já, agradeço qualquer dica.

Saudações,
Mario.