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]

Responder a