2012-03-12 5 views
2

私はLazarus v0.9.30(32ビットコンパイラ)を実行しています。グリッドが読み込まれたときに、TStringGrid列タイトルセルのセルプロパティが変わるのはなぜですか?

この質問は以前のquestionの延長です。

上記の質問は、実行時に標準のTStringGridにロードしたTGridColumnsオブジェクトのテキストの向きを変更する方法を中心にしています。このソリューションでは、文字列グリッドのDrawCellTextイベントをオーバーライドしました。

私の質問はこれです。私が見つけたTStringGridを読み込もうとすると、テキストの向きは変わりませんが、列のセルの高さはデフォルトの高さに戻ります。

グリッドをロードするために使用するコードを以下に示します。

procedure TTmMainForm.vLoadWorldScoutGrid; 
var 
    aMember : TTmMember; 
    anIndex1: integer; 
    anIndex2: integer; 
begin 
    //Clear the string grid and set the row count to 1 to take into account the fixed row. 
    SgWorldScout.Clear; 
    SgWorldScout.RowCount := 1; 

    for anIndex1 := 0 to Pred(FManager.Members.Count) do 
    begin 
    //Add a new row to the string grid. 
    SgMembers.RowCount := SgMembers.RowCount + 1; 

    //Get the TTmMember object from the collection. 
    aMember := TTmMember(FManager.Members.Items[anIndex1]); 

    //Populate the row cells in the string grid. 
    SgMembers.Cells[0, SgMembers.RowCount - 1] := aMember.stMemberNumber; 
    SgMembers.Cells[1, SgMembers.RowCount - 1] := aMember.stPatrol; 
    SgMembers.Cells[2, SgMembers.RowCount - 1] := aMember.stSurname; 
    SgMembers.Cells[3, SgMembers.RowCount - 1] := aMember.stFirstName; 

    //Add the TTmMember object to every row cell. 
    for anIndex2 := 0 to SgMembers.ColCount - 1 do 
     SgMembers.Objects[anIndex2, SgMembers.RowCount - 1] := aMember; 
    end; {for}} 

    vSetWorldScoutGridPushbuttons; 
end; 

私は疑う私は、文字列のグリッドセルの特性は、リセット/セルの高さの変化を説明するだろうDrawCellTextイベントが呼び出されるデフォルトとして変更されるかもしれませんことを「SgWorldScout.Clear」と呼ぶとき。テキストの向きが変わらない理由もわかりません。誰かがDrawCellTextイベントの動作を説明することができますか、なぜ私はこれを見ていますか?

+0

この手順で明確にしたいものはありますか?あなたは本当にグリッド全体をクリアしたいですか?特定のセルのセル内容のみをクリーニングするための一連の関数['TCustomStringGrid.Clean'](http://lazarus-ccr.sourceforge.net/docs/lcl/grids/tcustomstringgrid.clean.html)がありますグリッドの領域。 – TLama

+0

はい固定行ではなく、データ行のみをクリーニングします。だから私はすべての固定されていないセルのテキストと関連付けられているオブジェクトへの任意のポインタをクリアしたいと思います。 – user1174918

+1

答えは以下の通りです:)グリッド全体をクリアする必要はありません。行数を目的の値に設定するのは完全に安全です(そして一般的に使用される)ので、 'RowCount'を1に設定するだけで(すべての設定で)ヘッダーが保持されます。 – TLama

答えて

2

Clearは、疑わしい通りにRowCountColCountを0に設定します。 RowCountを0に設定すると、格納する高さがないため、RowHeightsもクリアされていることはかなり論理的です。固定されていない行だけをクリアして追加する場合は、グリッド全体を消去せずにRowCountを1に設定するだけです。したがって、コードを次のように変更してください。

procedure TTmMainForm.vLoadWorldScoutGrid; 
var 
    aMember : TTmMember; 
    anIndex1: integer; 
    anIndex2: integer; 
begin 
    // set the row count to 1 to keep the fixed row along with its settings 
    SgWorldScout.RowCount := 1; 

    for anIndex1 := 0 to Pred(FManager.Members.Count) do 
    ... 
end; 
関連する問題