Fórum Problema com o DBGrid #383409

11/08/2010

0

Tenho um DbGrid, onde preciso mudar a altura da linha conforme o tamanho do texto e fazer a quebra da linha. Até aí blz, fiz certinho.   Só que quando rolo a barra de rolagem vertical pra baixo sá o erro: ---------------------------
Debugger Exception Notification
---------------------------
Project raiox.exe raised exception class EInvalidGridOperation with message 'Grid index out of range'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------
  Mas se vou descendo linha por linha com o teclado, não dá o erro só que algumas linhas não aparecem, a barra de rolagem chega ao final e não terminou ainda de aparecer todos os campos. Acredito que o Dbgrid ainda está recionhecendo a sua altura como as linhas tivessem a altura padrão, como altera a altura de algumas linhas dá esse erro.   Alguém pode dar uma força?
Lucas Souza

Lucas Souza

Responder

Posts

11/08/2010

Marco Salles

vc deveria colocar o codigo que vc esta usando para podermos simular o erro    
Responder

Gostei + 0

13/08/2010

Lucas Souza

type
  TMyDBGrid = class(TDBGrid)
published
property DefaultRowHeight;
end;       procedure TfrmFicha.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
  var
  R : TRect;
 altura,carect,resultado,posicao : integer;
begin posicao := dmGeral.cdsFicha.RecNo -1; // A variavel posicao identifica a linha no DbGrid
carect := (Length(trim(dmGeral.cdsFichaDESCRICAO.Value))); // conta a quantidade d ecaracteres no campo if carect > 75 then
begin
altura := 75;
resultado := carect div altura * 18;
end
else
resultado := 18;
TMyDBGrid(DBGrid1).RowHeights[posicao] := resultado;
//Quebra de linha
  R := Rect;
  Dec(R.Bottom,0);
  If Column.Field = dmGeral.cdsFichaDESCRICAO Then
  Begin
    DBGrid1.Canvas.FillRect(Rect);
    DrawText(DBGrid1.Canvas.Handle,PChar(dmGeral.cdsFichaDESCRICAO.AsString),
    Length(dmGeral.cdsFichaDESCRICAO.AsString),R,DT_WORDBREAK);
 end;
end;         Só quando rola pra baixo o DBgrid dá o erro, principalmente com o botão de rolagem do mouse.
Responder

Gostei + 0

13/08/2010

Eriley Barbosa

Não seria mais fácil utilizar o DBCtrlGris ou o StringGrid?   Atenciosamente   Eriley
Responder

Gostei + 0

13/08/2010

Marco Salles

Tenta testar a Variavel Posicao
posicao := cdsFicha.RecNo -1; // A variavel posicao identifica a linha no DbGrid
if posicao  >= 0 Then
....
...
 
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar