[delphi-br] Resize na coluna do DBGrid

2007-04-24 Por tôpico Bruno Antonio Ribeiro de Souza
Olá amigos

Estou desenvolvendo uma aplicação que em todos os forms se usa um 
DBGrid... gostaria de saber se tem como dar um resize nas _*colunas*_ 
para que ele se ajuste ao tamanho do DBGrid...
... Estou utilizando MDI e tem grid que tem 3 colunas, outro Grid 4 
colunas... Então fica muito estranho quando tem 3 colunas e um espaço em 
branco depois até terminar o Grid...

Obrigado

Bruno Souza
CEPEA - Centro de Estudos Avançados em Economia Aplicada
ESALQ/USP


Re: [delphi-br] Resize na coluna do DBGrid

2007-04-24 Por tôpico Celso Lorenzetti - GMail
Olá Bruno,

eu fiz isso, mas via código mesmo...

A idéia é a seguinte: 
FTamanhoColunas: Array of integer; //Mantém o tamanho original das colunas 
quando é maximizado
Mantenha o tamanho original de cada coluna em um Array dinâmico, para quando 
for restaurado voltar elas. Pode utilizar o evento Loaded;


procedure SetTamanhoOriginalColunas;
var i: Integer;
begin
   //Inicializa o tamanho original de cada coluna do grid
   SetLength(FTamanhoColunas, Columns.Count);
   for i := 0 to Columns.Count -1 do
  FTamanhoColunas[i] := Columns.Items[i].Width;
end;


e na...

procedure WMSize(var Message: TWMSize); message WM_SIZE;

var i, Dif, Aux, TamanhoTotal: Integer;
Rateio: Extended;
begin
   inherited;
//Exit;
//Tirei fora por enquanto pq, passa muitas vezes por aqui

   if (Not Assigned(Columns)) or
  (Not FReSizeMaximizar) or
  (csReading in ComponentState) or
  (csLoading in ComponentState) or
  (csDesigning in ComponentState) then
  Exit;

//ShowMessage('TClDbGrid.WMSize');

   //Ajusta o tamanho das colunas do grid, quando o formulário é maximizado
   //para não sobrar espaços em branco dentro do grid
   TamanhoTotal := 0;
   With Columns do
   begin
  for i := 0 to Count -1 do
 if Items[i].Visible then
Inc(TamanhoTotal, Items[i].Width +1); // +1 pq tem a linha que 
separa a coluna

  if ((Width - LARGSCROOL)  TamanhoTotal) and (TamanhoTotal  0) then
  begin
 Dif := (Width - LARGSCROOL) - TamanhoTotal; // contém a diferença a 
ser ratiada nas colunas do dbgride
 Aux := Dif;

 for i := 0 to count - 1 do
if Items[i].Visible then
begin
   Rateio := Dif * (items[i].Width / TamanhoTotal);
   Items[i].Width := Items[i].Width + Round(Rateio);
   Aux:= Aux - Round(Rateio);
end;

 Items[count - 1].Width := Items[count - 1].width + Aux; // última 
coluna recebe uma possível diferença
  end
  else if (Width - LARGSCROOL)  TamanhoTotal then //Restaurando o tamanho, 
depois de ter maximizado
 for i := 0 to count - 1 do
if Items[i].Visible then
   Items[i].Width := FTamanhoColunas[i];
   end;

Deve ter código sobrando aí no meio, pois tenho várias outras funcionalidades 
implementadas. 
Mas é só tirar o que não compilar.




Att,

Celso Lorenzetti
Analista de Sistemas
msn: [EMAIL PROTECTED]
--
SysRS Tecnologia da Informação Ltda.
 www.sysrs.com.br
  - Original Message - 
  From: Bruno Antonio Ribeiro de Souza 
  To: Grupo Delphi 
  Sent: Tuesday, April 24, 2007 10:00 AM
  Subject: [delphi-br] Resize na coluna do DBGrid


  Olá amigos

  Estou desenvolvendo uma aplicação que em todos os forms se usa um 
  DBGrid... gostaria de saber se tem como dar um resize nas _*colunas*_ 
  para que ele se ajuste ao tamanho do DBGrid...
  ... Estou utilizando MDI e tem grid que tem 3 colunas, outro Grid 4 
  colunas... Então fica muito estranho quando tem 3 colunas e um espaço em 
  branco depois até terminar o Grid...

  Obrigado

  Bruno Souza
  CEPEA - Centro de Estudos Avançados em Economia Aplicada
  ESALQ/USP


   

[As partes desta mensagem que não continham texto foram removidas]