2

Lazarus v0.9.30 (32 ビット コンパイラ) を実行しています。

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

前の質問は、実行時に標準の 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; 

「SgWorldScout.Clear」を呼び出すと、デフォルトの DrawCellText イベントが呼び出されると、文字列グリッド セルのプロパティがリセット/変更され、セルの高さの変化が説明されるのではないかと思います。テキストの向きが変わらない理由もわかりません。DrawCellText イベントの動作と、なぜこれが表示されるのかを誰かが説明できますか?

4

1 に答える 1

2

ご想像のとおり、 はandを 0 にClear設定します。0 に設定すると、保存する高さがなくなるため、 もクリアされるのは非常に論理的です。固定されていない行のみをクリアして追加する場合は、グリッド全体をクリアせずに のみを 1 に設定します。したがって、コードを次のように変更します。RowCountColCountRowHeightsRowCountRowCount

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;
于 2012-03-12T10:02:33.543 に答える