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]