Ir para conteúdo
Fórum Script Brasil
  • 0

Lentidão DrawColumnCell checkbox


DanielR

Pergunta

Boa tarde a todos!

Pessoal, hoje me deparei com uma situação bem inusitada( pelo menos pra mim), trata-se do checkbox no dbgrid.

Bem, eu utilizo esse recurso a anos, porém hoje ao criar uma nova grade em uma nova tela percebo uma lentidão incrível. Ao rodar a aplicação e clicar no ckeckbox dava para ir tomar um cafezinho e voltar para então ver o check marcado ou desmarcado. Levei um susto e fui conferir algumas grades, a minha surpresa estava tudo normal. Pensei é aqui o problema, vamos atras, nada encontrei de anormal. Bom para descargo de consciência criei uma tela semelhante a outra que esta funcionado, chamando os mesmos métodos, buscando os mesmos dados no banco, a grid com as propriedades setadas igualmente e o resultado é o seguinte: access Violation na linha  Check := IS_CHECK[Column.Field.AsInteger = 1]; outro detalhe, na maquina do colega desenvolvedor, o access violation não ocorria mesmo dentro de um try except end, no entanto a lentidão era a mesma.

Alguém já viu algo parecido?

Obrigado pela atenção.

Segue o código.

procedure TfrmGerenciamentoFinanceiro.dbgContasReceberDrawColumnCell(
  Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
const
  IS_CHECK: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  Check : Integer;
  R : TRect;
begin
  inherited;
  if cdsContasReceber.Active then
  begin
    with dbgContasReceber do
    begin
      if Column.FieldName = 'IMPRIMIR' then
      begin
        Canvas.FillRect(Rect);
        Check := IS_CHECK[Column.Field.AsInteger = 1]; // Aqui estou tendo access Violation
        R := Rect;
        InflateRect(R, -2,-2);
        DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, Check);
      end
    end;
  end;
end;

 

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

o evento OnDrawColumnCell por sí só é um loop eterno

o que pode ajudar quanto a velocidade, é trazer para o DBgrid poucos registros e não a tabela toda

Erro: access Violation na linha  Check := IS_CHECK[Column.Field.AsInteger = 1];

o erro poder ser do próprio componente ( DBgrid )  ou pode ser dos componentes de acesso ao Banco de Dados ....  ( Tabela Contas a Receber ) que estão ligados ao DBGrid

já peguei erro desse tipo, onde a troca dos componentes e um Build All Projects resolveram o problema

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Opa Jonas, obrigado pelo retorno, mas não mencionei um outro detalhe, quanto ao componente testei o TDBGrid, assim como a grid o JEDI. Em ambos o mesmo resultado.

já quanto ao build completa não cheguei a fazer. 

O que fiz foi mudar de checkbox para uma imagem que imita um, assim sendo passei por outros métodos e não tive o problema da lentidão, mas vou testar porque com certeza não normal o que aconteceu.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...