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

Простейшие вопросы в области инженерной разработки
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

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

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

Сообщение LEO_NIK »

Нашёл: Programming-Dialod & User Interface-Menu. Уже хорошо!. Разбираюсь, как создать нужное меню и как его привязать к конкретному индикатору. Ищу похожий пример ...
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

И Вас с Новым годом!
LEO_NIK писал(а):Скорее всего, в :labview: есть готовые модули типа ListBox, ComboBox ... Есть они? Где?
Скорее всего? Прямо загадка века ))) А если проклацать набор контроллов-индикаторов?
Это не готовые модули, это тип контролов - и на каждый из них можно найти пример в Find Examples...
LEO_NIK писал(а):Смотрел и книги, и форум, но ничего практического для формирования МЕНЮ не встретил.
Извините, но плохо искали - или неправильно формулировали поисковый запрос. Вся инфа есть, нужно только знать, что искать.
Подсказываю - на Вашем месте, я бы не парился, и использовал простой Listbox или Multicolumn Listbox в качестве меню, то бишь - обычного списка. Если меню вложенное, и если это не спец. требование, не заморачивался бы с отображением с уровнями вложенности. Скажем так: верхний уровень меню - один список, если переходите на уровень ниже - просто "стираете" отображаемое меню, и показываете уже список нижнего, и т.д. (в принципе, как Вы и описывали). Обычная работа с массивами; определения активного/выбранного рядка, и все.
Если хотите контекстное меню, то ищите инфу о "labview custom run-time menu". Но с ним работа будет немного иная...
Мы делили апельсин - много наших полегло...
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Kosist писал(а): я бы не парился, и использовал простой Listbox или Multicolumn Listbox в качестве меню
Спасибо, так, наверное, и сделаю. Упускаю, что есть help, встроенная в :labview: . Ищу где угодно, но только не под носом ...
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Kosist писал(а): я бы не парился, и использовал простой Listbox или Multicolumn Listbox в качестве меню
Так и сделал. Создал нужные Listbox, наложил их друг на друга и программно в соответствии с алгоритмом делаю их видимыми/невидимыми. Всё управление Listbox (по сути Меню) должно осуществляться только нажатием кнопок на лицевой панели прибора (см. выше ВЛОЖЕНИЕ): вверх, вниз, ОК... Это всё работает. Одно НО. Обнаружил, что помимо программного управления Listbox-ом, ещё и мышкой можно щёлкнуть прямо по любой строке списка (нижний дисплей на ВЛОЖЕНИИ) и она становится активной (можно и стрелками на клавиатуре). А это недопустимо. Никак не могу отключить мышку с клавиатурой (но только для Listbox, а для нажатия на кнопки на приборе она должна функционировать). Использовал event для ListBox. Перепробовал все события для мышки (UP, DOWN ...), для Key, для панели. Перепробовал массу свойств Listbox ... Мышь как вкопанная, не отключается, а если отключается, то и мышка, и весь Listbox (устанавливал Disabled), но это перебор.
Я недавно осваиваю :labview: (до этого работал только с текстовым программированием), смотрю, что у меня вопросы примитивные, но тем не менее, не могу найти на них ответ. Хотя, когда ответ получен, то программирую с использованием и циклов, и Case, и Event, причём они выстроены в несколько уровней. Всё получается довольно быстро. Вот и на этот вопрос, чувствую, что ответ будет простым, на поверхности. Целый день бьюсь и не могу отключить управление Listbox-ом мышкой. Прошу помощи.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

LEO_NIK писал(а):Целый день бьюсь и не могу отключить управление 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 КБ) 8085 просмотров
Аналогично можно обработать и события от клавиатуры.
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

IvanLis писал(а): Добавьте обработчик в Event -> Mouse Down?
Спасибо за помощь. Надо же, перебрал в обработчике событий по мышке всё, кроме событий со знаком вопроса. Посчитал, что это мне будет задан вопрос при работе прибора о том, желаю ли я выполнить действие или нет. А это мне не нужно.
Проверил. 15 сек и всё работает как надо! Ещё раз спасибо!
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

LEO_NIK писал(а):Так и сделал. Создал нужные Listbox, наложил их друг на друга и программно в соответствии с алгоритмом делаю их видимыми/невидимыми
Если Вы не делаете никаких эффектов типа "выезжание" меню, эффект наложения друг на друга; то можно обойтись и одним контролом; просто меняя текст в нем... Так ведь легче будет, наверное...
Мы делили апельсин - много наших полегло...
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Kosist писал(а): можно обойтись и одним контролом; просто меняя текст в нем...
Спасибо за совет. Никаких эффектов нет, простое меню. Я уже создал под каждый пункт МЕНЮ свой listbox, пронумеровал каждый, сделал исходно их все невидимыми свойством Visible и наложил друг на друга на одно и тоже место прибора. Для вызова создал цифровой одномерный массив, индексами и элементами которого которого являются номера listbox. Извлечённый список делаю видимым. Алгоритм работает. Но возник другой вопрос: при закрытии :labview: элементы массива стираются, не сохраняются. Как сохранить массив?
Зашел на форум, чтобы поискать ответ на этот вопрос, но увидел непрочитанный ответ на предыдущий вопрос и решил задать этот.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

LEO_NIK писал(а):Как сохранить массив?
Зашел на форум, чтобы поискать ответ на этот вопрос, но увидел непрочитанный ответ на предыдущий вопрос и решил задать этот.
Используйте функцию Write to Spreadsheet file (в :labview: 2015 эта функция называется немного иначе). Для чтения - Read from Spreadsheet file.
Listbox to file.png
Ну, или можете сделать парсер в ini файл. Тогда в одном файле можно хранить разные меню, в разных секциях.
Мы делили апельсин - много наших полегло...
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

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

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

LEO_NIK писал(а):Наверное, я неправильно создал массив, слишком просто. Поместил на переднюю панель массив: Modern-Array,Matrix & Cluster-Array и в левую часть появившегося изображения ввожу индекс (число), а в правую часть поместил Numeric Control, куда ввожу соответствующий элемент, тоже число. Для простоты я их делаю одинаковыми, привязанными к нужному пункту меню или, что то же самое, к номеру listbox.
Для считывания устанавливаю на блок-схеме Index Array. Входы соединяю с массивом и схемой формирования индекса, на выходе получаю номер listbox, который делаю видимым. Всё, работает, но только до выключения.
:vi: -ку в студию =)
Что именно не работает? Сохраняйте в файл массив с эл-тами меню, считывайте в тот же массив + отображайте дефолтное меню в листбоксе.
Выкладывайте код, будем смотреть :wink:
Мы делили апельсин - много наших полегло...
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Kosist писал(а): :vi: -ку в студию =)
Да сложно это ... МЕНЮ - небольшая часть прибора. Фрагменты его уже отладил, что-то конфликтует, отложил, к чему-то ещё не приступал... Даже когда сам запускаю, то забываю, на какие кнопки можно, а на какие пока нельзя нажимать. Как такое выкладывать? Старался выкроить работоспособный фрагмент, упрощал его и тогда выкладывал с появляющемся вопросом. Так и сейчас. Если не разберусь и если смогу вырезать неработающий код, то выложу. В любом случае, спасибо за помощь.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

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

Сообщение Blackman »

После создания и задания значений массива на FP - выделить его Левой Кнопкой Мышки -> выбрать пункт меню: Edit -> Make Selected Values Default.
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

LEO_NIK писал(а): Да сложно это ...
Оказалось, что мой вопрос, как и предыдущие, сводится к простому. Я на лицевую панель установил только 2 массива: элементы из контролов и из строк. Именно такой массив я использую в программе. Можно ввести пару-тройку элементов, а потом "сохранить" и выйти из :labview: . При входе все элементы массивов будут отсутствовать. Всё, что мы заносим в строки или контролы таких массивов, при выключении :labview: стирается. Тогда вопрос: что за тип данных должен быть элементом массива, чтобы введённые данные сохранялись? Мне же нужно хранить простой одномерный массив из цифр (можно из букв).
Вложения
Массив.vi
(6.53 КБ) 132 скачивания
Последний раз редактировалось LEO_NIK 08 янв 2017, 22:51, всего редактировалось 1 раз.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»