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

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

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

Postby Artem.spb on 11 Jan 2017, 08:25

а зачем label один у нескольких ячеек?
и при таких задачах:
1) зачем много листобоксов? проще в одном менять список пунктов (всё тот же item names )
2) может, стоит перейти на дерево (tree)?

Возможно ли программно, по уникальному номеру вызывать нужный listbox и назначать ему определённое свойство (Visible, менять активную ячейку, менять содержание ячейки ...)?

всё можно через всё те же свойства.
Artem.spb
expert
expert
 
Posts: 1220
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 214
CLD hardware I/O VIP freelance

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

Postby LEO_NIK on 11 Jan 2017, 18:42

Artem.spb wrote:а зачем label один у нескольких ячеек?

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

Об этом мне уже писали. Но как-то сразу заложил такой алгоритм... Принципиальных возражений против предложения нет. Вполне вероятно и перейду, если так проще[/quote]
Artem.spb wrote: может, стоит перейти на дерево (tree)?

Так я его и реализую, формируя номер выбранного пункта МЕНЮ, который и подаю на селектор Case
Artem.spb wrote: всё можно через всё те же свойства.

Только что написал, что не могу найти это свойство, привязанное к пункту МЕНЮ, т.е. к числу.
LEO_NIK
user
user
 
Posts: 86
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

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

Postby Blackman on 11 Jan 2017, 19:41

Может как то так?
Attachments
Listbox Menu.PNG
Listbox_Menu85.vi
(26.82 KiB) Downloaded 23 times
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 170

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

Postby LEO_NIK on 11 Jan 2017, 20:34

Blackman wrote:Может как то так?

Да, структура меню такая. На каждом уровне может быть любое количество пунктов, каждый из которых - отдельный listbox. Число строк в них тоже произвольное. На дисплее отображаются лишь пункты меню ОДНОГО уровня (см. ВЛОЖЕНИЕ на 1 листе, нижний экран). Самое обычное меню. Вот с выбором того, какой listbox отображать и состоит мой вопрос: пользователь передвигается по МЕНЮ, выбирает что ему нужно открыть. Программа при каждом его перемещении отслеживает, на каком он уровне (количество нажатий на ОК) и на какой строке уровня (сумма-разность количества нажатий на UP/Down) и формирует 2-х, 3-х и т.д. (уровень)-значное число. Отслеживание сделано, работает, для каждого местоположения в меню синхронно с передвижением формируется число, по которому и надо сделать видимым listbox с этим же числом-идентификатором (над этим бьюсь). Исходно все listbox-ы, кроме первого уровня - невидимы.
Вложенную программу пока не запускал. Спасибо за помощь.
LEO_NIK
user
user
 
Posts: 86
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

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

Postby Artem.spb on 12 Jan 2017, 01:09

LEO_NIK wrote:
Artem.spb wrote: может, стоит перейти на дерево (tree)?

Так я его и реализую, формируя номер выбранного пункта МЕНЮ, который и подаю на селектор Case

Есть элемент Tree, в котором уже реализована древовидная структура. У него свои заморочки при программном формировании, но если у вас структура задана на этапе программирования, то дел гораздо меньше, чем сейчас у вас при работе с листбоксами.

Artem.spb wrote: всё можно через всё те же свойства.

Только что написал, что не могу найти это свойство, привязанное к пункту МЕНЮ, т.е. к числу.

я имел ввиду программное изменение ОДНОГО листбокса, а не сложные махинации с разными.
Зная уровень и ветку, свойством Item names задаёте отображаемое меню. Дальше по индексу и/или нажатым кнопкам перехода определяете, куда пошёл пользователь. И снова обновляете список пунктов. В итоге листбокс ОДИН и не надо прятать/показывать кучу разношёрстных.
Конкретный пункт меню можно только заблокировать (disabled items), а сам по себе листбокс - это некоторая форма предоставления пользователю удобного (в некоторых случаях) способа задать число. Поэтому вполне естественно, что добиться от него можно только номера выбранного пункта (ну и имя этого пункта по индексу из массива имён)

С деревом же выбранный пункт однозначно определяется по его значению item tag, который можно отредактировать на этапе формирования дерева.
Artem.spb
expert
expert
 
Posts: 1220
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 214
CLD hardware I/O VIP freelance

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

Postby LEO_NIK on 12 Jan 2017, 08:14

Artem.spb wrote: программное изменение ОДНОГО листбокса, а не сложные махинации с разными

Artem.spb, спасибо за развёрнутый ответ. Понятно и убедительно. Если этот вариант проще, обязательно перейду на него. Пробую.
LEO_NIK
user
user
 
Posts: 86
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

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

Postby Borjomy_1 on 12 Jan 2017, 11:10

Логическое продолжение: хранить всю структуру в Tree. И передвигаться по ней, отображая активные строки в listboxe
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

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

Postby Blackman on 12 Jan 2017, 12:01

Все уже похоже забыли о цели проекта: Имитация системы меню конкретного прибора (см. начало темы). Здесь нет никакого дерева для навигации по структуре меню и его применение возможно только как хранилище (скрытое от пользователя) для требуемой базовой структуры меню. Например для загрузки Item Names Listbox на текущем выбранном уровне меню.
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 170

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

Postby Borjomy_1 on 12 Jan 2017, 12:38

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

Мое предложение именно в таком контексте. Написал-же ХРАНИТЬ
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

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

Postby LEO_NIK on 12 Jan 2017, 17:44

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

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

Postby LEO_NIK on 12 Jan 2017, 18:05

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

Если я правильно понял обсуждение, то "дерево" Меню я уже создал рабоче-крестьянским методом, отслеживая и подсчитывая количество нажатий на ОК, UP, Down. У меня уже есть число, соответствующее пункту выбранного меню. Не знал о Tree, поэтому сам моделировал; почти наверняка, в Tree всё компактнее, красивее и продуманнее. Посмотрю в этом направлении, и, если не займёт много времени, перейду на Tree. Но, в первую очередь сменю алгоритм работы с Меню и по советам оставлю один listbox, изменяя его содержимое при навигации по Меню. Пока это моя текущая проблема, которую надо решить.
LEO_NIK
user
user
 
Posts: 86
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

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

Postby Blackman on 12 Jan 2017, 18:13

Да осилит дорогу идущий)
Основная идея на картинке. Остальное навигация по дереву.
Attachments
Listbox Menu Tree Example BD.PNG
Listbox Menu Tree Example FP.PNG
Listbox Menu Tree Example.zip
(76.19 KiB) Downloaded 30 times
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 170

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

Postby LEO_NIK on 12 Jan 2017, 18:56

Blackman wrote:Основная идея на картинке

Да, с Tree намного нагляднее и проще. Сколько я мучился, подсчитывая нажатия на UP/Down, чтобы не выскочить за список вверх или вниз. К тому же количество элементов списка для разных пунктов разное ... Спасибо!
LEO_NIK
user
user
 
Posts: 86
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

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

Postby LEO_NIK on 15 Jan 2017, 02:37

Blackman wrote:Основная идея на картинке

Взял за основу. Огромное спасибо!
В реальной радиостанции МЕНЮ появляется при нажатии на соответствующую кнопку (ввёл в программу) и выключается при повторном нажатии. Listbox с МЕНЮ ложится на коричневый фон. Для максимального правдоподобия (см. самое первое ВЛОЖЕНИЕ в теме) сделал МЕНЮ прозрачным.
Появился вопрос, для пояснения которого ввёл в меню совсем немного реальных позиций. Если нажимать всё время п.1, то приходим к пункту, где требуется ввести MMSI. MMSI - это уникальный 9-значный номер радиостанции, по которому её можно вызывать (аналог - номер телефона). При вводе по одной цифре, цифра 9 справа внизу (счётчик) по мере ввода последовательно уменьшается до нуля. Цифровые кнопки в программе уже запустил, а в материалах к вопросу их пока нет, мне показалось, что это не главное. Вот тут вопрос.
Помогите по дальнейшей структуре, чтобы не зашел в тупик. Показал на картинках, как это выглядит в реальной радиостанции. Я написал в последнем пункте МЕНЮ букву I, в радиостанции - это вертикальный мигающий курсор (можно сделать и горизонтальный, и квадратное мигающее окошко и т.п.), показывающий, что сюда надо вписывать номер MMSI. Вводимый MMSI нужно как-то сохранить, т.к. он частенько используется.
Идея всего моделирования в том, чтобы обучаемый создал вызов другой радиостанции по этому MMSI. Вызываемая радиостанция - клон вызывающей, только с небольшими отличиями в параметрах: в первую очередь, MMSI, время UTC, ну и ещё более мелкие. Если вызов сделан правильно, то вызываемая радиостанция появится на экране компьютера и обучаемый должен сформировать на ней ответ, который отобразится на вызывающей.
Как же сформировать MMSI, который нужен для обеих радиостанций? Глобальная переменная? Как её привязать к МЕНЮ, посредством которого она вводится? Кроме того, есть в радиостанции возможность формировать в памяти (адресная книга) радиостанции много MMSI и они время от времени могут быть востребованы (но это отдельная ветка МЕНЮ - в Contacts). Это забегая вперёд, хотя, может быть, уже сейчас нужно что-то заложить в программу. Итак, мне важно правильно ввести MMSI и сохранить его для последующего применения. Спасибо за внимание.
Для удаления неправильно введённой цифры есть кнопка Del. Для сохранения введённого MMSI нажать на кнопку OK, расположенную под надписью OK (Accept).
Attachments
Listbox Menu_Tree + Input .vi
(46.93 KiB) Downloaded 24 times
Позиции МЕНЮ с ВВОДОМ данных.PNG
Позиции МЕНЮ с ВВОДОМ данных.PNG (3.67 KiB) Viewed 1712 times
Last edited by LEO_NIK on 15 Jan 2017, 12:52, edited 1 time in total.
LEO_NIK
user
user
 
Posts: 86
Joined: 09 Sep 2016, 20:09
LabVIEW Version: 2013
Karma: 0

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

Postby Borjomy_1 on 15 Jan 2017, 12:09

Если делать полную аналогию работы радиостанции, то программа радиостанции должна включать в себя UDP сервер широковещательных запросов. Т.е слушает "эфир". При приеме запроса с ее идентификатором (и IP вызывающего компа), который выдает вызывающая радиостанция, она должна ответить своим IP-шником, либо сама установить TCP соединение. Уже по установленному соединению можно проводить сеанс связи.
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

PreviousNext

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

Who is online

Users browsing this forum: No registered users and 11 guests

cron