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;
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;
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;