Почему свойства ячеек в ячейках заголовка столбца TStringGrid изменяются при загрузке сетки? - PullRequest
2 голосов
/ 12 марта 2012

Я использую Lazarus v0.9.30 (32-битный компилятор).

Этот вопрос является расширением моего предыдущего вопроса .

Предыдущий вопрос вращался вокруг того, как изменить ориентацию текста в объектах TGridColumns, которые я загружал во время выполнения, в стандартную TStringGrid. Решение заключалось в переопределении события 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 и почему я это вижу?

1 Ответ

2 голосов
/ 12 марта 2012

Clear устанавливает RowCount и ColCount на 0, как вы и предполагали. Тогда вполне логично, что RowHeights также очищается, потому что, если для RowCount установлено значение 0, высоты не сохраняются. Если вы хотите очистить и добавить только нефиксированные строки, просто установите только 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...