Как я говорил вам на форумах Embarcadero ...
Не существует publi c свойства / метода для того, что вы запрашиваете. Вам просто нужно установить / увеличить свойство RowCount
по мере необходимости, затем вручную сдвинуть вверх содержимое свойства Cells
и, наконец, заполнить нижнюю строку.
if (StringGrid1->RowCount < SomeMaxValue)
StringGrid1->RowCount = StringGrid1->RowCount + 1;
for(int row = 1; row < StringGrid1->RowCount; ++row)
{
for(int col; col < StringGrid1->ColCount; ++col)
{
StringGrid1->Cells[col][row-1] = StringGrid1->Cells[col][row];
}
}
// fill in StringGrid1->Cells[...][StringGrid1->RowCount-1] for the last row as needed...
Однако * У 1012 * есть защищенный DeleteRow()
метод, но для защиты вам необходимо использовать класс доступа, например:
class TStringGridAccess : public TStringGrid
{
public:
void RemoveRow(int row) { TStringGrid::DeleteRow(row); }
};
if (StringGrid1->RowCount > 0)
((TStringGridAccess*)StringGrid1)->RemoveRow(0);
StringGrid1->RowCount = StringGrid1->RowCount + 1;
for(int row = 1; row < StringGrid1->RowCount; ++row)
{
for(int col; col < StringGrid1->ColCount; ++col)
{
StringGrid1->Cells[col][row-1] = StringGrid1->Cells[col][row];
}
}
// fill in StringGrid1->Cells[...][StringGrid1->RowCount-1] for the last row as needed...
При этом TStringGrid
на самом деле не лучший выбор для того, что вы пытаетесь сделать. Я настоятельно рекомендую использовать TListView
в режиме vsReport
. Это то, что я использую в своей программе просмотра журналов, и она работает очень хорошо, особенно в виртуальном режиме (OwnerData=true
), и выглядит просто более естественно, чем TStringGrid
, поскольку TListview
- это оболочка для нативного Windows контроль, тогда как TStringGrid
не является.
if (ListView1->Items->Count > 0)
ListView1->Items->Items[0]->Delete();
TListItem *Item = ListView1->Items->Add();
// fill in Item->Caption (column 0) and Item->SubItems (columns 1+) as needed...