Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 236

Раздел: C++
/ вопрос открыт /

Здравствуйте эксперты!

Подскажите пжлста почему не работает мой обработчик события?

А если поставить Parent = Form1, то обрабатывается, но смещаются координаты при отображении ComboBoxa.

Заранее спасибо!

Приложение:
  1. Unit1.h
  2.  
  3. ....
  4. public: // User declarations
  5. __fastcall TForm1(TComponent* Owner);
  6. //
  7. TComboBox *cmb;
  8. void __fastcall OnSelectValue(TObject *Sender);
  9. };
  10.  
  11. Unit1.cpp
  12.  
  13. ....
  14. void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
  15. int ARow, bool &CanSelect)
  16. {
  17. int i;
  18.  
  19. if (cmb != NULL)
  20. delete cmb;
  21. cmb = new TComboBox(Form1);
  22. cmb->Parent = StringGrid1;
  23. cmb->Style = csDropDown;
  24. cmb->DropDownCount = 10;
  25. cmb->Width = 55;
  26. cmb->Height = 128;
  27. cmb->Left = StringGrid1->DefaultColWidth*ACol + StringGrid1->CellRect(ACol, ARow).Width()-55; //Left+10;
  28. cmb->Top = StringGrid1->CellRect(ACol, ARow).Top+1;
  29. for (i=0; i<256; i++)
  30. cmb->Items->Add(i);
  31. //
  32. cmb->OnSelect = TForm1::OnSelectValue;
  33.  
  34. }
  35. //---------------------------------------------------------------------------
  36. void __fastcall TForm1::OnSelectValue(TObject *Sender)
  37. {
  38. TComboBox *cmb;
  39.  
  40. StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = cmb->Text;
  41.  
  42. }
  43.  


Muratov Radik Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Muratov Radik (статус: Посетитель), 29 сентября 2009, 11:40 [#2]:

Спасибо за совет!
Да, с панелью тот же глюк с координатами.
Вадим К

Вадим К (статус: Академик), 29 сентября 2009, 11:46 [#3]:

А у панельки границу сделали нулевой?
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 29 сентября 2009, 13:02 [#4]:

BorderWidth = 0;
BorderStyle = bsNone;
Вадим К

Вадим К (статус: Академик), 29 сентября 2009, 13:04 [#5]:

Координаты смещаются на постоянное число пикселей и/или зависит от положения StringGrid'a ?
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 29 сентября 2009, 13:29 [#6]:

Да верно.
Вадим К

Вадим К (статус: Академик), 29 сентября 2009, 13:57 [#7]:

э.... кажется мой вопрос предполагал альтернативу. И ответ "да верно" просто невозможен логически.
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 29 сентября 2009, 14:08 [#8]:

Сорри, в связке и/или увидел только и. Вобщем число постоянно и зависит от положения.
Вадим К

Вадим К (статус: Академик), 29 сентября 2009, 14:16 [#9]:

Если правильно помню, то оно как раз и равно положению StringGrid'a. И если грид лежит прямо на форме, то кто мешает просто пересчитывать эти координаты. Хотя странно, если комбобокс лежит на панели и грид растянут на всю ее...
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 29 сентября 2009, 14:32 [#10]:

Я так и сделал. Пересчитываю координаты. Спасибо большое за отклик. Думаю можно вопрос закрыть.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.03 сек.