TStringGrid, часть I
Автор Деймон Чандлер перевод Виктор Алексеев aka prom
Класс TCustomGrid содержит методы DeleteColumn () и DeleteRow () . Эти методы могут быть использованы для удаления определенного столбца или строки, соответственно. Поэтому в качестве альтернативы ручного подхода, можно создать свой собственный класс как потомок TStringGrid класса, который обеспечивает доступ к этим методам. Например:
class TMyStringGrid : public TStringGrid
{
public:
__fastcall TMyStringGrid(Component* AOwner) :TStringGrid(AOwner)
{
}
void __fastcall RemoveCol(int AIndex)
{
TStringGrid::DeleteColumn(AIndex);
}
void __fastcall RemoveRow(int AIndex)
{
TStringGrid::DeleteRow(AIndex);
}
};
Работа с файлами
Иногда надо использовать строки грида для отображения временных данных. Например, читать и писать данные из файла в грид и наоборот. У класса TStringGrid нет таких штатных возможностей, но т.к. ячейки StringGrid имеют тип строки, то можно использовать тип TStrings * из других родственных классов.
Запись StringGrid в файл
У класса TStrings есть метод SaveToFile (), который может быть использован для записи в файл. Для использования этого метода, необходимо сначала создать временный объект TStringList, который будет служить в качестве буфера. Затем перебором Cols (или строк), добавить содержимое каждой колонки (или строки) для этого буфера через метод AddStrings (). Затем, вызвать SaveToFile () для записи содержимого буфера в файл. Например:
#include <memory>
void __fastcall SaveCells( TStringGrid* StringGrid, const AnsiString& FileName)
{
std::auto_ptr<TStrings> SaveStrings( new TStringList());
const int col_count =StringGrid->ColCount;
for (int index = 0; index < col_count; ++index)
{
SaveStrings->AddStrings(
StringGrid->Cols[index]);
}
SaveStrings->SaveToFile(FileName);
}
Загрузка StringGrid из файла
Для чтения из файла надо использовать метод LoadFromFile() класса TString. Всё как в предыдущем примере, но наоборот.
#include <memory>
void __fastcall LoadCells(TStringGrid* StringGrid, const AnsiString& FileName)
{
std::auto_ptr<TStrings> LoadStrings( new TStringList());
LoadStrings->LoadFromFile(FileName);
int index = 0;
const int col_count = StringGrid->ColCount;
const int row_count = StringGrid->RowCount;
for (int col=0;col<col_count;++col)
{
for (int row=0;row<row_count;++row)
{
StringGrid->Cells[col][row] = LoadStrings->Strings[index++];
}
}
}