C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ComboBox в Cell Grida
ekya
Отправлено: 14.10.2003, 21:26


Ученик-кочегар

Группа: Участник
Сообщений: 27



Всем привет.
Поскажите как поместить, например, ComboBox в ячейку StringGrid.
Я так думаю, что аналогичный механизм можно применять и к другим компонентам.

Admin
Отправлено: 15.10.2003, 10:39


Владимир

Группа: Администратор
Сообщений: 1190



Помещаем на форму компоненты StringGrid и ComboBox.

CODE

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 // Высоту у combobox не получится установить, поэтому мы будем
 // подгонять размер у грида под размер combobox
 StringGrid1->DefaultRowHeight = ComboBox1->Height;
 // Скрываем combobox, встаем на 1 строку в нем
 ComboBox1->ItemIndex = 0;
 ComboBox1->Visible = false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
 // Получаем выбранный элемент из ComboBox и помещаем его в грид
 StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] =
                  ComboBox1->Items->Strings[ComboBox1->ItemIndex];
 ComboBox1->Visible = false;
 StringGrid1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Exit(TObject *Sender)
{
 // Получаем выбранный элемент из ComboBox и помещаем его в грид
 StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] =
          ComboBox1->Items->Strings[ComboBox1->ItemIndex];
 ComboBox1->Visible = false;
 StringGrid1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
     int ARow, bool &CanSelect)
{
   TRect R;
 // применим для любой строки в 3 столбце StringGrid-a
 if (ACol == 3 && ARow != 0){
  // встаем на значение в ComboBox, если оно есть в нем
  int ns = ComboBox1->Items->IndexOf(StringGrid1->Cells[ACol][ARow]);
  if(ns != — 1) ComboBox1->ItemIndex = ns;
  // Размер и расположение combobox подгоняем под ячейку
   R = StringGrid1->CellRect(ACol, ARow);
   R.Left  = R.Left  + StringGrid1->Left;
   R.Right = R.Right + StringGrid1->Left;
   R.Top = R.Top + StringGrid1->Top;
   R.Bottom = R.Bottom + StringGrid1->Top;
   ComboBox1->Left = R.Left + 1;
   ComboBox1->Top = R.Top + 1;
   ComboBox1->Width = (R.Right + 1) — R.Left;
   ComboBox1->Height = (R.Bottom + 1) — R.Top;
  // Показываем combobox
   ComboBox1->Visible = true;
   ComboBox1->SetFocus();
 }
 CanSelect = true;
}
//-------------------------------------------


Вернуться в Вопросы программирования в C++Builder