Jhosef, esse seu problema até já foi relatado uma vez no site QualityCentral, 
da Embarcadero (http://qc.embarcadero.com/wc/qcmain.aspx?d=3534).

 

As propriedades Color e SelectedColor são usadas pelo TDBCtrlGrid quando a sua 
exibição é feita pelo próprio componente. O fato dessas propriedades serem 
usadas pelo controle para exibição dos painéis, e o fato de você estar 
referenciando uma dessas propriedades (Color) no evento, faz com que o mesmo 
seja disparado várias vezes, causando essa recursão.

 

Tenha em mente que quando você usa o evento OnPaintPanel, é o código neste 
evento que é responsável pela 'pintura' dos painéis do TDBCtrlGrid, e não mais 
o próprio componente. Ou seja, é você que é o responsável por essa exibição 
customizada, e não mais o componente, cabendo ao mesmo apenas chamar o evento 
codificado por você.

 

O help do Delphi explica que, nesse evento, o código deve usar a propriedade 
Canvas para ‘pintar’ o painel, e não simplesmente fazer essa alternância de 
cor, pelos motivos já explicados.

 

Sds.

 

 

De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome 
de Dirlei
Enviada em: segunda-feira, 6 de setembro de 2010 14:54
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] TDBCtrlGrid: Evento OnPaintPanel sendo chamado 
infinitamente

 

  

Quando você muda a propriedade color, o evento OnPaintPanel é chamado
novamente, o que gera uma sequência infinita de chamadas recursivas.

Você precisa atribuir nil ao evento OnPaintPanel no início da
implementação e reatribuir ctrAgendaPaintPanel no final para evitar isso
(de preferencia usando try..finally).

Mas acho que você não quer mudar a cor do DBCtrlGrid inteiro dependendo
do Status (pelo código, me parece que é isso que q vc está fazendo).
Deve haver algum objeto em tempo de execução que represente o painel do
registro corrente no grid. Se houver, é a cor desse painel que você
precisa mudar.

[]'s

-- 
Dirlei Dionísio

Novo artigo: Sorteio de ingresso para o Dev In Rio
http://MaisQueBomCodigo.blogspot.com

Em Seg, 2010-09-06 às 15:14 -0300, Jhosef Marks escreveu:
> procedure TfrmClientePrincipal.ctrAgendaPaintPanel(DBCtrlGrid: TDBCtrlGrid;
> Index: Integer);
> begin
> if DBCtrlGrid.datasource.dataset.FieldByName('STATUS').AsString = 'C'
> then begin
> DBCtrlGrid.Color := $00D2D2FF;
> end else begin
> DBCtrlGrid.Color := clWindow;
> end;
> end;
> 
> Att,
> 
> *Jhosef Marks de Carvalho*
> *Blog: **http://www.jhosefmarks.com.br* <http://www.jhosefmarks.com.br>*
> Jesus est voltando
> 
> *
> *"E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e buscar
> a minha face e se converter dos seus maus caminhos, ento eu ouvirei dos
> cus, e perdoarei os seus pecados, e sararei a sua terra." (2 Cr 7:14) *
> 
> 
> 
> Em 6 de setembro de 2010 15:08, Rubem Rocha
> <rubem.ro...@dtmanaus.com.br <mailto:rubem.rocha%40dtmanaus.com.br> >escreveu:
> 
> >
> >
> > Kd o cdigo do evento????????
> >
> > Sds.
> >
> > De: delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br>  
> > <delphi-br%40yahoogrupos.com.br> [mailto:
> > delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br>  
> > <delphi-br%40yahoogrupos.com.br>] Em
> > nome de Jhosef Marks
> > Enviada em: segunda-feira, 6 de setembro de 2010 13:59
> > Assunto: [delphi-br] TDBCtrlGrid: Evento OnPaintPanel sendo chamado
> > infinitamente
> >
> >
> > Boa tarde a todos, tenho um TDBCtrlGrid com poucos registros (em torno de
> > uns 10).
> >
> > No evento OnPaintPanel, eu fiz uns ifs para que de acordo com o status do
> > registro fosse pintado de uma cor...
> >
> > Acontece que isso est travando o meu formulrio... pois a funo est
> > sendo
> > chamada infinitamente...
> >
> > Algum j uso esse componente e teve algum problema?
> >
> > [As partes desta mensagem que no continham texto foram removidas]
> >
> > 
> >
> 
> 
> [As partes desta mensagem que no continham texto foram removidas]
> 
> 
> 
> ------------------------------------
> 





[As partes desta mensagem que não continham texto foram removidas]

Responder a