Fórum Ajustar largura da coluna do DbGrid com o tamanho do campo #396505
01/03/2011
0
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
// --> Atualiza a tela
LockWindowUpdate(0);
// --> Se o tamanho da coluna for maior do que o valor da tag que teoricamente é o tamanho maximo
if Column.Width >= Column.Field.Tag then
begin
// --> Se o tamanho do titulo da coluna for menor do que o tamanho(largura) do Field
if Canvas.TextWidth(Column.Title.Caption) < Canvas.TextWidth(Column.Field.AsString) then
begin
// --> Se a coluna for menor do que o tamanho(largura) do Field
if Column.Width < Canvas.TextWidth(Column.Field.AsString) then
begin
// --> Acrescenta o tamanho(largura) do field para o tamanho(largura) da coluna
Column.Width := Canvas.TextWidth(Column.Field.AsString) + 15;
// --> Acrescenta na tag do field o tamanho atribuido para coluna, até que seja o maior tamanho
Column.Field.Tag := Canvas.TextWidth(Column.Field.AsString) + 15;
end
end;
end;
// --> Atualiza a tela
LockWindowUpdate(0);
end;
Leandro Costa
Curtir tópico
+ 0Posts
01/03/2011
Marco Salles
begin
//FixDbGridColumnsWidth(dbgGridExemplo);
DimensionarGrid(DbGrid1,self);
end; Utlizar o OnDrawColummCell vc estara sempre redimensionando conforme a grade for pintada , o que muitsd das vezes causa cintilação , Ja no OnResize vc executara o método qnd realmente for necessário.
Gostei + 0
27/06/2012
Frederico Brigatte***
Gostei + 0
27/06/2012
Frederico Brigatte***
procedure DimensionarGrid(dbg: TDbGrid; var formulario);
Logo abaixo da diretiva {$R *.dfm} colei a procedure TForm1.DimensionarGrid(dbg: TDbGrid; var formulario);
Access violation ao executar o programa e para nessa linha:
Asize[idx]:= dbg.Columns[idx].Field.Size;
Gostei + 0
27/06/2012
Marco Salles
procedure DimensionarGrid(dbg: TDbGrid; var formulario);
Logo abaixo da diretiva {$R *.dfm} colei a procedure TForm1.DimensionarGrid(dbg: TDbGrid; var formulario);
Access violation ao executar o programa e para nessa linha:
Asize[idx]:= dbg.Columns[idx].Field.Size;
Desculpe , mas não entendi direito o que vc fez
Vc tem um método DimensionarGrid(dbg: TDbGrid; var formulario); que deve ser Definido na secção Private ou publica do seu form que contem o dbgrid
type
TForm1 = class (TFOmr)
...
Private
procedure DimensionarGrid(dbg: TDbGrid; var formulario)
....
end;
Esta procedure deve ser definida na secção Implementatio deste Formulário
implementation
//deefin aqui a procedure
Vc deve ir no evento OnRize (Objeto Inspector) do Formulário dar um click para que o Delphi o defina e na sua implemtação
escrever
procedure TForm1.FormResize(Sender: TObject);
begin
DimensionarGrid(SeuDbGrid,self);
end;
[]sds
Gostei + 0
27/06/2012
Frederico Brigatte***
Logo abaixo da implementation e {$R *.dfm} colei a procedure
implementation
{$R *.dfm}
**aqui**
procedure TForm1.DimensionarGrid(dbg: TDbGrid; var formulario);
type
TArray = Array of integer;
procedure AjustarColumns(Swidth,TSize:integer;Asize:TArray);
var
idx:integer;
begin
No onResize colei:
procedure TForm1.FormResize(Sender: TObject);
begin
DimensionarGrid(DBGrid1,self);
end;
Gostei + 0
27/06/2012
Frederico Brigatte***
Ta logo abaixo da implementation
procedure TForm1.DimensionarGrid(dbg: TDbGrid; var formulario);
Erros:
Undeclared identifier: DimensionarGrid
Gostei + 0
27/06/2012
Marco Salles
Ta logo abaixo da implementation
procedure TForm1.DimensionarGrid(dbg: TDbGrid; var formulario);
Erros:
Undeclared identifier: DimensionarGrid
Vc deve defini-la como um método da classe do Form
No meu caso a classe do Form é TForm1 , mas pode ser diferente na sua
Gostei + 0
27/06/2012
Frederico Brigatte***
Gostei + 0
27/06/2012
Marco Salles
Vou ve-lo com mais calma a noite
[]sds
Gostei + 0
27/06/2012
Frederico Brigatte***
Gostei + 0
27/06/2012
Marco Salles
Sim
Gostei + 0
27/06/2012
Frederico Brigatte***
procedure TForm1.Button1Click(Sender: TObject); var s : string; begin s := Select CodigoCliente As Código, Nome As Cliente from Clientes; // s := Select Produto As Produto, Tipo As Tipo from Produtos; qry.close; qry.sql.clear; qry.SQL.add(s); qry.Prepared := true; qry.open; end;
O que preciso fazer para funcionar? Quando clico no botão, executa a sql e os campos estão grandes. Quando coloco a procedure, dá erro. Me ajude...
Gostei + 0
27/06/2012
Deivison Melo
Chegou a verificar o link abaixo:
https://www.devmedia.com.br/redimensionar-colunas-dbgrid-delphi/18076
Gostei + 0
27/06/2012
Frederico Brigatte***
Gostei + 0
27/06/2012
Marco Salles
Abri o seu dpr , mas não tem nada
vc so colocou a query mas não definiu a procedure e nem com e onde esta usando-a
Pelo menos para mim so veio um evento em um único Button
procedure TForm1.Button1Click(Sender: TObject);
var
s : string;
begin
// s := Select CodigoCliente As Codigo, Nome As Cliente from Clientes;
s := Select Produto As Produto, Tipo As Tipo from Produtos;
qry.close;
qry.sql.clear;
qry.SQL.add(s);
qry.Prepared := true;
qry.open;
end;
Mas como o dbgrid será ajustado ???
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)