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

(Resolvido) Alterar altura da linha do DBGrid automaticamente


Douglas Soares

Pergunta

Bom dia, tenho um código para o dbgrid pular linha, ou melhor, para fazer um wordwrap no texto... daí eu preciso aumentar o tamanho da linha conforme o texto, o código é esse:

procedure TfrmCadClientes.DBGrid5DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
R : TRect;
begin
R := Rect;
  Dec(R.Bottom,0);
  If Column.Field = cdsOcorre.FieldByName('HISTORICO') Then
  Begin
    DBGrid5.Canvas.FillRect(R);
    DrawText(DBGrid5.Canvas.Handle,PChar(cdsOcorre.FieldByName('HISTORICO').AsString),Length(cdsOcorre.FieldByName('HISTORICO').AsString),R,DT_WORDBREAK);
  end;
end;

Tenho 2 situações, quando o texto for maior que 84 caracteres então aumente para 2 linhas, ou seja, howheight 28, e quando for maior que 172 então é 3 linhas e o howheight vai para 42...

P.S: achei um post seu com a mesma dúvida, pórem não consegui de maneira algum utilizar a sua função :ninja:

http://scriptbrasil.com.br/forum/index.php?showtopic=144939

alguém pode me ajudar???

Obrigado

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Tenho 2 situações, quando o texto for maior que 84 caracteres então aumente para 2 linhas, ou seja, howheight 28, e quando for maior que 172 então é 3 linhas e o howheight vai para 42...

P.S: achei um post seu com a mesma dúvida, pórem não consegui de maneira algum utilizar a sua função

http://scriptbrasil.com.br/forum/index.php?showtopic=144939

alguém pode me ajudar???

No exemplo, ele funciona perfeitamente se voce não rolar o dbgrid ... quando voce rola ele perde a referencia da 1ª

linha e bagunça o restante... a dica é fazer com que a referencia da linha não se perca em relação ao tamanho do dbgrid ( ou seja a quantidade de linhas visiveis no dbgrid ).

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, Db, DBTables;

type
  TForm1 = class(TForm)
    Query1: TQuery;
    Query1CODPRO: TStringField;
    Query1DESCRI: TStringField;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  cc : integer = 14;
  cr : integer = 0;
  cx : integer = 0;
implementation

{$R *.DFM}

type
TMyDBGrid = class(TDBGrid)
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var R, Rx : TRect;
begin
   inc(cx);
   R := Rect;
   Dec(R.Bottom,0);
   if cx = 1 then Rx := R;

   If odd(query1.RecNo) then
      begin
         DBGrid1.Canvas.Font.Color:= clBlack;
         DBGrid1.Canvas.Brush.Color:= cl3DLight;
         if (cc = 14) and (Length(trim(Query1DESCRI.Value)) > 84) then  // o nº 84 é o tamanho da quebra do texto
            begin
               cc := cc + 14;   // o nº 14 é a altura da linha
               TMyDBGrid(DBGrid1).RowHeights[query1.RecNo] := cc;
            end
         else
            cc := 14;

      end
   else
      begin
         DBGrid1.Canvas.Font.Color:= clBlack;
         DBGrid1.Canvas.Brush.Color:= clWhite;
         if (cc = 14) and (Length(trim(Query1DESCRI.Value)) > 84) then
            begin
               cc := cc + 14;
               TMyDBGrid(DBGrid1).RowHeights[query1.RecNo] := cc;
            end
         else
            cc := 14;

      end;

   if (gdSelected in state) then
      DBGrid1.Canvas.Font.Color:= clred
   else
      DBGrid1.Canvas.Font.Color:= clBlack;

   if Column.Field = Query1DESCRI Then
      begin
         if Length(Query1DESCRI.Value) < 84 then
            begin
               R := Rx;
               TMyDBGrid(DBGrid1).RowHeights[query1.RecNo] := 0;  // voltar a altura normal 
            end
         else
            TMyDBGrid(DBGrid1).RowHeights[query1.RecNo] := 14; // tamanho da altura com 1 quebra de linha

         DBGrid1.Canvas.FillRect(Rect);
         DrawText(DBGrid1.Canvas.Handle,PChar(Query1DESCRI.Value),Length(Query1DESCRI.Value),R,DT_WORDBREAK);
         cr := DrawText(DBGrid1.Canvas.Handle,PChar(Query1DESCRI.Value),Length(Query1DESCRI.Value),R,DT_WORDBREAK);
         TMyDBGrid(DBGrid1).RowCount := query1.RecordCount;

      end;
end;


end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Estou sem tempo para resolver esse problema, no entanto fiz de outro jeito.... usei o componente JVDBGRID da biblioteca Jedi e então usei a opção EditControls, ou seja... quando eu dou 2 cliques no field ele abre um edit grande, daí eu vizualizo toda a informação do campo... o pessoal aqui gostou, então vai ficar assim mesmo!

Obrigado pela ajuda prestada!

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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...