Otomatik Ayarlanan DBGrid Kolonları

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Otomatik Ayarlanan DBGrid Kolonları

Mesaj gönderen oguzozturk74 »

Çalışma anında DBGRİD in kolonlarının otomatik olarak ayarlanması :

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Tag özelliği ile otomatik boyutlanacak kolonların 
  // minimum genişliğini belirliyoruz.  
  // Burada sabit bir değer olarak 40 px veriyoruz
  Table1.FieldByName('AD').Tag := 40;
  Table1.FieldByName('SOYAD').Tag := 
       4 + Canvas.TextWidth( Table1.FieldByName('LastName').DisplayName);
end;
Yukarıda. AD ve SOYAD kolonlarını otomatik boyutlandırılmaları için fişlemiş olduk.
Bundan sonra ise DBGrid imizin FixDBGridColumnsWidth ( DBGrid Kolon Genişliğini Ayarla ) olayını formun Resize ( Tekrar boyutlamak ) olayında çağıracağız.

Kod: Tümünü seç

procedure TForm1.FormResize(Sender: TObject);
begin
  FixDBGridColumnsWidth(DBGrid1);
end;
Not: DBGrid in Align Property (özelliği) alTop, alBottom, alClient veya alCustom değerlerinden biri olmalıdır.

Unitin Private ında tanımlanacak procedure ümüz :

Kod: Tümünü seç

procedure FixDBGridColumnsWidth(const DBGrid: TDBGrid);
var
  i : integer;
  TotWidth : integer;
  VarWidth : integer;
  ResizableColumnCount : integer;
  AColumn : TColumn;
begin
  // Boyutlamadan önceki bütün kolonların toplam genişliği
  TotWidth := 0;
  // Herhangi bir fazladan alanı nasıl böleceğiz
  VarWidth := 0;
  // Otomatik boyutlanacak kolon sayısı
  ResizableColumnCount := 0;

  for i := 0 to -1 + DBGrid.Columns.Count do
  begin
    TotWidth := TotWidth + DBGrid.Columns[i].Width;
    if DBGrid.Columns[i].Field.Tag <> 0 then 
      Inc(ResizableColumnCount);
  end;

  //Kolonları ayıran çizgi (column separator line) 1px değer atıyoruz
  if dgColLines in DBGrid.Options then
    TotWidth := TotWidth + DBGrid.Columns.Count;

  // belirteç kolon (indicator column) genişliği
  if dgIndicator in DBGrid.Options then
    TotWidth := TotWidth + IndicatorWidth;

  VarWidth :=  DBGrid.ClientWidth - TotWidth;

  // VarWidth değerini eşit olarak otomatik boyutlanacak kolonlara dağıtıyoruz
  if ResizableColumnCount > 0 then
    VarWidth := varWidth div ResizableColumnCount;

  for i := 0 to -1 + DBGrid.Columns.Count do
  begin
    AColumn := DBGrid.Columns[i];
    if AColumn.Field.Tag <> 0 then
    begin
      AColumn.Width := AColumn.Width + VarWidth;
      if AColumn.Width < AColumn.Field.Tag then
        AColumn.Width := AColumn.Field.Tag;
    end;
  end;
end; 
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Oğuzcum Teşekkürler Güzel Olmuş Eline Sağlık.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Sizinkilerin yanında birşey değil Hüseyin Kardeş. :D
Sadece bir çeviri yaptım o kadar. ( http://delphi.about.com/ )
Cevapla