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

 
StringGrid со списком
Oper01
Отправлено: 20.01.2004, 22:36


Станционный диспетчер

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



Подскажите, как сделать в компоненте StringGrid один столбец, каждая ячейка которого представляла бы собой ниспадающий список типа ComboBox или любой другой, чтобы можно было выбрать значение ячейки из заранее заданных значений.
Valdemar
Отправлено: 21.01.2004, 10:57


Мастер участка

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



Можно попробовать расположить на форме ComboBox (один или несколько, в зависимости от необходимости), заполнить его нужными значениями, задать нужные размеры, равные размерам ячеек StringGrid и сделать не видимым. Затем по щелчку мышки на StringGrid определять ячейку на которой щелкнули и для ComboBox сделать значения Left и Top такими как у выделенной ячейки и сделать его видимым. После выбора значения из ComboBox опять сделать его невидимым.
Вот небольшой пример, только его надо довести до ума:
CODE
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   CB->Width=SG->DefaultColWidth;
   CB->Height=SG->DefaultRowHeight;
   CB->Visible=false;
}
void __fastcall TForm1::SGClick(TObject *Sender)
{
   if(SG->Col<5)
   {
       CB->Left=SG->Left+(SG->DefaultColWidth+SG->GridLineWidth)*SG->Col+3;
       CB->Top=SG->Top+(SG->DefaultRowHeight+SG->GridLineWidth)*SG->Row+3;
       CB->Visible=true;
   }
   else
       CB->Visible=false;
}
void __fastcall TForm1::CBChange(TObject *Sender)
{
   SG->Cells[SG->Col][SG->Row]=CB->Text;
   CB->Visible=false;
}

здесь SG — это StringGrid, CB — это ComboBox.

Возможно есть готовый компонент, который все это делает.
Oper01
Отправлено: 21.01.2004, 23:48


Станционный диспетчер

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



Большое спасибо! С небольшими доработками использовал Ваш код Valdemar.

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