Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Миникласс "Меню" (контекстное) (число прочтений - 30018 )
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Миникласс "Меню" (контекстное)
11. Октября 2010 :: 13:42
Печать  
Класс для создания многоуровневого контекстного меню.
Картинки к пунктам меню можно брать из файлов, содержащих ресурсы или из bmp-файлов.
Меню можно выводить шрифтом, заданным пользователем(привет Eprst' у  Подмигивание)

Из требований -  dynwrapx.dll
« Последняя редакция: 13. Октября 2010 :: 13:06 - chessman »  

menu.ZIP ( 42 KB | Загрузки )
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Миникласс "Меню" (контекстное)
Ответ #1 - 13. Октября 2010 :: 08:46
Печать  
Вот вот, спасибо!
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #2 - 13. Октября 2010 :: 13:09
Печать  
Eprst писал(а) 13. Октября 2010 :: 08:46:
Вот вот, спасибо!


Сделал рефакторинг кода.
Вынес вспомогательный класс ImageList для формирования списка картинок. В него же добавил возможность загружать картинки подобной этой.
  

IMAGECOL.BMP ( 59 KB | Загрузки )
IMAGECOL.BMP
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
смысл?
Ответ #3 - 14. Октября 2010 :: 02:21
Печать  
Может, я чего-то не понимаю, но чем данный класс отличается от формирования многоуровневого меню с иконками средствами класса Сервис, а именно функцией ВыбратьЗначение?
Уже довольно давно использую оный для контекстного меню...
Навскидку увидел только одно отличие - картинки не обязаны быть в одном файле, но разве это сложность?
Вложил картинку сравнения. Сверху меню от объекта Сервис, снизу из примера ... поясните, пожалуйста, в чем преимущество второго?
  

_____001.JPG ( 46 KB | Загрузки )
_____001.JPG
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #4 - 14. Октября 2010 :: 06:02
Печать  
Попробуй сделать следующее, ОткрытьПлавающуюФорму, закрыть ее, а потом ВыбратьЗначение.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #5 - 14. Октября 2010 :: 06:52
Печать  
chessman писал(а) 14. Октября 2010 :: 06:02:
Попробуй сделать следующее, ОткрытьПлавающуюФорму, закрыть ее, а потом ВыбратьЗначение.

Ну да. Нарушается режим привязки к объекту, но режим контекстного меню (без привязки к выделенному объекту, например по правой кнопке мыши - см. параметры 4 и 5 функции ВыбратьЗначение) от этого ни капли не страдает. А ведь именно про контекстное меню разговор затеян...
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #6 - 14. Октября 2010 :: 06:56
Печать  
А у тебя Контекстное меню появляется после открытия и закрытия плавающей формы?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #7 - 14. Октября 2010 :: 07:03
Печать  
chessman писал(а) 14. Октября 2010 :: 06:56:
А у тебя Контекстное меню появляется после открытия и закрытия плавающей формы?

Не понял вопроса. Оно появляется тогда, когда я вызываю ВыбратьЗначение класса Сервис ... но если я прошу его привязать меню к выделенному объекту, то это не работает после закрытия плавающей формы - меню висит посреди экрана.
Если же я прошу привязать меню к курсору - висит где надо!

P.S.: Никогда ранее не использовал плавающую форму - потому косяк не наблюдал ранее ... да и не вижу пока причин для ее использования...
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #8 - 14. Октября 2010 :: 07:08
Печать  
Попробуй ВыбратьЗначение после того, как ты закрыл ПлавающуюФорму.
  

___________004.ert ( 69 KB | Загрузки )
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #9 - 14. Октября 2010 :: 07:11
Печать  
chessman писал(а) 14. Октября 2010 :: 07:08:
Попробуй ВыбратьЗначение после того, как ты закрыл ПлавающуюФорму.

Все прекрасно выбирается, как я и писал выше.
О! В твоем примере даже привязка не слетает, - по кнопке меню привязана к кнопке ... надо подумать, почему у меня слетает...

P.S.: Ага! понял! - там нет привязки - она от мыши пляшет!

P.P.S.: Может у тебя устаревшая версия Сервиса?
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #10 - 14. Октября 2010 :: 07:17
Печать  
Наконец смог посмотреть этот класс - мне очень понравился!

Но, к сожалению, недостаток Сервис::ВыбратьЗначение() в форме списка справочника (см. здесь) - не устранена. Мало того - после выбора пункта контекстного меню - курсор "бегает" за мышкой до первого щелчка.
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #11 - 14. Октября 2010 :: 07:21
Печать  
Dmitry The Wing писал(а) 14. Октября 2010 :: 07:11:
P.P.S.: Может у тебя устаревшая версия Сервиса?


Сможешь выложить Formex, я гляну?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #12 - 14. Октября 2010 :: 07:23
Печать  
simply писал(а) 14. Октября 2010 :: 07:17:
Но, к сожалению, недостаток Сервис::ВыбратьЗначение() в форме списка справочника (см. здесь) - не устранена. Мало того - после выбора пункта контекстного меню - курсор "бегает" за мышкой до первого щелчка.

Однако, это проблема не объекта Сервис, а логики ловли нажатия правой кнопкой - форме необходимо сообщить о том, что кнопка отпущена, отправив соответствующее сообщение. (раньше много работал с "низкоуровневым" программированием отрисовки форм и вообще GUI).
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #13 - 14. Октября 2010 :: 07:25
Печать  
chessman писал(а) 14. Октября 2010 :: 07:21:
Dmitry The Wing писал(а) 14. Октября 2010 :: 07:11:
P.P.S.: Может у тебя устаревшая версия Сервиса?


Сможешь выложить Formex, я гляну?

У меня последняя версия из кладовочки Альфа, которая недавно совершенно неожиданно ко всеобщей радости ожила!
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #14 - 14. Октября 2010 :: 07:26
Печать  
Dmitry The Wing писал(а) 14. Октября 2010 :: 07:23:
Однако, это проблема не объекта Сервис, а логики ловли нажатия правой кнопкой - форме необходимо сообщить о том, что кнопка отпущена, отправив соответствующее сообщение. (раньше много работал с "низкоуровневым" программированием отрисовки форм и вообще GUI).

Не спорю. А как? Есть опыт такого решения?
Я не стал заморачиваться. Через Svcsvc.Service работает без иконок и шрифта, да и ладно. Главное, что надежно
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать