Программное изменение контекстного меню

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Программное изменение контекстного меню

Сообщение Osteon » 25.02.2014 (Вт) 15:05

Здравствуйте.
У меня в БД (Access) имеется список человеков за несколько лет (с 2010). Хочу выводить их в таблице или по определенному году, или все. Хочется реализовать это с помощью контекстного меню. Типа:
1. Определение минимального года.
2. Создание массива с годами по текущий (2010, 2011, 2013, 2014)
3. "Воткнуть" их в контекстное меню ("Все года" + года из массива).
Это возможно? Или нужно ваять отдельную форму, на ней создавать комобокс, и заполнять его приведенным алгоритмом?

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Программное изменение контекстного меню

Сообщение pronto » 25.02.2014 (Вт) 15:18

Да, возможно. Всё возможно при достаточном приложении усилий. А что делать — тебе должно быть веднее (попутно не забывая про usability).
O, sancta simplicitas!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Программное изменение контекстного меню

Сообщение The trick » 25.02.2014 (Вт) 19:09

Создавай элемент меню с индексом (0-например), делай ему Visible = False, потом подгружай дополнительные через Load, и выгружай через Unload
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Программное изменение контекстного меню

Сообщение Хакер » 26.02.2014 (Ср) 2:46

Причём здесь VB6? Нужно силами отдельностоящей VB6-программы оказать влияние на отдельностоящую Access-базу?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Программное изменение контекстного меню

Сообщение Osteon » 27.02.2014 (Чт) 7:48

Хакер писал(а):Причём здесь VB6? Нужно силами отдельностоящей VB6-программы оказать влияние на отдельностоящую Access-базу?

Работаю на VB6, с базой Access (*.mdb). Записи вывожу через Flexgrid. Щелкать правой клавишей буду на гриде, затем, в зависимости от выбранного года, "перезапускать" SQL-запрос с элементом WHERE, и перерисовывать грид. Я так мыслю алгоритм.
Последний раз редактировалось Osteon 28.02.2014 (Пт) 6:57, всего редактировалось 1 раз.

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Программное изменение контекстного меню

Сообщение Osteon » 27.02.2014 (Чт) 7:50

pronto писал(а):Да, возможно. Всё возможно при достаточном приложении усилий. А что делать — тебе должно быть веднее (попутно не забывая про usability).

Спасибо. Развернуто, доступно и понятно! А главное - ОЧЧЧЕНЬ остроумно! И хоть "вЕднее" пишется через "и", зато выпендрился умным аглицким словом!
Последний раз редактировалось Osteon 28.02.2014 (Пт) 11:02, всего редактировалось 3 раз(а).

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Программное изменение контекстного меню

Сообщение Osteon » 27.02.2014 (Чт) 7:51

Кривоус Анатолий писал(а):Создавай элемент меню с индексом (0-например), делай ему Visible = False, потом подгружай дополнительные через Load, и выгружай через Unload

Никогда не приходилось работать с меню программно, потому даже не знаю, откуда начать. Если можно - хотя бы намек...
Можно вообще в меню тупо ввести года, и каждый год дописывать в программу наступивший год, но это как-то коряво... :(

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Программное изменение контекстного меню

Сообщение Osteon » 28.02.2014 (Пт) 10:59

Кривоус Анатолий писал(а):Создавай элемент меню с индексом (0-например), делай ему Visible = False, потом подгружай дополнительные через Load, и выгружай через Unload

Все, спасибо, нашел в сети, разобрался:
Код: Выделить всё
Private Sub Command1_Click()
   Dim strName As String, varCount As Long
   strName = InputBox("Введите имя меню", "", "НоваяГруппа")
   varCount = mnuImport.Count
   If strName = "НоваяГруппа" Then strName = strName & varCount
   Load mnuImport(varCount) 'добавление пункта меню
   mnuImport(varCount).Caption = strName 'задание свойств добавленного меню
   mnuImport(varCount).Checked = False
End Sub


Оказывается, ничего сложного. Огромное человеческое спасибо, Анатолий!

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Программное изменение контекстного меню

Сообщение Osteon » 21.03.2014 (Пт) 10:19

Здравствуйте.
В процессе реализации динамического изменения меню столкнулся с непоняткой (для меня, во всяком случае):
При создании подпунктов меню сам пункт отражается в списке в виде заголовка меню со стрелочкой, которая означает наличие подпунктов. При наведении на этот пункт меню любезно выкидывает список подпунктов. Мерси ему. А если нужно, чтобы выплыл список уже динамически созданных подпунктов? Как быть? Ведь код программы начинает отрабатываться при клике на пункт меню. А здесь получается, что подпункты должны создаться при наведении курсора на пункт меню. Что-то типа MouseMove для меню. У меня пока все упирается в:
1. Клик на меню, а там выходит предварительно созданная форма с пунктами меню, которая выходит по координатам курсора (книга Visual Basic на практике под ред. Г.И.Магданурова, стр. 293).
2. При загрузке формы определять подпункты, и затем вставлять массив меню, и ждать клика на соответствующий пункт меню. Это как-то неизящно. А если не кликнет? Зачем заведомо мертвый массив?
Вот так как-то. Суть вопроса:
Возможна ли такая реализация динамически создаваемого меню без применения API-функций (недолюбливаю я их), и без создания дополнительной invisible-формы?
Пока не догоняю... :cry:

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Программное изменение контекстного меню

Сообщение The trick » 21.03.2014 (Пт) 10:23

Создавай сразу все подпункты.
UA6527P

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Программное изменение контекстного меню

Сообщение Osteon » 21.03.2014 (Пт) 14:31

Кривоус Анатолий писал(а):Создавай сразу все подпункты.

Т.е., по-любому создавать заведомо почти не используемый массив? :roll: Места он, конечно, мизер занимает, но вот рациональность протестует... 8)

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Программное изменение контекстного меню

Сообщение Osteon » 24.03.2014 (Пн) 13:11

В общем-то так и сделал. Только алгоритм чуть поменял - вместо заполнения массива вычислил разницу между самым младшим годом и самым старшим, к разнице привязал For...Next, и внутри него загрузил меню. Работает...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 27

    TopList