Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TMenuItem: как в него запихать VCL объект?

1.9K
14 марта 2003 года
DarkSide
41 / / 14.03.2003
Доброго времени суток!
Такая ситуация: имеется TMainMenu. В нем несколько объектов типа TMenuItem. В чем вопрос: как в этот TMenuItem (допустим он имеет имя MI) запихать VCL-объект, например TButton или TTrackBar (что более важней)? :-?

Пробовал создавать TrackBar и потом свойству Parent присваивать этот TMenuItem.

Получилось что-то типа этого:

TTrackBar *tb = new TTrackBar(0);
tb->Parent=(TWinControl*)MI;

Увы... :-( компилируется нормально, но при запуске вылетает ошибка. Что делать? По зарез надо!!!

Для большей наглядности вкладываю JPG файлик, смонтированный мной в ФотоШопе, чтобы было понятней, чего я именно хочу...

Заранее благодарен.
362
14 марта 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by DarkSide
Доброго времени суток!
Такая ситуация: имеется TMainMenu. В нем несколько объектов типа TMenuItem. В чем вопрос: как в этот TMenuItem (допустим он имеет имя MI) запихать VCL-объект, например TButton или TTrackBar (что более важней)? :-?



Нужно положить твой TTrackBar на невидимую панель.
А в событии OnDrawItem при Selected = true устанавливать координаты панели рядом с пунктом меню (см. также OnMeasureItem) и делать ее видимой, при Selected = false снова прятать панель. Там где-то еще есть свойство OwnerDraw, оно должно быть true чтобы эти события возникали, не помню чье это свойство - посмотрии в справке

1.9K
14 марта 2003 года
DarkSide
41 / / 14.03.2003
Цитата:
Originally posted by _kolyan


Нужно положить твой TTrackBar на невидимую панель.
А в событии OnDrawItem при Selected = true устанавливать координаты панели рядом с пунктом меню (см. также OnMeasureItem) и делать ее видимой, при Selected = false снова прятать панель. Там где-то еще есть свойство OwnerDraw, оно должно быть true чтобы эти события возникали, не помню чье это свойство - посмотрии в справке



Пробовал... Фигня получается... :-( Во-первых, эта панелька все-равно при появлении перекрывается менюшкой, что не есть правильно. Во-вторых, нужно, чтобы этот TTrackBar реально находился в TMenuItem... То есть вопрос в том, как ЕГО ЗАПИХАТЬ ТУДА??? :-(

362
14 марта 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by DarkSide


Пробовал... Фигня получается... :-( Во-первых, эта панелька все-равно при появлении перекрывается менюшкой, что не есть правильно. Во-вторых, нужно, чтобы этот TTrackBar реально находился в TMenuItem... То есть вопрос в том, как ЕГО ЗАПИХАТЬ ТУДА??? :-(



Не понял проблемы, если панель перекрывается менюшкой бы не перкрывалась, на то и есть событие OnMeasureItem. А во-вторых - с точки зрения системы - меню, это просто текст (может быть с картинкой) написенный на каком либо фоне и оно не может содержать другие объекты (чтобы содержать обьекты, сам обьект должен быть окном, оконным классом, меню им не является) ю Если какие-либо программы и содержат навороченные меню, то скорее всего они сделаны имеено рисованим того, что нужно, там где нужно.
А если не секрет - зачем нужно , чтобы этот TTrackBar реально находился в TMenuItem?

1.9K
14 марта 2003 года
DarkSide
41 / / 14.03.2003
Цитата:
Originally posted by _kolyan


Не понял проблемы, если панель перекрывается менюшкой бы не перкрывалась, на то и есть событие OnMeasureItem. А во-вторых - с точки зрения системы - меню, это просто текст (может быть с картинкой) написенный на каком либо фоне и оно не может содержать другие объекты (чтобы содержать обьекты, сам обьект должен быть окном, оконным классом, меню им не является) ю Если какие-либо программы и содержат навороченные меню, то скорее всего они сделаны имеено рисованим того, что нужно, там где нужно.
А если не секрет - зачем нужно , чтобы этот TTrackBar реально находился в TMenuItem?



Да... жаль конечно, что так не получится а было бы очень удобно. Просто пишу щас программу, и не хотелось бы создавать еще одну форму специально только для того, чтобы разместить в нем этот TrackBar. Ты скажешь: помести её в форму "Настройки программы". Ответ: у программы нет настроек - я пытался написать её так, чтобы даже самый "чайник" мог в ней разобраться.

362
14 марта 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by DarkSide


Да... жаль конечно, что так не получится а было бы очень удобно. Просто пишу щас программу, и не хотелось бы создавать еще одну форму специально только для того, чтобы разместить в нем этот TrackBar. Ты скажешь: помести её в форму "Настройки программы". Ответ: у программы нет настроек - я пытался написать её так, чтобы даже самый "чайник" мог в ней разобраться.



В таком случае это должна быть сложная программа - в написании ;-) как-то пробовал написать программку так чтобы кажды чайник понял - так ведь найдутся же такие чайники...;-);-)
На самом деле Panel это не форма и она совсем не тяжелая. А если у тебя нескалько таких "in-menu" элементов настройки, то для всех можно использовать одну и ту е панель

1.9K
14 марта 2003 года
DarkSide
41 / / 14.03.2003
Цитата:
Originally posted by _kolyan


В таком случае это должна быть сложная программа - в написании ;-) как-то пробовал написать программку так чтобы кажды чайник понял - так ведь найдутся же такие чайники...;-);-)
На самом деле Panel это не форма и она совсем не тяжелая. А если у тебя нескалько таких "in-menu" элементов настройки, то для всех можно использовать одну и ту е панель



Эх... лана... Спасибо за ответы, буду рыть дальше :) В крайнем случае придется остановиться на варианте с невидимыми панелями

1.9K
15 марта 2003 года
DarkSide
41 / / 14.03.2003
Решил я сделать так:
1) в ивэнте OnMeasureItem этой менюшки устанавливаю нужные мне размеры.
2) в ивэнте OnDrawItem загружаю в эту менюшку BMP файл ТрэкБара.

В чем вопрос:
как теперь обработать сообщения WM_MOUSEMOVE и WM_LBUTTONDOWN??? Не Application->OnMessage ни WindowProc не помогают... Менюшка ловит только WM_COMMAND... :-(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог