У меня возникают проблемы с фрагментом кода, который автоматически генерирует номер и ширину столбца.Автоматическое получение числа и ширины столбцов
Я делаю все с этой частью кода, единственное, что меня беспокоит, это то, что моя сетка не используется на 100%; есть небольшая часть сетки, которая не используется, и это делает отчет безумным.
Это часть кода, который выполняет эту работу.
procedure TForm1.NoScrollDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
i: Integer;
brkol: integer;
sirina : Integer;
width1: Integer;
begin
width1 := 1;
brkol:=-4;
for i := 0 to NoScrollDBGrid1.Columns.Count - 1 do
begin
width1 := width1 + NoScrollDBGrid1.Columns[i].Width + 1;
if NoScrollDBGrid1.Columns[i].Visible then
brkol:=brkol +1;
end;
sirina:=(80 div brkol);
if width1 < NoScrollDBGrid1.ClientWidth - 8 then
begin
NoScrollDBGrid1.Columns[0].Width:=(NoScrollDBGrid1.ClientWidth-11)*2 div 100;
NoScrollDBGrid1.Columns[1].Width:=(NoScrollDBGrid1.ClientWidth-11)*5 div 100;
NoScrollDBGrid1.Columns[2].Width:=(NoScrollDBGrid1.ClientWidth-11)*10 div 100;
NoScrollDBGrid1.Columns[3].Width:=(NoScrollDBGrid1.ClientWidth-11)*3 div 100;
NoScrollDBGrid1.Columns[4].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[5].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[6].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[7].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[8].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[9].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[10].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[11].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[12].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[13].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[14].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[15].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[16].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
NoScrollDBGrid1.Columns[17].Width:=(NoScrollDBGrid1.ClientWidth-11)*sirina div 100;
Какой тип вашего NoScrollDBGrid1 объявлен как, а в какой библиотеке есть сетка? – MartynA
Мне кажется, что если вы вычисляете ширину каждого столбца, то последний столбец не должен вычисляться, а просто берем все, что осталось. Я не вижу этого в коде или я что-то упускаю? – GuidoG
* '..... что делает отчет безумным' * - это совершенно бесполезное описание проблемы. Каково ожидаемое поведение и каково наблюдаемое поведение? –