Страница 1 из 4

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

Добавлено: 04 янв 2017, 17:14
LEO_NIK
Здравствуйте! С Новым годом! Появился вопрос: как создать МЕНЮ и потом работать с ним? По форуму вопросов относительно МЕНЮ много, но они все сильно продвинутые ...
Во ВЛОЖЕНИИ оригинал. При нажатии на кнопку Menu на нижнем индикаторе появляется вот такое главное меню с подсветкой первой позиции. Кнопками со стрелками можно двигаться по пунктам; соответственно и подсветка передвигается. При нажатии на ОК выбранный пункт открывается на другой уровень или что-то выполняется, если он конечный. Справа на ВЛОЖЕНИИ отрезаны цифровые кнопки. Если нажимать на кнопку, соответствующую цифре меню, то так же открывается этот пункт. Кнопка Menu со стрелкой влево - возврат на один уровень назад, повторное нажатие на Menu - выход из меню. По-моему, МЕНЮ самое обычное, типовое.
Скорее всего, в :labview: есть готовые модули типа ListBox, ComboBox ... Есть они? Где? С чего начать, чтобы не изобретать велосипед? Все позиции меню - текстовые. Возможно, в :labview: есть какой-то шаблон под формирование МЕНЮ. Смотрел и книги, и форум, но ничего практического для формирования МЕНЮ не встретил. Хорошо бы посмотреть на пример близкой реализации, если такой имеется. Спасибо!

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

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

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

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

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

Добавлено: 04 янв 2017, 19:49
LEO_NIK
Kosist писал(а): я бы не парился, и использовал простой Listbox или Multicolumn Listbox в качестве меню
Спасибо, так, наверное, и сделаю. Упускаю, что есть help, встроенная в :labview: . Ищу где угодно, но только не под носом ...

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

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

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

Добавлено: 06 янв 2017, 11:32
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 КБ) 8083 просмотра
Аналогично можно обработать и события от клавиатуры.

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

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

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

Добавлено: 06 янв 2017, 13:44
Kosist
LEO_NIK писал(а):Так и сделал. Создал нужные Listbox, наложил их друг на друга и программно в соответствии с алгоритмом делаю их видимыми/невидимыми
Если Вы не делаете никаких эффектов типа "выезжание" меню, эффект наложения друг на друга; то можно обойтись и одним контролом; просто меняя текст в нем... Так ведь легче будет, наверное...

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

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

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

Добавлено: 08 янв 2017, 16:45
Kosist
LEO_NIK писал(а):Как сохранить массив?
Зашел на форум, чтобы поискать ответ на этот вопрос, но увидел непрочитанный ответ на предыдущий вопрос и решил задать этот.
Используйте функцию Write to Spreadsheet file (в :labview: 2015 эта функция называется немного иначе). Для чтения - Read from Spreadsheet file.
Listbox to file.png
Ну, или можете сделать парсер в ini файл. Тогда в одном файле можно хранить разные меню, в разных секциях.

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

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

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

Добавлено: 08 янв 2017, 17:45
Kosist
LEO_NIK писал(а):Наверное, я неправильно создал массив, слишком просто. Поместил на переднюю панель массив: Modern-Array,Matrix & Cluster-Array и в левую часть появившегося изображения ввожу индекс (число), а в правую часть поместил Numeric Control, куда ввожу соответствующий элемент, тоже число. Для простоты я их делаю одинаковыми, привязанными к нужному пункту меню или, что то же самое, к номеру listbox.
Для считывания устанавливаю на блок-схеме Index Array. Входы соединяю с массивом и схемой формирования индекса, на выходе получаю номер listbox, который делаю видимым. Всё, работает, но только до выключения.
:vi: -ку в студию =)
Что именно не работает? Сохраняйте в файл массив с эл-тами меню, считывайте в тот же массив + отображайте дефолтное меню в листбоксе.
Выкладывайте код, будем смотреть :wink:

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

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

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

Добавлено: 08 янв 2017, 18:54
Blackman
После создания и задания значений массива на FP - выделить его Левой Кнопкой Мышки -> выбрать пункт меню: Edit -> Make Selected Values Default.

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

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