Rodrigao Postado Novembro 11, 2008 Denunciar Share Postado Novembro 11, 2008 Bom dia a todos...Estou fanzendo uma rotina de Conta Corrente, onde quando as parcelas são baixadas ficam em Azul e as parcelas nãobaixadas e vencidas ficam em vermelho. O problema é que no Vermelho quando a linha azul da seleção do dbgrid passa por cima dela a cor de fundo da celula fica azul escuro e automaticofica branco na fonte. Mas no Azul não. Quando a linha de seleção azul escuro passa por cima da fonte que esta em azul ela continua azul...Será que tem como resolver isso? if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value <> 'S') then begin DBGrid1.Canvas.Font.Color:= clred; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value = 'S') then begin DBGrid1.Canvas.Font.Color:= clBlue; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;Atenciosamente. Rodrigo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Novembro 11, 2008 Denunciar Share Postado Novembro 11, 2008 Rodrigao, só há mesmo este código no evento OnDrawColumnCell? Aparentemente não haveria nada de errado com ele, exceto que podemos otimizá-lo.Vamos melhorar isto?Quando você testa uma condição onde possam haver diferentes avaliações para uma determinada variável, use if..then..else. Você usou dois if's seguidos e mesmo que a primeira condição seja validada, ainda assim, quantas outras avaliações (if's) você faça, também serão testados (se uma condição foi satisfeita, não há porque testar outra - que não será). Também observe que DefaultDrawColumnCell apenas precisa ser chamado uma única vez antes do end final do evento - todas as definições do canvas devem ter sido alteradas antes:begin if Date > DMX.IBChequeDataVencimento.Value then begin if DMX.IBChequeVENCEU.Value = 'S' then DBGrid1.Canvas.Font.Color:= clBlue else DBGrid1.Canvas.Font.Color:= clred; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;Este código funcina independente de você ter, ou não, definido a propriedade DefaulDraw=False do DBGrid.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rodrigao Postado Novembro 22, 2008 Autor Denunciar Share Postado Novembro 22, 2008 Boa noite Micheus, desculpe a demora a responder, foi porque fui operado esta semana e fiquei bem longe dos micros...hehevamos lao codigo completo é: if Date > DMX.IBChequeDataVencimento.Value then begin // já com as mudanças sugeridas... if DMX.IBChequeVENCEU.Value = 'S' then DBGrid1.Canvas.Font.Color:= clBlue else DBGrid1.Canvas.Font.Color:= clred; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); if Column.Field = DMX.IBChequeVenceu then begin DBGrid1.Canvas.FillRect(Rect); if DMX.IBChequeVenceu.Value = 'S' then ImageList1.Draw(DBGrid1.Canvas, Rect.Left + 14, Rect.Top + 1, 1) else ImageList1.Draw(DBGrid1.Canvas, Rect.Left + 14, Rect.Top + 1, 0); end;deixa eu ver se consigo explicar melhor... a linha do Dbgrid, aquela que seleciona a linha é azul escura certo.Se a opção for a segunda o fonte é pintada de vermelho e quando a linha azul de seleçao fica em cima do vermelho,o dbgrid muda a cor da fonte para branco, ao qual fica a linha de seleção em azul e a fonte de branco fica bem visivel.Agora quando a opção for a primeira ele pinta a fonte de azul e a cor da linha de seleção do dbgrid é azul escuro e não muda a fontepara branco, fica azul mesmo. Dae não da pra enchegar nada, fica ilegivel aquela linha selecionada.Atenciosamente,RodrigoBom dia a todos...Estou fanzendo uma rotina de Conta Corrente, onde quando as parcelas são baixadas ficam em Azul e as parcelas nãobaixadas e vencidas ficam em vermelho. O problema é que no Vermelho quando a linha azul da seleção do dbgrid passa por cima dela a cor de fundo da celula fica azul escuro e automaticofica branco na fonte. Mas no Azul não. Quando a linha de seleção azul escuro passa por cima da fonte que esta em azul ela continua azul...Será que tem como resolver isso? if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value <> 'S') then begin DBGrid1.Canvas.Font.Color:= clred; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value = 'S') then begin DBGrid1.Canvas.Font.Color:= clBlue; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;Atenciosamente. Rodrigo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Novembro 24, 2008 Denunciar Share Postado Novembro 24, 2008 Agora quando a opção for a primeira ele pinta a fonte de azul e a cor da linha de seleção do dbgrid é azul escuro e não muda a fonte para branco, fica azul mesmo. Dae não da pra enchegar nada, fica ilegivel aquela linha selecionada.Rodrigao, está quase tudo certo, inclusive o fato de você ter posto o desenho das imagens após chamar o método DefaultDrawColumnCell, apesar do que como eu disse:"DefaultDrawColumnCell apenas precisa ser chamado uma única vez antes do end final do evento"Este o único tipo de ação cabível de ser usado após o citado método, visto que o desenho padrão é feito por este método. O problema está associado ao fato de você ter pintado o fundo (FillRect) após ter chamado ele.Veja o seu código organizado visualmente e com a referida linha comentada - deverá funcionar do jeito que você espera.if Date > DMX.IBChequeDataVencimento.Value then begin // já com as mudanças sugeridas... if DMX.IBChequeVENCEU.Value = 'S' then DBGrid1.Canvas.Font.Color:= clBlue else DBGrid1.Canvas.Font.Color:= clred; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); if Column.Field = DMX.IBChequeVenceu then begin // DBGrid1.Canvas.FillRect(Rect); <==== RETIRAR if DMX.IBChequeVenceu.Value = 'S' then ImageList1.Draw(DBGrid1.Canvas, Rect.Left + 14, Rect.Top + 1, 1) else ImageList1.Draw(DBGrid1.Canvas, Rect.Left + 14, Rect.Top + 1, 0); end;Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rodrigao Postado Novembro 24, 2008 Autor Denunciar Share Postado Novembro 24, 2008 Boa tarde Micheus,Fiz o que você me orientou, mas a unica mudança foi que no desenho passou a aparecer o valor da field Venceu, no Caso "S" e "N" junto com os desenhos.É possivel deixar aquela linha de seleção mais clara?De repente tb seria uma boa solução.Agradecido.RodrigoBoa noite Micheus, desculpe a demora a responder, foi porque fui operado esta semana e fiquei bem longe dos micros...hehevamos lao codigo completo é: if Date > DMX.IBChequeDataVencimento.Value then begin // já com as mudanças sugeridas... if DMX.IBChequeVENCEU.Value = 'S' then DBGrid1.Canvas.Font.Color:= clBlue else DBGrid1.Canvas.Font.Color:= clred; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); if Column.Field = DMX.IBChequeVenceu then begin DBGrid1.Canvas.FillRect(Rect); if DMX.IBChequeVenceu.Value = 'S' then ImageList1.Draw(DBGrid1.Canvas, Rect.Left + 14, Rect.Top + 1, 1) else ImageList1.Draw(DBGrid1.Canvas, Rect.Left + 14, Rect.Top + 1, 0); end;deixa eu ver se consigo explicar melhor... a linha do Dbgrid, aquela que seleciona a linha é azul escura certo.Se a opção for a segunda o fonte é pintada de vermelho e quando a linha azul de seleçao fica em cima do vermelho,o dbgrid muda a cor da fonte para branco, ao qual fica a linha de seleção em azul e a fonte de branco fica bem visivel.Agora quando a opção for a primeira ele pinta a fonte de azul e a cor da linha de seleção do dbgrid é azul escuro e não muda a fontepara branco, fica azul mesmo. Dae não da pra enchegar nada, fica ilegivel aquela linha selecionada.Atenciosamente,RodrigoBom dia a todos...Estou fanzendo uma rotina de Conta Corrente, onde quando as parcelas são baixadas ficam em Azul e as parcelas nãobaixadas e vencidas ficam em vermelho. O problema é que no Vermelho quando a linha azul da seleção do dbgrid passa por cima dela a cor de fundo da celula fica azul escuro e automaticofica branco na fonte. Mas no Azul não. Quando a linha de seleção azul escuro passa por cima da fonte que esta em azul ela continua azul...Será que tem como resolver isso? if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value <> 'S') then begin DBGrid1.Canvas.Font.Color:= clred; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value = 'S') then begin DBGrid1.Canvas.Font.Color:= clBlue; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;Atenciosamente. Rodrigo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Novembro 24, 2008 Denunciar Share Postado Novembro 24, 2008 Fiz o que você me orientou, mas a unica mudança foi que no desenho passou a aparecer o valor da field Venceu, no Caso "S" e "N" junto com os desenhos.e esta seria a posição onde você estaria sobrepondo a imagem?É possivel deixar aquela linha de seleção mais clara?De repente tb seria uma boa solução.vou tentar fazer um exemplo.RodrigoAbraçosp.s. Evite "quotar" todo o tópico (botão Resp.). Se houver parte de alguma coisa que deva ser mantida para comentário, remova o excedente com cuidado de não deixar a tag aberta (use a opção Visualizar post). Se não houver, use o botão Responder. Isto evita que os posts fiquem confusos. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Rodrigao
Bom dia a todos...
Estou fanzendo uma rotina de Conta Corrente, onde quando as parcelas são baixadas ficam em Azul e as parcelas não
baixadas e vencidas ficam em vermelho.
O problema é que no Vermelho quando a linha azul da seleção do dbgrid passa por cima dela a cor de fundo da celula fica azul escuro e automatico
fica branco na fonte. Mas no Azul não. Quando a linha de seleção azul escuro passa por cima da fonte que esta em azul ela continua azul...
Será que tem como resolver isso?
if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value <> 'S') then begin
DBGrid1.Canvas.Font.Color:= clred;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if (Date > DMX.IBChequeDataVencimento.Value) and (DMX.IBChequeVENCEU.Value = 'S') then begin
DBGrid1.Canvas.Font.Color:= clBlue;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Atenciosamente.
Rodrigo
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.