sexta-feira, 6 de maio de 2011

Eliminando o efeito flicker do letreiro digital

Esta semana um de meus clientes reclamou do flickering ou efeito flicker (pisca-pisca) no letreiro digital de um de meus programas de painel eletrônico. Realmente havia um pouco de flicker, mas nada que atrapalhasse tanto. Porém ele afirmou que o efeito estava tornando a mensagem ilegível. Pesquisando um pouco descobri que alguns temas, como o Classic, do Windows 7 (S.O. do cliente), este efeito aparece bastante nos forms. Pedi para ele testar o tema Aero enquanto não encontrava uma solução. Mas com um pouco mais de pesquisa descobri uma propriedade que praticamente eliminou o efeito: DoubleBuffered.

Basta acrescentar o código abaixo no evento OnCreate do form:

Panel1.DoubleBuffered := true;
Label1.ControlStyle := Label1.ControlStyle + [csOpaque];

A propriedade ControlStyle também ajuda na eliminação deste efeito. Quando em true, DoubleBuffered vai requerer um pouco mais de memória, mas nada que comprometa o desempenho do sistema. A idéia por trás da propriedade DoubleBuffered é preparar a imagem da tela na memória, antes de sua exibição e então torná-la visível.

Fontes:

Picture Motion - Double Buffering
http://delphi.about.com/library/bluc/text/uc092700a.htm

GDI Graphics In Delphi
http://delphi.about.com/library/bluc/text/uc052102g.htm

[]'s,

Ericson Benjamim.