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

Quebra de linha em DBGrid


Victor_DF

Pergunta

Olá pessoal...

Eu estou querendo saber se é possível fazer um DBGrid quebrar a linha quando o tamanho da linha for maior que o previsto? Por exemplo, eu tenho uma linha de 160 caractéres, mas eu quero que apareça no máximo 80 ai o DBGrid quebra a linha e mostra 2 linhas de 80.

Obrigado.

Victor

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Ola Jonas, desculpe a demora, tive uns problemas. Eu ainda estou precisando fazer o aumento da linha no evento DrawColumnCell mas não sei como, nem sei se é possível. Sobre o componente, eu beixei ele e instalei mas ele veio com vários erros internos, e para evitar maiors dores de cabeça eu prefiro tentar usar o DBGrid nativo do delphi, que é o usado no sistema da minha empresa.

Tem como fazer o que eu quero?

Obrigado e mais uma vez me desculpo pela demora.

Link para o comentário
Compartilhar em outros sites

  • 0
Ola Jonas, desculpe a demora, tive uns problemas. Eu ainda estou precisando fazer o aumento da linha no evento DrawColumnCell mas não sei como, nem sei se é possível. Sobre o componente, eu beixei ele e instalei mas ele veio com vários erros internos, e para evitar maiors dores de cabeça eu prefiro tentar usar o DBGrid nativo do delphi, que é o usado no sistema da minha empresa.

Tem como fazer o que eu quero?

A um tempo atráz fiz isso, mas o código precisa de umas melhorias

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)) > 11) then  // o nº 11 é 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)) > 11) 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) < 11 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.

OBS: Voce tem que levar em consideração que se o texto do campo do dbgrid ultrapassar mais de uma quebra de linha ele será incrementado de mais 14 ( altura da linha )

coloque o numero max de caracteres que cabem na linha do dbgrid ( no exemplo usei 11 ) ... por ex: se voce consegue ver 25 caracteres coloque no lugar do 11 o numero 25 ( que é a quebra do texto )

estude o código e faça as alterações necessárias

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jonas...

Ficou muito legal. mas quando eu baixo a barra de rolagem, tudo é desconfigurado de novo, parece que quando eu mudo o tamanho das primeiras linhas do DBGrid quando eu abaixo a barra de rolagem as linhas que aparecem ficam com a altura das linhas que estavam aparecendo ai fica tudo desconfigurado, não teria como quando eu abaixar a barra de rolagem fazer uma reconfiguração das linhas? Isso aconteceu quando você testou esse código?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Jonas...

Ficou muito legal. mas quando eu baixo a barra de rolagem, tudo é desconfigurado de novo, parece que quando eu mudo o tamanho das primeiras linhas do DBGrid quando eu abaixo a barra de rolagem as linhas que aparecem ficam com a altura das linhas que estavam aparecendo ai fica tudo desconfigurado, não teria como quando eu abaixar a barra de rolagem fazer uma reconfiguração das linhas? Isso aconteceu quando você testou esse código?

por isso falei que precisa de umas melhorias .... tem como fazer a reconfiguração das linhas e a dica é essa linha de código

TMyDBGrid(DBGrid1).RowHeights[query1.RecNo] := 0; // voltar a altura normal

tente fazer alguns testes para descobrir ... estou sem tempo para resolver esse problema

abraço

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