2012-02-27 7 views
3

Я использую Lazarus 0.9.30.2. У меня есть стандартный TForm со стандартным TStringGrid на нем. Строковая сетка не имеет столбцов или строк во время разработки. В Инспекторе объектов установлены следующие значения.Как избежать фиксированного столбца при динамическом добавлении столбцов в TStringGrid во время выполнения?

ColCount = 0 
Columns = 0 
FixedCols = 0 
FixedRows = 0 
RowCount = 0 

Я хочу добавить несколько TGridColumns во время выполнения, и был в состоянии сделать это, но всегда получают фиксированный столбец, который я не хочу. Для этого я написал код, очень похожий на образец ниже. Когда я компилирую и запускаю его, я получаю следующее.

enter image description here

Как получить кожуру фиксированной колонки во время выполнения и просто оставить остальные столбцы?

unit test; 

{$mode objfpc}{$H+} 

interface 

uses 
    Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids; 

type 
    TForm1 = class(TForm) 
    SgGrid: TStringGrid; 
    procedure FormCreate(Sender: TObject); 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.lfm} 

procedure TForm1.FormCreate(Sender: TObject); 
var 
    GridColumn : TGridColumn; 
    anIndex : integer; 
begin 
    for anIndex := 0 to 5 do 
    begin 
     GridColumn := SgGrid.Columns.Add; 
     GridColumn.Width := 50; 
     GridColumn.Title.Caption := 'Col ' + inttostr(anIndex); 
    end; {for} 
end; 

end.                                    

ответ

3

Я думаю, что это такая функция (или ошибка с другой точки зрения). Если во время разработки ваша строка сетки пуста (0 cols, 0 строк), во время выполнения, когда вы добавляете столбец, следующие свойства устанавливаются в значения по умолчанию, сохраненные значения.

Как обойти это:

  • либо установить TStringGrid.FixedCols до 0 во время выполнения после добавления по крайней мере один столбец, для ваш случай просто после того, как вы добавите все из них

  • или установить TStringGrid.ColCount и TStringGrid.FixedRows 1 в DesignTime, вы увидите колонку, но TStringGrid.Columns коллекции остается пустой, так что нет необходимости беспокоиться, что вы получите один дополнительный столбец во время выполнения (в Delphi, например, Вы не можете даже установить столбец, ни количество строк до 0)

Я заподозрить TCustomGrid.AdjustCount процедуру, но это просто дикая догадка и не по теме здесь.

+1

Привет @TLama .... Я немного поиграл с ним после публикации и подтвердил все, что вы указали в своем комментарии. Во время выполнения по умолчанию добавляется фиксированный столбец. Если у меня есть anykind столбца, добавленного в сетку во время разработки, то фиксированный столбец не добавляется. То, что я закончил, заключалось в том, чтобы динамически добавлять все мои столбцы, а затем в конце установить параметр «FixedCol: = 0», – user1174918