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;
}
//-------------------------------------------
|
|
|
|