Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
DanielR

Lentidão DrawColumnCell checkbox

Question

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;

 

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
  • 0

no final desse post tem outra solução

 

experimente tambem trocar os componentes da tabela ... já peguei cada erro sem lógica ou explicação para isso

abraço

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148129
    • Total Posts
      643432
×
×
  • Create New...