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

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

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

а зачем label один у нескольких ячеек?
и при таких задачах:
1) зачем много листобоксов? проще в одном менять список пунктов (всё тот же item names )
2) может, стоит перейти на дерево (tree)?
Возможно ли программно, по уникальному номеру вызывать нужный listbox и назначать ему определённое свойство (Visible, менять активную ячейку, менять содержание ячейки ...)?
всё можно через всё те же свойства.
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Artem.spb писал(а):а зачем label один у нескольких ячеек?
Этого как раз мне и не надо. Ещё раз. Каждый пункт МЕНЮ - это уникальный listbox, label которого - номер, образованный уровнями его расположения. Этот номер программа рассчитывает по нажатиям кнопок OK, UP и Down (ВЛОЖЕНИЕ на л.1). Когда пользователь выбрал нужный пункт МЕНЮ, то надо, как минимум, отобразить его на индикаторе. Это предполагаю делать с помощью свойства Visible соответствующего listbox в структуре Case. На селектор подаётся номер, по этому номеру ИДЕНТИФИЦИРУЕТСЯ listbox и с ним происходит то, что прописано в Case. Но я не могу однозначно идентифицировать listbox, используя цифровой номер. Помещал на лиц. панель listbox с label "31" (по нему пытался найти нужное свойство), ВСЕ его свойства (цифровые, синие в :labview: ) в реж. чтения и подключал индикаторы. Ни один из них не показал число 31.
Artem.spb писал(а): зачем много листобоксов? проще в одном менять список пунктов (всё тот же item names )
Об этом мне уже писали. Но как-то сразу заложил такой алгоритм... Принципиальных возражений против предложения нет. Вполне вероятно и перейду, если так проще[/quote]
Artem.spb писал(а): может, стоит перейти на дерево (tree)?
Так я его и реализую, формируя номер выбранного пункта МЕНЮ, который и подаю на селектор Case
Artem.spb писал(а): всё можно через всё те же свойства.
Только что написал, что не могу найти это свойство, привязанное к пункту МЕНЮ, т.е. к числу.
Blackman

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

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

Сообщение Blackman »

Может как то так?
Вложения
Listbox Menu.PNG
Listbox_Menu85.vi
(26.82 КБ) 121 скачивание
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Blackman писал(а):Может как то так?
Да, структура меню такая. На каждом уровне может быть любое количество пунктов, каждый из которых - отдельный listbox. Число строк в них тоже произвольное. На дисплее отображаются лишь пункты меню ОДНОГО уровня (см. ВЛОЖЕНИЕ на 1 листе, нижний экран). Самое обычное меню. Вот с выбором того, какой listbox отображать и состоит мой вопрос: пользователь передвигается по МЕНЮ, выбирает что ему нужно открыть. Программа при каждом его перемещении отслеживает, на каком он уровне (количество нажатий на ОК) и на какой строке уровня (сумма-разность количества нажатий на UP/Down) и формирует 2-х, 3-х и т.д. (уровень)-значное число. Отслеживание сделано, работает, для каждого местоположения в меню синхронно с передвижением формируется число, по которому и надо сделать видимым listbox с этим же числом-идентификатором (над этим бьюсь). Исходно все listbox-ы, кроме первого уровня - невидимы.
Вложенную программу пока не запускал. Спасибо за помощь.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

LEO_NIK писал(а):
Artem.spb писал(а): может, стоит перейти на дерево (tree)?
Так я его и реализую, формируя номер выбранного пункта МЕНЮ, который и подаю на селектор Case
Есть элемент Tree, в котором уже реализована древовидная структура. У него свои заморочки при программном формировании, но если у вас структура задана на этапе программирования, то дел гораздо меньше, чем сейчас у вас при работе с листбоксами.
Artem.spb писал(а): всё можно через всё те же свойства.
Только что написал, что не могу найти это свойство, привязанное к пункту МЕНЮ, т.е. к числу.
я имел ввиду программное изменение ОДНОГО листбокса, а не сложные махинации с разными.
Зная уровень и ветку, свойством Item names задаёте отображаемое меню. Дальше по индексу и/или нажатым кнопкам перехода определяете, куда пошёл пользователь. И снова обновляете список пунктов. В итоге листбокс ОДИН и не надо прятать/показывать кучу разношёрстных.
Конкретный пункт меню можно только заблокировать (disabled items), а сам по себе листбокс - это некоторая форма предоставления пользователю удобного (в некоторых случаях) способа задать число. Поэтому вполне естественно, что добиться от него можно только номера выбранного пункта (ну и имя этого пункта по индексу из массива имён)

С деревом же выбранный пункт однозначно определяется по его значению item tag, который можно отредактировать на этапе формирования дерева.
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Artem.spb писал(а): программное изменение ОДНОГО листбокса, а не сложные махинации с разными
Artem.spb, спасибо за развёрнутый ответ. Понятно и убедительно. Если этот вариант проще, обязательно перейду на него. Пробую.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

Логическое продолжение: хранить всю структуру в Tree. И передвигаться по ней, отображая активные строки в listboxe
Blackman

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

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

Сообщение Blackman »

Все уже похоже забыли о цели проекта: Имитация системы меню конкретного прибора (см. начало темы). Здесь нет никакого дерева для навигации по структуре меню и его применение возможно только как хранилище (скрытое от пользователя) для требуемой базовой структуры меню. Например для загрузки Item Names Listbox на текущем выбранном уровне меню.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

Blackman писал(а):Все уже похоже забыли о цели проекта: Имитация системы меню конкретного прибора (см. начало темы). Здесь нет никакого дерева для навигации по структуре меню и его применение возможно только как хранилище (скрытое от пользователя) для требуемой базовой структуры меню. Например для загрузки Item Names Listbox на текущем выбранном уровне меню.
Мое предложение именно в таком контексте. Написал-же ХРАНИТЬ
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Спасибо и Blackman, и Borjomy_1, и все ранее участвующие в моей проблеме. Вы, как опытные программисты, видите далеко вперёд от меня. Дохожу в программировании до Ваших идей. Дело времени. Мне это очень полезно. Я как только начал создавать симулятор радиостанции, то сразу задал главный вопрос: какой алгоритм, структурную схему симулятора принять, чтобы потом не зайти в тупик и не переделывать всё сначала. Мне тогда помогли, направили по нужному пути. Сейчас, по мере продвижения проекта, решаю те же вопросы о правильном алгоритме, но уже относительно частных, более узких задач. Вот как с выбором Меню. То ли взять один listbox и менять его наполнение, то ли сразу создать их много, по количеству элементов "дерева" Меню и открывать их по одному в нужный момент. Я понимаю, что сделать можно всё, но только какими усилиями. Ещё раз спасибо за советы. Они мне очень нужны. Успевать бы за Вашими мыслями!
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Borjomy_1 писал(а):Логическое продолжение: хранить всю структуру в Tree. И передвигаться по ней, отображая активные строки в listboxe
Если я правильно понял обсуждение, то "дерево" Меню я уже создал рабоче-крестьянским методом, отслеживая и подсчитывая количество нажатий на ОК, UP, Down. У меня уже есть число, соответствующее пункту выбранного меню. Не знал о Tree, поэтому сам моделировал; почти наверняка, в Tree всё компактнее, красивее и продуманнее. Посмотрю в этом направлении, и, если не займёт много времени, перейду на Tree. Но, в первую очередь сменю алгоритм работы с Меню и по советам оставлю один listbox, изменяя его содержимое при навигации по Меню. Пока это моя текущая проблема, которую надо решить.
Blackman

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

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

Сообщение Blackman »

Да осилит дорогу идущий)
Основная идея на картинке. Остальное навигация по дереву.
Вложения
Listbox Menu Tree Example BD.PNG
Listbox Menu Tree Example FP.PNG
Listbox Menu Tree Example.zip
(76.19 КБ) 113 скачиваний
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Blackman писал(а):Основная идея на картинке
Да, с Tree намного нагляднее и проще. Сколько я мучился, подсчитывая нажатия на UP/Down, чтобы не выскочить за список вверх или вниз. К тому же количество элементов списка для разных пунктов разное ... Спасибо!
LEO_NIK
user
user
Сообщения: 86
Зарегистрирован: 09 сен 2016, 20:09
Версия LabVIEW: 2013
Контактная информация:

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

Сообщение LEO_NIK »

Blackman писал(а):Основная идея на картинке
Взял за основу. Огромное спасибо!
В реальной радиостанции МЕНЮ появляется при нажатии на соответствующую кнопку (ввёл в программу) и выключается при повторном нажатии. Listbox с МЕНЮ ложится на коричневый фон. Для максимального правдоподобия (см. самое первое ВЛОЖЕНИЕ в теме) сделал МЕНЮ прозрачным.
Появился вопрос, для пояснения которого ввёл в меню совсем немного реальных позиций. Если нажимать всё время п.1, то приходим к пункту, где требуется ввести MMSI. MMSI - это уникальный 9-значный номер радиостанции, по которому её можно вызывать (аналог - номер телефона). При вводе по одной цифре, цифра 9 справа внизу (счётчик) по мере ввода последовательно уменьшается до нуля. Цифровые кнопки в программе уже запустил, а в материалах к вопросу их пока нет, мне показалось, что это не главное. Вот тут вопрос.
Помогите по дальнейшей структуре, чтобы не зашел в тупик. Показал на картинках, как это выглядит в реальной радиостанции. Я написал в последнем пункте МЕНЮ букву I, в радиостанции - это вертикальный мигающий курсор (можно сделать и горизонтальный, и квадратное мигающее окошко и т.п.), показывающий, что сюда надо вписывать номер MMSI. Вводимый MMSI нужно как-то сохранить, т.к. он частенько используется.
Идея всего моделирования в том, чтобы обучаемый создал вызов другой радиостанции по этому MMSI. Вызываемая радиостанция - клон вызывающей, только с небольшими отличиями в параметрах: в первую очередь, MMSI, время UTC, ну и ещё более мелкие. Если вызов сделан правильно, то вызываемая радиостанция появится на экране компьютера и обучаемый должен сформировать на ней ответ, который отобразится на вызывающей.
Как же сформировать MMSI, который нужен для обеих радиостанций? Глобальная переменная? Как её привязать к МЕНЮ, посредством которого она вводится? Кроме того, есть в радиостанции возможность формировать в памяти (адресная книга) радиостанции много MMSI и они время от времени могут быть востребованы (но это отдельная ветка МЕНЮ - в Contacts). Это забегая вперёд, хотя, может быть, уже сейчас нужно что-то заложить в программу. Итак, мне важно правильно ввести MMSI и сохранить его для последующего применения. Спасибо за внимание.
Для удаления неправильно введённой цифры есть кнопка Del. Для сохранения введённого MMSI нажать на кнопку OK, расположенную под надписью OK (Accept).
Вложения
Listbox Menu_Tree + Input .vi
(46.93 КБ) 97 скачиваний
Позиции МЕНЮ с ВВОДОМ данных.PNG
Позиции МЕНЮ с ВВОДОМ данных.PNG (3.67 КБ) 8022 просмотра
Последний раз редактировалось LEO_NIK 15 янв 2017, 12:52, всего редактировалось 1 раз.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

Если делать полную аналогию работы радиостанции, то программа радиостанции должна включать в себя UDP сервер широковещательных запросов. Т.е слушает "эфир". При приеме запроса с ее идентификатором (и IP вызывающего компа), который выдает вызывающая радиостанция, она должна ответить своим IP-шником, либо сама установить TCP соединение. Уже по установленному соединению можно проводить сеанс связи.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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