TMenuItem: как в него запихать VCL объект?
Такая ситуация: имеется TMainMenu. В нем несколько объектов типа TMenuItem. В чем вопрос: как в этот TMenuItem (допустим он имеет имя MI) запихать VCL-объект, например TButton или TTrackBar (что более важней)? :-?
Пробовал создавать TrackBar и потом свойству Parent присваивать этот TMenuItem.
Получилось что-то типа этого:
TTrackBar *tb = new TTrackBar(0);
tb->Parent=(TWinControl*)MI;
Увы... :-( компилируется нормально, но при запуске вылетает ошибка. Что делать? По зарез надо!!!
Для большей наглядности вкладываю JPG файлик, смонтированный мной в ФотоШопе, чтобы было понятней, чего я именно хочу...
Заранее благодарен.
Доброго времени суток!
Такая ситуация: имеется TMainMenu. В нем несколько объектов типа TMenuItem. В чем вопрос: как в этот TMenuItem (допустим он имеет имя MI) запихать VCL-объект, например TButton или TTrackBar (что более важней)? :-?
Нужно положить твой TTrackBar на невидимую панель.
А в событии OnDrawItem при Selected = true устанавливать координаты панели рядом с пунктом меню (см. также OnMeasureItem) и делать ее видимой, при Selected = false снова прятать панель. Там где-то еще есть свойство OwnerDraw, оно должно быть true чтобы эти события возникали, не помню чье это свойство - посмотрии в справке
Нужно положить твой TTrackBar на невидимую панель.
А в событии OnDrawItem при Selected = true устанавливать координаты панели рядом с пунктом меню (см. также OnMeasureItem) и делать ее видимой, при Selected = false снова прятать панель. Там где-то еще есть свойство OwnerDraw, оно должно быть true чтобы эти события возникали, не помню чье это свойство - посмотрии в справке
Пробовал... Фигня получается... :-( Во-первых, эта панелька все-равно при появлении перекрывается менюшкой, что не есть правильно. Во-вторых, нужно, чтобы этот TTrackBar реально находился в TMenuItem... То есть вопрос в том, как ЕГО ЗАПИХАТЬ ТУДА??? :-(
Пробовал... Фигня получается... :-( Во-первых, эта панелька все-равно при появлении перекрывается менюшкой, что не есть правильно. Во-вторых, нужно, чтобы этот TTrackBar реально находился в TMenuItem... То есть вопрос в том, как ЕГО ЗАПИХАТЬ ТУДА??? :-(
Не понял проблемы, если панель перекрывается менюшкой бы не перкрывалась, на то и есть событие OnMeasureItem. А во-вторых - с точки зрения системы - меню, это просто текст (может быть с картинкой) написенный на каком либо фоне и оно не может содержать другие объекты (чтобы содержать обьекты, сам обьект должен быть окном, оконным классом, меню им не является) ю Если какие-либо программы и содержат навороченные меню, то скорее всего они сделаны имеено рисованим того, что нужно, там где нужно.
А если не секрет - зачем нужно , чтобы этот TTrackBar реально находился в TMenuItem?
Не понял проблемы, если панель перекрывается менюшкой бы не перкрывалась, на то и есть событие OnMeasureItem. А во-вторых - с точки зрения системы - меню, это просто текст (может быть с картинкой) написенный на каком либо фоне и оно не может содержать другие объекты (чтобы содержать обьекты, сам обьект должен быть окном, оконным классом, меню им не является) ю Если какие-либо программы и содержат навороченные меню, то скорее всего они сделаны имеено рисованим того, что нужно, там где нужно.
А если не секрет - зачем нужно , чтобы этот TTrackBar реально находился в TMenuItem?
Да... жаль конечно, что так не получится а было бы очень удобно. Просто пишу щас программу, и не хотелось бы создавать еще одну форму специально только для того, чтобы разместить в нем этот TrackBar. Ты скажешь: помести её в форму "Настройки программы". Ответ: у программы нет настроек - я пытался написать её так, чтобы даже самый "чайник" мог в ней разобраться.
Да... жаль конечно, что так не получится а было бы очень удобно. Просто пишу щас программу, и не хотелось бы создавать еще одну форму специально только для того, чтобы разместить в нем этот TrackBar. Ты скажешь: помести её в форму "Настройки программы". Ответ: у программы нет настроек - я пытался написать её так, чтобы даже самый "чайник" мог в ней разобраться.
В таком случае это должна быть сложная программа - в написании ;-) как-то пробовал написать программку так чтобы кажды чайник понял - так ведь найдутся же такие чайники...;-);-)
На самом деле Panel это не форма и она совсем не тяжелая. А если у тебя нескалько таких "in-menu" элементов настройки, то для всех можно использовать одну и ту е панель
В таком случае это должна быть сложная программа - в написании ;-) как-то пробовал написать программку так чтобы кажды чайник понял - так ведь найдутся же такие чайники...;-);-)
На самом деле Panel это не форма и она совсем не тяжелая. А если у тебя нескалько таких "in-menu" элементов настройки, то для всех можно использовать одну и ту е панель
Эх... лана... Спасибо за ответы, буду рыть дальше :) В крайнем случае придется остановиться на варианте с невидимыми панелями
1) в ивэнте OnMeasureItem этой менюшки устанавливаю нужные мне размеры.
2) в ивэнте OnDrawItem загружаю в эту менюшку BMP файл ТрэкБара.
В чем вопрос:
как теперь обработать сообщения WM_MOUSEMOVE и WM_LBUTTONDOWN??? Не Application->OnMessage ни WindowProc не помогают... Менюшка ловит только WM_COMMAND... :-(