Можно ли сформировать нестандартное меню

Простейшие вопросы в области инженерной разработки

Re: Можно ли сформировать меню

Postby AndreyDmitriev on 03 Feb 2012, 17:25

> https://decibel.ni.com/content/docs/DOC-17642
> https://decibel.ni.com/content/groups/u ... abview-net

Вот спасибо, за ссылки и огород городить не надо (точнее надо, но немного другой).
Я давно искал пример с менюшкой на .net, а оно, оказывается под ногами лежало...

Да, и картинки тоже навскидку работают:
Attachments
!menu.png
User avatar
AndreyDmitriev
VIP
VIP
 
Posts: 1225
Joined: 03 Feb 2010, 00:42
Location: Германия
Medals: 6
Activity (1) Professionalism (1) Tutorials (1) Gold (1) Black (2)
LabVIEW Version: 6.1 - 2016
Karma: 433

Re: Можно ли сформировать меню

Postby Pavel Krivozubov on 04 Feb 2012, 07:15

Тема интересная, спасибо за поднятие такого вопроса, он может быть полезен многим. Вынес в топ.
User avatar
Pavel Krivozubov
professor
professor
 
Posts: 4366
Joined: 07 Feb 2008, 16:39
Location: г. Электросталь
Medals: 3
Activity (2) Bronze (1)
LabVIEW Version: 7.0 - 2013
Karma: 213
hardware I/O PDA VIP vision bloggers internet teachers students freelance

Re: Можно ли сформировать нестандартное меню

Postby Михаил23 on 23 Feb 2012, 11:05

Re: Можно ли сформировать меню

Сообщение Vasa 02 фев 2012, 22:50
.NET menu bar
https://decibel.ni.com/content/docs/DOC-17642
Lv2010


После установки этого тулкита в LV2009. :labview: при запуски стал вылетать с ошибкой. Ставил с помощью прилагаемого exe.
User avatar
Михаил23
adviser
adviser
 
Posts: 219
Joined: 24 Nov 2008, 17:58
Location: Москва
LabVIEW Version: 2009
Karma: 8
hardware freelance

Re: Можно ли сформировать нестандартное меню

Postby Vasiliy Baev on 23 Feb 2012, 11:39

Михаил23, данный тулкит сделан в десятой версии, возможно отсюда и проблемы.
User avatar
Vasiliy Baev
master
master
 
Posts: 483
Joined: 31 Oct 2011, 09:02
Location: Санкт-Петербург
Medals: 4
Activity (1) Gold (1) Bronze (2)
LabVIEW Version: 2013
Karma: 138
I/O VIP

Re: Можно ли сформировать нестандартное меню

Postby Михаил23 on 23 Feb 2012, 11:47

Vasa wrote:Михаил23, данный тулкит сделан в десятой версии, возможно отсюда и проблемы.

Да но в требованиях к нему от 2009 и старше. Вообщем пришлось переустановить :labview: Т.к востановление не помогло. Попробовал просто вручную перенести в user.lib нужные библиотеки. Все работает все запускается. Так что скорее всего все испортил exe, который идет в комплекте для установки. Будьте аккуратны.
User avatar
Михаил23
adviser
adviser
 
Posts: 219
Joined: 24 Nov 2008, 17:58
Location: Москва
LabVIEW Version: 2009
Karma: 8
hardware freelance

Re: Можно ли сформировать нестандартное меню

Postby jane_wild on 06 Dec 2017, 22:05

Всем здравствуйте, решила попробовать в одном своем проекте данное меню. Возникли вопросы: Возможно ли прицепить иконки непосредственно к самому верхнему уровню? (В приведенном примере иконки к словам "First", " Second","Third") Как эти же слова написать более крупным шрифтом? И наверное самый главный вопрос, запускаю проект, проверяю кнопочки, все работает, далее останавливаю.... и останавливаются все запущенные VI за исключением callback в приведенном примере MenuCB2.vi , который продолжает работать, о чем говорят замочки на библиотеках в проекте. К тому же его не остановить кнопкой Abort Execution она просто не активна. Запускаю снова - меню уже не работает. Останавливаю, закрываю весь проект, открываю снова - все работает. Причем если раньше при закрытии проекта с "висячими" VI LabVIEW спрашивала разрешения об остановки запущеных VIs В этом случае ничего не спрашивает, молча закрывает проект и все, такое впечатление что LabVIEW не видит запущенного VI.... В чем может быть проблема? Надоедает при отладке каждый раз закрывать-открывать проект.... Спасибо
User avatar
jane_wild
beginner
beginner
 
Posts: 49
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2013
Karma: 0

Re: Можно ли сформировать нестандартное меню

Postby Blackman on 07 Dec 2017, 00:05

Посмотрел пример по ссылке. Все работает нормально. Пришлось только откорректировать путь к файлу иконки.

Здесь библиотеки для уведомлений. Может заинтересуют)

Notify Icon Class
https://lavag.org/topic/14060-put-your- ... d-for-all/

Averna Notify Icon - Averna
http://sine.ni.com/nips/cds/view/p/lang/ru/nid/212914
Blackman
leader
leader
 
Posts: 684
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 170

Re: Можно ли сформировать нестандартное меню

Postby jane_wild on 07 Dec 2017, 04:25

Так в том то и дело, что сам по себе он работает. Но стоит добавить его в проект - виснет callback. Причем в скомпилированном виде нареканий нет, все работает. Надоедает просто при отладке закрывать-открывать.
Как шрифт увеличить или иконки прикрутить? На touchscreen трудно пальцем попасть на нужную строчку - мелко все... Имеется ввиду именно меню верхнего уровня, потому как вложенное хоть и шрифт такой же, зато иконки поставила большие - не промахнешся. Спасибо.
User avatar
jane_wild
beginner
beginner
 
Posts: 49
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2013
Karma: 0

Re: Можно ли сформировать нестандартное меню

Postby dadreamer on 07 Dec 2017, 11:54

Детально не могу сейчас сидеть разбираться, но вот запустил пример по ссылке https://forums.ni.com/t5/Example-Progra ... -p/3499712 , всё работает нормально, что в отдельном :vi: , что в проекте. На БД только указал путь к dossier-icone-8759.ico. Кнопкой Stop программа нормально останавливается. Замочков никаких не вижу в структуре проекта. :labview: 2016 64 бита.

2017-12-07_13-13-57.jpg

К самой программе у меня только одна претензия - Message Box не стоило запихивать в Callback SubVI, ему там не место. По-хорошему, нужно было создать User Event строкового типа (например) и передать его в Callback, подключив ко входу User Param. Как только наступает событие нажатия пункта меню, в Callback генерится User Event со строкой, содержащей имя пункта меню. В основной программе "ловим" User Events и, если нужно, отображаем на панели. Стандартный подход для .NET событий (даже где-то в примерах от NI есть).
jane_wild wrote:Но стоит добавить его в проект - виснет callback.

А как он может виснуть? Там же только вывод сообщения на экран. Само-то сообщение появляется? По идее должно. Кроме того, SubVI настроен как клон, т.е. даже при висящем сообщении повторный вызов должен нормально отработать и должна появиться вторая (третья и т.д.) табличка. upd: так в теории, а на практике окошко модальное и не даёт ничего нажать на ФП.

Я заметил, что Callback SubVI после отработки остаётся в состоянии выполнения, хотя сам по себе не выполняется (зарезервирован для выполнения). Его в таком состоянии нельзя редактировать, даже если он не клон. Есть ворк-эраунд для этого: https://forums.ni.com/t5/LabVIEW/net-ev ... -p/3220455 Я не пробовал, но думаю, что это поможет.

upd2:
Метод работает, но только после остановки главного :vi: ! Ну, то есть, можно сделать отдельный :vi: для "освобождения" или организовать динамический вызов главного :vi: , после отработки которого вызывать GC.Collect().
jane_wild wrote:Как шрифт увеличить или иконки прикрутить?

Со шрифтом довольно-таки просто всё. В Create Menu.vi нужно добавить на БД .NET-конструктор, в котором выбрать сборку (assembly) System.Drawing(4.0.0.0), в ней объект Font, и конструктор объекта с параметрами String и Single (чтобы лишний раз не возиться с .NET-объектами).
2017-12-07_13-15-38.jpg

Вот, и далее подключаете ссылку объекта Font ко входу узла свойства. Только не забудьте где-нибудь потом за'Dispose'ить ссылку объекта Font, иначе может получиться маленькая утечка (либо сразу после вызова узла свойств, либо в конце кода SubVI).

С иконками чуть посложнее, но не очень. :wink: В Assign Icon.vi есть цикл For, перебирающий самые верхние (родительские) пункты меню. В примере их всего 4, так что цикл крутится от 0 до 3. Для каждого родительского пункта вызывается DropDownItems, то есть получение ссылок на дочерние пункты, которые в этом пункте содержатся. Для них уже написан код установки иконки (см. кейс во внутреннем цикле For). Вам надо просто взять этот кусочек кода и вставить в разрыв между методом get_Item и свойством DropDownItems:

2017-12-07_13-21-13.jpg

Тогда главным пунктам меню также будут присваиваться иконки. В принципе, ничего сложного. Единственный нюанс - может получиться путаница с путями: какие для основных пунктов, какие для вложенных. Я бы сделал отдельный вход-контрол для основных, отдельный - для вложенных. Если не изощряться особо и не ставить прям для каждого пункта уникальную иконку, то можно обойтись даже двумя обычными Path-контролами вместо двумерного массива. Ну, это на вкус и цвет, в общем.
User avatar
dadreamer
doctor
doctor
 
Posts: 2895
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Можно ли сформировать нестандартное меню

Postby jane_wild on 07 Dec 2017, 16:56

Я заметил, что Callback SubVI после отработки остаётся в состоянии выполнения, хотя сам по себе не выполняется (зарезервирован для выполнения). Его в таком состоянии нельзя редактировать, даже если он не клон. Есть ворк-эраунд для этого: https://forums.ni.com/t5/LabVIEW/net-ev ... -p/3220455 Я не пробовал, но думаю, что это поможет.


Я видимо путанно объяснила, именно такое поведение я и наблюдаю. Пункты меню работают, я в callback передаю ссылку на очередь, используя user parameters, и case структурой, определив какой пункт меню был выбран, посылаю сообщения главной программе.

К сожалению приведенное выше решение (метод GC.Collect()) в LV2016 -32, в котором создан мой проект не работает. Что нужно подавать на вход умомянутого метода
CG_Collect.png
CG_Collect.png (4.51 KiB) Viewed 100 times

В остальном все просто супер! Шрифт большой и главное меню с иконками. Спасибо за развернутое объяснение.
User avatar
jane_wild
beginner
beginner
 
Posts: 49
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2013
Karma: 0

Re: Можно ли сформировать нестандартное меню

Postby dadreamer on 07 Dec 2017, 17:53

jane_wild wrote:К сожалению приведенное выше решение (метод GC.Collect()) в LV2016 -32, в котором создан мой проект не работает. Что нужно подавать на вход умомянутого метода
CG_Collect.png

1. Помещаете на БД .NET Invoke Node
2. ПКМ по узлу -> Select Class -> .NET -> Browse
3. Assembly - mscorlib(4.0.0.0), группа объектов - System, объект - GC
4. Нажимаете ОК в окошке
5. ПКМ по узлу -> Select Method -> [S]Collect()
6. Всё, можно использовать
Правда, не знаю, что проще - запускать каждый раз отдельный :vi: с этим методом после отработки основной проги или просто перезапускать :labview: . Тем более что в экзешнике всё нормально работает. Ну, может, вы какую-то хитрую архитектуру придумаете для этого :dntknw:
User avatar
dadreamer
doctor
doctor
 
Posts: 2895
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Можно ли сформировать нестандартное меню

Postby jane_wild on 07 Dec 2017, 20:05

1. Помещаете на БД .NET Invoke Node
2. ПКМ по узлу -> Select Class -> .NET -> Browse
3. Assembly - mscorlib(4.0.0.0), группа объектов - System, объект - GC
4. Нажимаете ОК в окошке
5. ПКМ по узлу -> Select Method -> [S]Collect()
6. Всё, можно использовать


Так я все выше описанное Вами проделала. Замочки на библиотеках, проподают. Но после запуска проекта меню не выпадает, сколько ни жмякай на кнопочку. Закрыла-Открыла проект все снова работает (LabVIEW не обязательно перезапускать). Ну и черт с ним, буду перезапускать проект, уже мало что осталось доделать. Спасибо
User avatar
jane_wild
beginner
beginner
 
Posts: 49
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2013
Karma: 0

Re: Можно ли сформировать нестандартное меню

Postby dadreamer on 07 Dec 2017, 20:53

jane_wild wrote:Замочки на библиотеках

Это как-то странно. Я уже говорил, что не вижу никаких замков. Проверил сейчас на :labview: 2017 64-bit. Единственные файлы, на которых появляются замки - две либы NI_*.lvlib в папке vi.lib. И всё. Может, вы как-то не так добавили файлы в проект и они лочатся. Попробуйте открыть Example.vi и после этого создать чистый проект. :labview: спросит, надо ли добавлять - добавьте. Я так проект делал, всё ок.
User avatar
dadreamer
doctor
doctor
 
Posts: 2895
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Можно ли сформировать нестандартное меню

Postby jane_wild on 07 Dec 2017, 21:36

Согласна, что странно. Как то не полностью освобождаюстя ресурсы
Вот так выклядят кусочек окна проекта после остановки программы. Несмотря на замочки, можно редактировать любые VI за исключением callback
Lock.png
Lock.png (5.01 KiB) Viewed 84 times


Вот так, после запуска Collect.vi (в котором единственный метод CG.Collect) Замочки пропадают и можно редактировать все, включая callback
UnLock.png
UnLock.png (5.47 KiB) Viewed 84 times

Но при повторном запуске всего проекта StartUp-ом Все запускается и работает, только strip Menu не выпадает. Жму на кнопку и ничего не происходит. Закрыла - Открыла проект - все гуд.
User avatar
jane_wild
beginner
beginner
 
Posts: 49
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2013
Karma: 0

Re: Можно ли сформировать нестандартное меню

Postby jane_wild on 07 Dec 2017, 23:34

Разобралась. Всему виной оказалось вот это свойство
Height.png
Height.png (1.71 KiB) Viewed 76 times


Оно используется в цикле for, для плавного выдвигания - задвигания меню. Так вот, при первом открытии проекта и его последующем запуске, меню имеет размеры, в данном случае высота, установленные при проектировании, скажем 80 пикселей. Далее инициализируется меню и прячется подачей нуля на вход упомянутого метода. При нажатии на кнопочку, циклом for, добавляя по 10 пикселей к высоте, начиная с нуля, меню выдвигается. После выбора необходимого подпункта, оно снова задвигается. Закрывая программу меню спрятано и его высота равна нулю. При повторном запуске, LabVIEW "помнит" этот ноль, меню проходит всю инициализацию без ошибок, но оно просто не показывается, хотя его размер по высоте и устанавливается в положенные 80 пикселей. Вот.
Проблему решила простой подачей 80 на свойство Height, при выходе из программы. Всем спасибо.
User avatar
jane_wild
beginner
beginner
 
Posts: 49
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2013
Karma: 0

PreviousNext

Return to Для чайников

Who is online

Users browsing this forum: Google and 17 guests

cron