Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > StringGrid и прокрутка


Автор: MARIA123 24.11.2011, 01:05
Задача такая: нужна таблица с привязанным к каждой строчке CheckBox, строк в таблице больше 50. При этом обязательно должны меняться размеры столбцов. Размеры окна тоже могут меняться, причем таблица должна занимать всегда всю клиентскую область. Нулевая строчка фиксирована - в ней заголовки. И надо реализовать прокрутку таблицы, причем при прокрутке обязательно должна оставаться видимой нулевая фиксированная строчка. Подскажите пожалуйста, как это можно сделать?

Пробовала так: 
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{ //строим таблицу и колонку для CheckBox
    StringGrid1->RowCount =RC;
    for (int i=1; i<=StringGrid1->RowCount; ++i)  {
      NewCheckBox[i-1] = new TCheckBox(Application->Handle);  //создали компонент
      StringGrid1->Objects[0][i] = NewCheckBox[i-1];  //привязали к таблице


      NewCheckBox[i-1]->OnClick = CheckBox1->OnClick;

      TRect Rect =  StringGrid1->CellRect(0,i);
      NewCheckBox[i-1]->Left =  StringGrid1->Left + Rect.Left+2;
      NewCheckBox[i-1]->Top = StringGrid1->Top + Rect.Top+2;
      NewCheckBox[i-1]->Width = Rect.Right - Rect.Left;
      NewCheckBox[i-1]->Height = Rect.Bottom - Rect.Top;
      NewCheckBox[i-1]->Name = "NCB"+IntToStr(i-1);

      NewCheckBox[i-1]->Visible = true;
      NewCheckBox[i-1]->Parent = Panel1;

      NewCheckBox[i-1]->Color = StringGrid1->Color;
      NewCheckBox[i-1]->Caption = "  "+IntToStr(i);

    }
}


Вылезла такая проблема : Panel1 всегда имеет размер равный клеентской области. Соответственно видны только те CheckBox, которые "влизают" в клиентскую область. А нужны все

Автор: sawfish 24.11.2011, 07:29
Код

StringGrid1->FixedRows = 1;
Фиксированная строка всегда будет показана.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)