FixedCols в DBGrid
Недавно занялся извращениями на тему, как в DBGrid зафиксировать первые колонки.
Нашел много исходников на Delphy, но при переводе их на С++ получаются проблмы!
В частности одним из способов фиксирования колонок является создание нового класса, с переопределенными в нем методами:
class TNewDBGrid : public TDBGrid
{
//__published: // IDE-managed Components
private: // User declarations
int FUserFixedCols;
public: // User declarations
virtual void __fastcall LayoutChanged();
virtual void __fastcall SetUserFixedCols(int I);
inline __fastcall virtual TNewDBGrid(Classes::TComponent* AOwner) : TDBGrid(AOwner) { }
__published:
__property int UserFixedCols = {read=FUserFixedCols, write=SetUserFixedCols};
};
//------------------------------------------------
void __fastcall TNewDBGrid::SetUserFixedCols(int I)
{
FUserFixedCols = I;
LayoutChanged();
}
//------------------------------------------------
void __fastcall TNewDBGrid::LayoutChanged(void)
{
inherited LayoutChanged(); //{ присваиваем FixedCols 1 если индикатор, иначе 0 }
if ((FixedCols+ FUserFixedCols) < ColCount)
FixedCols = (FUserFixedCols + FixedCols);
}
//------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TNewDBGrid *rr = new TNewDBGrid(Form1);
rr->Parent = Form1;
rr->DataSource = DS1;
rr->UserFixedCols = 2;
}
Компилируется нормально, но после Run выдает что то про List index out of bounds (0).
Почему - не пойму. Скорее всего что-то с неправильным переопределением методов.
ListBox->Items (ну или ListBox->Items->Strings) надо считать с 1, а не с 0. (Как тебе и сказал компилятор)