У меня есть сетка, размер которой можно изменить. И я теперь задыхаюсь, заполняя пустое пространство вокруг столбцов в сетке. Я пытаюсь достичь этого в FormResize.Заполнение пустого пространства в delphi stringgrid
Сначала я вычислил, что является общей шириной столбцов, и затем я сравниваю ее с шириной сетки. если ширины stringgrid больше, то я добавляю к каждой колонке ширину равные части оставшегося пробела. Вот как это выглядит в formResize процедуры:
procedure TBDDTool.FormResize(Sender: TObject);
var
totColWidth,i : integer;
begin
totColWidth := 0;
for i := 0 to sgFilePreview.ColCount - 1 do
totColWidth := totColWidth + sgFilePreview.ColWidths[i];
if sgFilePreview.Width > TotColWidth then
begin
for i := 0 to sgFilePreview.ColCount - 1 do
begin
sgFilePreview.ColWidths[i] := round(sgFilePreview.ColWidths[i] +
((sgFilePreview.Width - totColWidth)/(sgFilePreview.colCount)));
end;
end;
end;
Это actualy не работает причина sgFilePReview.Width ширина моей сетки. И я не знаю, как получить ширину всего пространства внутри сетки, как и все столбцы + пустое пространство. Как я могу получить реальную ширину сетки? Причина sgFilePreview.Width
возвращает ширину сетки, но, как видно из внешней сетки.
Спасибо!
EDIT
Addine новые столбцы
for val in sLineSplitted do
begin
if Pos('#',val) <> 0 then propVal := copy(val,0,pos('#',val)-1)
else propVal := val;
col := col +1;
if (row = 1) then
begin
if (col >1) then
//Add column
sgFilePreview.ColCount := col;
sgFilePreview.Cols[col-1].Text := propVal;
SetLength(aSourceData[row-1],col);
aSourceData[row-1,col-1] := val;
end
else
begin
sgFilePreview.RowCount := row;
SetLength(aSourceData[row-1],col);
aSourceData[row-1, col-1] := val;
sgFilePreview.Cells[col-1, row-1] := propVal;
pnlFileManager.Visible := true;
end;
end;
колонки Auto размер, чтобы соответствовать слово, если мир больше, чем клетки ширина
procedure TBDDTool.AutoSizeGrid(Grid: TStringGrid);
const
ColWidthMin = 10;
var
C,R,W, ColWidthMax: integer;
begin
for c := 0 to Grid.ColCount - 1 do
begin
ColWidthMax := ColWidthMin;
for R := 0 to Grid.RowCount - 1 do
begin
W := Grid.Canvas.TextWidth(Grid.Cells[C,R]);
if W > ColWidthMax then
ColWidthMax :=W;
end;
Grid.ColWidths[C] := ColWidthMax +5;
end;
end;
Вы не используете 'ClientWidth'? –
@DavidHeffernan Я использовал clientWidth, но он возвращает то же значение, что и gird.Width вернет – user28470
В этом случае я не понимаю ваш вопрос –