Создание и работа с МЕНЮ

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

Создание и работа с МЕНЮ

Postby LEO_NIK on 04 Jan 2017, 17:14

Здравствуйте! С Новым годом! Появился вопрос: как создать МЕНЮ и потом работать с ним? По форуму вопросов относительно МЕНЮ много, но они все сильно продвинутые ...
Во ВЛОЖЕНИИ оригинал. При нажатии на кнопку Menu на нижнем индикаторе появляется вот такое главное меню с подсветкой первой позиции. Кнопками со стрелками можно двигаться по пунктам; соответственно и подсветка передвигается. При нажатии на ОК выбранный пункт открывается на другой уровень или что-то выполняется, если он конечный. Справа на ВЛОЖЕНИИ отрезаны цифровые кнопки. Если нажимать на кнопку, соответствующую цифре меню, то так же открывается этот пункт. Кнопка Menu со стрелкой влево - возврат на один уровень назад, повторное нажатие на Menu - выход из меню. По-моему, МЕНЮ самое обычное, типовое.
Скорее всего, в :labview: есть готовые модули типа ListBox, ComboBox ... Есть они? Где? С чего начать, чтобы не изобретать велосипед? Все позиции меню - текстовые. Возможно, в :labview: есть какой-то шаблон под формирование МЕНЮ. Смотрел и книги, и форум, но ничего практического для формирования МЕНЮ не встретил. Хорошо бы посмотреть на пример близкой реализации, если такой имеется. Спасибо!
Attachments
Меню.PNG
Меню.PNG (55.47 KiB) Viewed 423 times
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 04 Jan 2017, 17:49

Нашёл: Programming-Dialod & User Interface-Menu. Уже хорошо!. Разбираюсь, как создать нужное меню и как его привязать к конкретному индикатору. Ищу похожий пример ...
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby Kosist on 04 Jan 2017, 18:16

И Вас с Новым годом!
LEO_NIK wrote:Скорее всего, в :labview: есть готовые модули типа ListBox, ComboBox ... Есть они? Где?

Скорее всего? Прямо загадка века ))) А если проклацать набор контроллов-индикаторов?
Это не готовые модули, это тип контролов - и на каждый из них можно найти пример в Find Examples...
LEO_NIK wrote:Смотрел и книги, и форум, но ничего практического для формирования МЕНЮ не встретил.

Извините, но плохо искали - или неправильно формулировали поисковый запрос. Вся инфа есть, нужно только знать, что искать.
Подсказываю - на Вашем месте, я бы не парился, и использовал простой Listbox или Multicolumn Listbox в качестве меню, то бишь - обычного списка. Если меню вложенное, и если это не спец. требование, не заморачивался бы с отображением с уровнями вложенности. Скажем так: верхний уровень меню - один список, если переходите на уровень ниже - просто "стираете" отображаемое меню, и показываете уже список нижнего, и т.д. (в принципе, как Вы и описывали). Обычная работа с массивами; определения активного/выбранного рядка, и все.
Если хотите контекстное меню, то ищите инфу о "labview custom run-time menu". Но с ним работа будет немного иная...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 637
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2015
Karma: 202
CLAD I/O VIP students

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 04 Jan 2017, 19:49

Kosist wrote: я бы не парился, и использовал простой Listbox или Multicolumn Listbox в качестве меню

Спасибо, так, наверное, и сделаю. Упускаю, что есть help, встроенная в :labview: . Ищу где угодно, но только не под носом ...
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 06 Jan 2017, 01:23

Kosist wrote: я бы не парился, и использовал простой Listbox или Multicolumn Listbox в качестве меню

Так и сделал. Создал нужные Listbox, наложил их друг на друга и программно в соответствии с алгоритмом делаю их видимыми/невидимыми. Всё управление Listbox (по сути Меню) должно осуществляться только нажатием кнопок на лицевой панели прибора (см. выше ВЛОЖЕНИЕ): вверх, вниз, ОК... Это всё работает. Одно НО. Обнаружил, что помимо программного управления Listbox-ом, ещё и мышкой можно щёлкнуть прямо по любой строке списка (нижний дисплей на ВЛОЖЕНИИ) и она становится активной (можно и стрелками на клавиатуре). А это недопустимо. Никак не могу отключить мышку с клавиатурой (но только для Listbox, а для нажатия на кнопки на приборе она должна функционировать). Использовал event для ListBox. Перепробовал все события для мышки (UP, DOWN ...), для Key, для панели. Перепробовал массу свойств Listbox ... Мышь как вкопанная, не отключается, а если отключается, то и мышка, и весь Listbox (устанавливал Disabled), но это перебор.
Я недавно осваиваю :labview: (до этого работал только с текстовым программированием), смотрю, что у меня вопросы примитивные, но тем не менее, не могу найти на них ответ. Хотя, когда ответ получен, то программирую с использованием и циклов, и Case, и Event, причём они выстроены в несколько уровней. Всё получается довольно быстро. Вот и на этот вопрос, чувствую, что ответ будет простым, на поверхности. Целый день бьюсь и не могу отключить управление Listbox-ом мышкой. Прошу помощи.
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby IvanLis on 06 Jan 2017, 11:32

LEO_NIK wrote:Целый день бьюсь и не могу отключить управление Listbox-ом мышкой. Прошу помощи.

Добавьте обработчик в Event -> Mouse Down? (http://zone.ni.com/reference/en-XX/help ... use_downq/)
Если необходимо игнорировать все события, то достаточно сделать как на скрине
Снимок экрана от 2017-01-06 11-26-13.png
Снимок экрана от 2017-01-06 11-26-13.png (7.77 KiB) Viewed 362 times


Аналогично можно обработать и события от клавиатуры.
User avatar
IvanLis
professor
professor
 
Posts: 4328
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 665
hardware VIP bloggers teachers

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 06 Jan 2017, 12:09

IvanLis wrote:Добавьте обработчик в Event -> Mouse Down?

Спасибо за помощь. Надо же, перебрал в обработчике событий по мышке всё, кроме событий со знаком вопроса. Посчитал, что это мне будет задан вопрос при работе прибора о том, желаю ли я выполнить действие или нет. А это мне не нужно.
Проверил. 15 сек и всё работает как надо! Ещё раз спасибо!
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby Kosist on 06 Jan 2017, 13:44

LEO_NIK wrote:Так и сделал. Создал нужные Listbox, наложил их друг на друга и программно в соответствии с алгоритмом делаю их видимыми/невидимыми

Если Вы не делаете никаких эффектов типа "выезжание" меню, эффект наложения друг на друга; то можно обойтись и одним контролом; просто меняя текст в нем... Так ведь легче будет, наверное...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 637
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2015
Karma: 202
CLAD I/O VIP students

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 08 Jan 2017, 16:34

Kosist wrote: можно обойтись и одним контролом; просто меняя текст в нем...

Спасибо за совет. Никаких эффектов нет, простое меню. Я уже создал под каждый пункт МЕНЮ свой listbox, пронумеровал каждый, сделал исходно их все невидимыми свойством Visible и наложил друг на друга на одно и тоже место прибора. Для вызова создал цифровой одномерный массив, индексами и элементами которого которого являются номера listbox. Извлечённый список делаю видимым. Алгоритм работает. Но возник другой вопрос: при закрытии :labview: элементы массива стираются, не сохраняются. Как сохранить массив?
Зашел на форум, чтобы поискать ответ на этот вопрос, но увидел непрочитанный ответ на предыдущий вопрос и решил задать этот.
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby Kosist on 08 Jan 2017, 16:45

LEO_NIK wrote:Как сохранить массив?
Зашел на форум, чтобы поискать ответ на этот вопрос, но увидел непрочитанный ответ на предыдущий вопрос и решил задать этот.

Используйте функцию Write to Spreadsheet file (в :labview: 2015 эта функция называется немного иначе). Для чтения - Read from Spreadsheet file.
Listbox to file.png

Ну, или можете сделать парсер в ini файл. Тогда в одном файле можно хранить разные меню, в разных секциях.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 637
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2015
Karma: 202
CLAD I/O VIP students

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 08 Jan 2017, 17:34

Kosist wrote:Используйте функцию Write to Spreadsheet file Для чтения - Read from Spreadsheet file

Наверное, я неправильно создал массив, слишком просто. Поместил на переднюю панель массив: Modern-Array,Matrix & Cluster-Array и в левую часть появившегося изображения ввожу индекс (число), а в правую часть поместил Numeric Control, куда ввожу соответствующий элемент, тоже число. Для простоты я их делаю одинаковыми, привязанными к нужному пункту меню или, что то же самое, к номеру listbox.
Для считывания устанавливаю на блок-схеме Index Array. Входы соединяю с массивом и схемой формирования индекса, на выходе получаю номер listbox, который делаю видимым. Всё, работает, но только до выключения.
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby Kosist on 08 Jan 2017, 17:45

LEO_NIK wrote:Наверное, я неправильно создал массив, слишком просто. Поместил на переднюю панель массив: Modern-Array,Matrix & Cluster-Array и в левую часть появившегося изображения ввожу индекс (число), а в правую часть поместил Numeric Control, куда ввожу соответствующий элемент, тоже число. Для простоты я их делаю одинаковыми, привязанными к нужному пункту меню или, что то же самое, к номеру listbox.
Для считывания устанавливаю на блок-схеме Index Array. Входы соединяю с массивом и схемой формирования индекса, на выходе получаю номер listbox, который делаю видимым. Всё, работает, но только до выключения.

:vi: -ку в студию =)
Что именно не работает? Сохраняйте в файл массив с эл-тами меню, считывайте в тот же массив + отображайте дефолтное меню в листбоксе.
Выкладывайте код, будем смотреть :wink:
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 637
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2015
Karma: 202
CLAD I/O VIP students

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 08 Jan 2017, 18:05

Kosist wrote: :vi: -ку в студию =)

Да сложно это ... МЕНЮ - небольшая часть прибора. Фрагменты его уже отладил, что-то конфликтует, отложил, к чему-то ещё не приступал... Даже когда сам запускаю, то забываю, на какие кнопки можно, а на какие пока нельзя нажимать. Как такое выкладывать? Старался выкроить работоспособный фрагмент, упрощал его и тогда выкладывал с появляющемся вопросом. Так и сейчас. Если не разберусь и если смогу вырезать неработающий код, то выложу. В любом случае, спасибо за помощь.
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Re: Создание и работа с МЕНЮ

Postby Blackman on 08 Jan 2017, 18:54

После создания и задания значений массива на FP - выделить его Левой Кнопкой Мышки -> выбрать пункт меню: Edit -> Make Selected Values Default.
Blackman
leader
leader
 
Posts: 550
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 116

Re: Создание и работа с МЕНЮ

Postby LEO_NIK on 08 Jan 2017, 22:43

LEO_NIK wrote: Да сложно это ...

Оказалось, что мой вопрос, как и предыдущие, сводится к простому. Я на лицевую панель установил только 2 массива: элементы из контролов и из строк. Именно такой массив я использую в программе. Можно ввести пару-тройку элементов, а потом "сохранить" и выйти из :labview: . При входе все элементы массивов будут отсутствовать. Всё, что мы заносим в строки или контролы таких массивов, при выключении :labview: стирается. Тогда вопрос: что за тип данных должен быть элементом массива, чтобы введённые данные сохранялись? Мне же нужно хранить простой одномерный массив из цифр (можно из букв).
Attachments
Массив.vi
(6.53 KiB) Downloaded 12 times
Last edited by LEO_NIK on 08 Jan 2017, 22:51, edited 1 time in total.
LEO_NIK
user
user
 
Posts: 74
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

Next

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

Who is online

Users browsing this forum: No registered users and 3 guests

cron