- Регистрация
- 1 Мар 2015
- Сообщения
- 1,467
- Баллы
- 155
Проблема: Как занять все доступное пространство в DBGrid?
Часто, когда мы максимизируем экран, появляется пустое пространство, если используется утилита, в
других случаях нам не нужна прокрутка Grid.
Таким образом, вам нужен способ автоматического размера столбцов.
К счастью, есть простое в реализации решение!
Давайте закодируем это:
[LIKES=5]
procedure DimensionarGrid(dbg: TDBGrid);
type
TArray = Array of Integer;
procedure AjustarColumns(Swidth, TSize: Integer; Asize: TArray);
var
idx: Integer;
begin
if TSize = 0 then
begin
TSize := dbg.Columns.count;
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := (dbg.Width - dbg.Canvas.TextWidth('AAAAAA')
) div TSize
end
else
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := dbg.Columns[idx].Width +
(Swidth * Asize[idx] div TSize);
end;
var
idx, Twidth, TSize, Swidth: Integer;
AWidth: TArray;
Asize: TArray;
NomeColuna: String;
begin
SetLength(AWidth, dbg.Columns.count);
SetLength(Asize, dbg.Columns.count);
Twidth := 0;
TSize := 0;
for idx := 0 to dbg.Columns.count - 1 do
begin
NomeColuna := dbg.Columns[idx].Title.Caption;
dbg.Columns[idx].Width := dbg.Canvas.TextWidth
(dbg.Columns[idx].Title.Caption + 'A');
AWidth[idx] := dbg.Columns[idx].Width;
Twidth := Twidth + AWidth[idx];
if Assigned(dbg.Columns[idx].Field) then
Asize[idx] := dbg.Columns[idx].Field.Size
else
Asize[idx] := 1;
TSize := TSize + Asize[idx];
end;
if TDBGridOption.dgColLines in dbg.Options then
Twidth := Twidth + dbg.Columns.count;
//добавляет ширину указанного курсора курсора,
if TDBGridOption.dgIndicator in dbg.Options then
Twidth := Twidth + IndicatorWidth;
Swidth := dbg.ClientWidth - Twidth;
AjustarColumns(Swidth, TSize, Asize);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
DimensionarGrid( dbgrid1 );
end;
[/LIKES]
Часто, когда мы максимизируем экран, появляется пустое пространство, если используется утилита, в
других случаях нам не нужна прокрутка Grid.
Таким образом, вам нужен способ автоматического размера столбцов.
К счастью, есть простое в реализации решение!
Давайте закодируем это:
[LIKES=5]
procedure DimensionarGrid(dbg: TDBGrid);
type
TArray = Array of Integer;
procedure AjustarColumns(Swidth, TSize: Integer; Asize: TArray);
var
idx: Integer;
begin
if TSize = 0 then
begin
TSize := dbg.Columns.count;
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := (dbg.Width - dbg.Canvas.TextWidth('AAAAAA')
) div TSize
end
else
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := dbg.Columns[idx].Width +
(Swidth * Asize[idx] div TSize);
end;
var
idx, Twidth, TSize, Swidth: Integer;
AWidth: TArray;
Asize: TArray;
NomeColuna: String;
begin
SetLength(AWidth, dbg.Columns.count);
SetLength(Asize, dbg.Columns.count);
Twidth := 0;
TSize := 0;
for idx := 0 to dbg.Columns.count - 1 do
begin
NomeColuna := dbg.Columns[idx].Title.Caption;
dbg.Columns[idx].Width := dbg.Canvas.TextWidth
(dbg.Columns[idx].Title.Caption + 'A');
AWidth[idx] := dbg.Columns[idx].Width;
Twidth := Twidth + AWidth[idx];
if Assigned(dbg.Columns[idx].Field) then
Asize[idx] := dbg.Columns[idx].Field.Size
else
Asize[idx] := 1;
TSize := TSize + Asize[idx];
end;
if TDBGridOption.dgColLines in dbg.Options then
Twidth := Twidth + dbg.Columns.count;
//добавляет ширину указанного курсора курсора,
if TDBGridOption.dgIndicator in dbg.Options then
Twidth := Twidth + IndicatorWidth;
Swidth := dbg.ClientWidth - Twidth;
AjustarColumns(Swidth, TSize, Asize);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
DimensionarGrid( dbgrid1 );
end;
[/LIKES]