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


1C++ rocks!

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

Обычный виндовый Send/PostMessage - какое сообщение - надо смотреть. Соответствующей документации под рукой нет ... первое что приходит в голову - сообщение WM_NCRBUTTONUP ... хотя туда скорее придется передать координаты, но их можно получить через GetCursorPos ... в общем, надо сесть и попробовать ... к сожалению, времени на такие пробы сейчас нет  Смущённый

P.S.: Сейчас на этом форуме висит две проблемы, которые в работе обнаружены, но подробно описать и состяпать тестовую базу времени нет ... вот и приходится жить с нерешенными проблемами 1С++. Благо, другие попадались не только мне, а те уже смогли выделить время на описание и тестовую, что привело к устранению проблем.
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #16 - 14. Октября 2010 :: 07:52
Печать  
Dmitry The Wing писал(а) 14. Октября 2010 :: 07:25:
У меня последняя версия из кладовочки Альфа, которая недавно совершенно неожиданно ко всеобщей радости ожила!


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


1C++ rocks!

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

Открывал форму несколько раз и, будешь смеяться, я не стал длать для этого кнопку - просто добавил в меню, вызываемое через сервис ... т.е. оно прекрасно работает после многократного открытия плавающих окон, однако теряет способность привязываться к объектам...

Офф: велосипедостроение - штука опасная и затягивающая ... до того, как научился рисовать дерево в ТП - использовал самописную ВК ... сколько же времени я потратил на отладку этой штуки ... а в итоге оказалось, что дерево сделать из ТП можно намного быстрее, чем реализовывать его же виндовыми средствами в ВК.  Подмигивание
На данный момент из той ВК используется всего лишь один класс - BinaryStream, т.к. существующие аналоги не смогли полноценно реализовать требуемых функционал ... а так - там были и дерево и прогресс и многое другое...
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #18 - 14. Октября 2010 :: 08:29
Печать  
Dmitry The Wing писал(а) 14. Октября 2010 :: 08:15:
Открывал форму несколько раз и, будешь смеяться, я не стал длать для этого кнопку - просто добавил в меню, вызываемое через сервис ... т.е. оно прекрасно работает после многократного открытия плавающих окон, однако теряет способность привязываться к объектам...


Выложи пример. Может я что не так делаю.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

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

Вот наиболее простой пример (не стал выкладывать обработку, но сам ее опробовал - работает):
Код
Выбрать все
Процедура Сформировать()
    Сервис = СоздатьОбъект("Сервис");
    Меню = СоздатьОбъект("СписокЗначений");
    Меню.ДобавитьЗначение("ОткрытьПлавающуюФорму", "ОткрытьПлавающуюФорму");
    Выбор = "";
    Если Сервис.ВыбратьЗначение(Меню, Выбор, 0, 0, 2) <> 1 Тогда
        Возврат;
    КонецЕсли;
    Если Выбор = "ОткрытьПлавающуюФорму" Тогда
        Сервис.ОткрытьПлавающуюФорму("Справочник.Сотрудники");
    КонецЕсли;
КонецПроцедуры
 


P.S.: Оно позволило открыть даже не одно окно справочника, чего я не ожидал Улыбка

P.P.S.: В работе для отображения меню использую некоторую структурку классов, т.к. меню бывают разные ... например, один из них реализует замену стандартного МенюДействий, что есть в типовой практически в каждом документе. Это позволяет, например, добавлять и контролировать доступ к пунктам меню без изменения конфигурации...
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #20 - 14. Октября 2010 :: 12:26
Печать  
Хм...провел рад экспериментов, по ходу ты прав, все работает.
Получается, что я велосипед изобрел.
Единственный плюс тогда, что я для себя разобрался, как это работает изнутри  Подмигивание....

Зы:у меня только в одной обработке перестает работать Сервис:ВыбратьЗначение. Буду разбираться.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #21 - 15. Октября 2010 :: 00:46
Печать  
chessman писал(а) 14. Октября 2010 :: 12:26:
Получается, что я велосипед изобрел.
Единственный плюс тогда, что я для себя разобрался, как это работает изнутри  Подмигивание....

Повторюсь:
Dmitry The Wing писал(а) 14. Октября 2010 :: 08:15:
велосипедостроение - штука опасная и затягивающая ...

Сам на этом не раз обжигался Улыбка
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #22 - 19. Октября 2010 :: 14:01
Печать  
Dmitry The Wing писал(а) 14. Октября 2010 :: 08:15:
Офф: велосипедостроение - штука опасная и затягивающая ... до того, как научился рисовать дерево в ТП - использовал самописную ВК ... сколько же времени я потратил на отладку этой штуки ... а в итоге оказалось, что дерево сделать из ТП можно намного быстрее, чем реализовывать его же виндовыми средствами в ВК.  Подмигивание


Если не затруднит, дайте пример Вашего дерева на ТП. Заранее спасибо.
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Миникласс "Меню" (контекстное)
Ответ #23 - 20. Октября 2010 :: 00:47
Печать  
pvase писал(а) 19. Октября 2010 :: 14:01:
Если не затруднит, дайте пример Вашего дерева на ТП. Заранее спасибо.

Можно посмотреть или даже напрямую использовать Класс "ПоставщикДанных", однако мне он показался чересчур громоздким, потому реализовал свой попроще. Пример сделать будет непросто потому как он использует в работе некоторые другие мои специфичные классы, а времени на "выгрызание" только нужного сейчас нет - запарки ...
  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Миникласс "Меню" (контекстное)
Ответ #24 - 21. Июля 2011 :: 05:40
Печать  
Simly в октябре обращал внимание, что
"... Сервис::ВыбратьЗначение()...в форме списка справочника... после выбора пункта контекстного меню - курсор "бегает" за мышкой до первого щелчка."
Что-то подобное происходит и при вызове Сервис::ВыбратьЗначение() в ТП.
Нет чёткого решения, как "отпустить" кнопку мыши? ...мелочь, а неприятно)).
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Миникласс "Меню" (контекстное)
Ответ #25 - 21. Июля 2011 :: 07:48
Печать  
Igor YN писал(а) 21. Июля 2011 :: 05:40:
Simly в октябре обращал внимание, что
"... Сервис::ВыбратьЗначение()...в форме списка справочника... после выбора пункта контекстного меню - курсор "бегает" за мышкой до первого щелчка."
Что-то подобное происходит и при вызове Сервис::ВыбратьЗначение() в ТП.
Нет чёткого решения, как "отпустить" кнопку мыши? ...мелочь, а неприятно)).


Про Сервис::ВыбратьЗначение() в ТП ничего сказать не могу.
Использую самописное меню  Круглые глаза и подобных проблем в ТП не замечал.
А Simly вроде там заморачивался с SendKeys, может из-за этого курсор "бегал"?

  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Миникласс "Меню" (контекстное)
Ответ #26 - 21. Июля 2011 :: 09:47
Печать  
Значит я его не так понял.
Спасибо, буду пробовать твой класс!
  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Миникласс "Меню" (контекстное)
Ответ #27 - 21. Июля 2011 :: 10:53
Печать  
Юзаю класс "Меню". А задавать цвета (как в Формексе, например) нельзя?
  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Миникласс "Меню" (контекстное)
Ответ #28 - 21. Июля 2011 :: 11:41
Печать  
я кое-что сам нарыл. вот кусочек кода
(Ц1 и Ц2 я подставил)
...
           |hDC = Wrap.GetDC(mWnd)
           //|Wrap.ReleaseDC "+ СокрЛП(hWnd) + ", hDC
           |
           |GREY            = "+Ц1+"
           |BLUE       = "+Ц2+"
           |hBrushGrey = Wrap.CreateSolidBrush(GREY)
           |hBrushBlue = Wrap.CreateSolidBrush(BLUE)
           |hPen            = Wrap.CreatePen(0, 0, "+Ц3+")
           |
...
и не пойму пака, что такое "hPen" и можно ли цвет текста задать?
  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Миникласс "Меню" (контекстное)
Ответ #29 - 21. Июля 2011 :: 11:59
Печать  
Вобщем Меню работаем, НО
Simply правильно говорил - мышь так же, как в Сервис::ВыбратьЗначение остается как бы не отжатой!!! при движении к тому месту, откуда в ТП было вызвано меню, оно показывается без нажатия кнопки! Как ЭТО побороть!?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 
ОтправитьПечать