| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Fev 20, 2017 1:21 pm Assunto: [resolvido] Evento DrawColumnCell Dbgrid |
|
|
Amigos, estou montando uma rotina pra mudar a cor dos dados no grid.
Minha ideia é a seguinte:
-Contas que venceram no sabado, domingo e que estão vencendo hoje, ficam com a cor laranja.
-Contas que venceram na sexta pra traz, cor vermelha
-Contas que vencem de amanhã em diante, cor verde.
PS: não estou conseguindo postar code no site, ele sai todo errado e incompleto, por isso subi um txt no drive.
A rotina que fiz está dando uns erros de read adress. O ruim é que não ocorre sempre e esta me deixando louco.
Se alguém puder analisar o codigo e ver se está tudo certo eu agradeço.
Link: https://drive.google.com/open?id=0B6PYigOlc_ewd0dVSUF6dkJJakk
Editado pela última vez por renanbg em Seg Mar 06, 2017 9:56 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Seg Fev 20, 2017 2:55 pm Assunto: |
|
|
Quando for postar e código sair incompleto e/ou bagunçado, selecione o checkbox Desativar HTML nesta mensagem que deve resolver.
Analisando seu código, me parece correto.
Estes erros de Access Violation acontece quando se tenta acessar algo que ainda não foi criado ou instanciado.
Verifique se você não está tentando acessar o frmdm ou qrContas_receber antes de criá-los.
Fiz algumas alterações no código removendo as linhas repetidas.
Veja se ajuda:
| Código: | var
I: Integer;
campoData: TDateTime;
begin
campoData := frmdm.qrContas_receberVENCIMENTO.AsDateTime;
I := Trunc(Date - campoData);
if campoData < Date then
begin
if ((DayOfWeek(campoData) = 1) or (DayOfWeek(campoData) = 7)) and (DayOfWeek(Date) = 2) then
begin
if (I >= 1) and (I < 3) then
TDBGrid(Sender).Canvas.Font.Color := $000080FF
else
TDBGrid(Sender).Canvas.Font.Color := clRed;
end
else
TDBGrid(Sender).Canvas.Font.Color := clRed;
end
else
if campoData = Date then
TDBGrid(Sender).Canvas.Font.Color := $000080FF
else
TDBGrid(Sender).Canvas.Font.Color := clGreen;
if gdSelected in State then
TDBGrid(Sender).Canvas.Font.Color := clwhite;
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Fev 20, 2017 4:18 pm Assunto: |
|
|
Olá natan.
Infelizmente esse erro não ocorre a todo momento, isso que me intriga.
Pensei que esse codigo podia estar dando algum bug.
Vou repassar novamente todas as linhas desse form, e ver se descubro algo.
Obrigado pela ajuda. |
|
| Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Fev 20, 2017 4:33 pm Assunto: |
|
|
Se o erro é de Access Violation, você pode fazer o seguinte
Vou passar o caminho utilizando com base o Delphi 2010 e o Delphi 6
Delphi 2010
| Citação: | | Acesse Tools > Options > Debugger Options > Embarcadero Debuggers > Native OS Exceptions |
Delphi 6
| Citação: | | Acesse Tools > Debugger Options > OS Exceptions |
Na lista de Exceptions, selecione Access Violation e no Handled By, altere de User Program para Debugger
Assim, quando estourar algum erro de Access Violation, o debugger irá apontar a linha que deu o erro pra você |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Ter Fev 21, 2017 10:40 am Assunto: |
|
|
Obrigado pelas dicas.
Fiz uma revisão completa no formulario. Tinha umas 800 linhas. ufa...
Achei alguns casos onde eu limpava os componentes do form 2 vezes atraves de eventos diferentes...não sei se podia ser isso, mas vou ir monitorando e ver no que dá. |
|
| Voltar ao Topo |
|
 |
|