2012-02-27 1 views
3

저는 나사로 0.9.30.2를 사용하고 있습니다. 표준 TStringGrid가있는 표준 TForm이 있습니다. 문자열 격자에는 디자인 타임에 행이나 열이 없습니다. Object Inspector에서 다음 값이 설정됩니다.런타임에 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 rows)가 디자인 타임에있는 경우 다음 속성이 저장된 기본 값으로 설정됩니다.

를 해결하는 방법 : 당신이 적어도 하나의 열을 추가 한 후

  • 중 하나가 런타임에 0으로 TStringGrid.FixedCols 설정 당신이 그들 모두를 추가 할 때 당신의 사건은

  • 또는 설정 TStringGrid.ColCount 및 디자인 타임에서 1-TStringGrid.FixedRows, 당신은 열을 볼 수 있지만 TStringGrid.Columns 컬렉션 비어, 그래서 당신은 런타임에 하나의 여분의 열을 얻을 것이다 걱정할 필요 (델파이 예에 없다 당신도 0으로 열이나 행 카운트)

나는 TCustomGrid.AdjustCount 절차를 의심하고있어 설정할 수는 없지만, 그것은 단지 추측 여기에 주제와입니다.

+1

안녕하세요 @TLama .... 나는 게시 한 후 조금 더 놀았으며 귀하의 의견에 명시된 모든 것을 확인했습니다. 런타임시 고정 열이 기본적으로 추가됩니다. 디자인 타임에 임의의 열을 그리드에 추가하면 고정 열이 추가되지 않습니다. 내가 한 일은 동적으로 모든 열을 추가 한 다음 끝 설정 'FixedCol : = 0' – user1174918

관련 문제