|
Вопрос # 3 236/ вопрос открыт / |
|
Здравствуйте эксперты!
Подскажите пжлста почему не работает мой обработчик события?
А если поставить Parent = Form1, то обрабатывается, но смещаются координаты при отображении ComboBoxa.
Заранее спасибо!
Приложение: Переключить в обычный режим- Unit1.h
-
- ....
- public: // User declarations
- __fastcall TForm1(TComponent* Owner);
- //
- TComboBox *cmb;
- void __fastcall OnSelectValue(TObject *Sender);
- };
-
- Unit1.cpp
-
- ....
- void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
- int ARow, bool &CanSelect)
- {
- int i;
-
- if (cmb != NULL)
- delete cmb;
- cmb = new TComboBox(Form1);
- cmb->Parent = StringGrid1;
- cmb->Style = csDropDown;
- cmb->DropDownCount = 10;
- cmb->Width = 55;
- cmb->Height = 128;
- cmb->Left = StringGrid1->DefaultColWidth*ACol + StringGrid1->CellRect(ACol,
ARow).Width()-55; //Left+10;
- cmb->Top = StringGrid1->CellRect(ACol, ARow).Top+1;
- for (i=0; i<256; i++)
- cmb->Items->Add(i);
- //
- cmb->OnSelect = TForm1::OnSelectValue;
-
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::OnSelectValue(TObject *Sender)
- {
- TComboBox *cmb;
-
- StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = cmb->Text;
-
- }
-
 |
Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 29 сентября 2009, 10:58
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 29 сентября 2009, 14:32; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 29 сентября 2009, 11:21 [#1]:
Классическая проблема. StringGrid неправильно передает события до своих дочерних компонентов. Поэтому возможны самые разные спец эффекты. Надо либо просчитывать координаты (это совсем не сложно), либо писать своего StringGrid'a, который будет в качестве редактора реализовывать Combobox.
Я в свое время делал хитрый "костыль". На форму ставил панель, делал ее без границ, StringGrid ставил в нее и делал ему Align = alClient. А для Combobox'а родителем ставил панель. Правда и тут спец эффектов хватает, но можно заставить работать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 29 сентября 2009, 11:40 [#2]:
Спасибо за совет!
Да, с панелью тот же глюк с координатами.
|
|
Вадим К (статус: Академик), 29 сентября 2009, 11:46 [#3]:
А у панельки границу сделали нулевой?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 29 сентября 2009, 13:02 [#4]:
BorderWidth = 0;
BorderStyle = bsNone;
|
|
Вадим К (статус: Академик), 29 сентября 2009, 13:04 [#5]:
Координаты смещаются на постоянное число пикселей и/или зависит от положения StringGrid'a ?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 29 сентября 2009, 13:29 [#6]:
Да верно.
|
|
Вадим К (статус: Академик), 29 сентября 2009, 13:57 [#7]:
э.... кажется мой вопрос предполагал альтернативу. И ответ "да верно" просто невозможен логически.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 29 сентября 2009, 14:08 [#8]:
Сорри, в связке и/или увидел только и. Вобщем число постоянно и зависит от положения.
|
|
Вадим К (статус: Академик), 29 сентября 2009, 14:16 [#9]:
Если правильно помню, то оно как раз и равно положению StringGrid'a. И если грид лежит прямо на форме, то кто мешает просто пересчитывать эти координаты. Хотя странно, если комбобокс лежит на панели и грид растянут на всю ее...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 29 сентября 2009, 14:32 [#10]:
Я так и сделал. Пересчитываю координаты. Спасибо большое за отклик. Думаю можно вопрос закрыть.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|