Page 3 of 4

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

PostPosted: 11 Jan 2017, 08:25
by Artem.spb
а зачем label один у нескольких ячеек?
и при таких задачах:
1) зачем много листобоксов? проще в одном менять список пунктов (всё тот же item names )
2) может, стоит перейти на дерево (tree)?

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

всё можно через всё те же свойства.

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

PostPosted: 11 Jan 2017, 18:42
by LEO_NIK
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: всё можно через всё те же свойства.

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

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

PostPosted: 11 Jan 2017, 19:41
by Blackman
Может как то так?

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

PostPosted: 11 Jan 2017, 20:34
by LEO_NIK
Blackman wrote:Может как то так?

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

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

PostPosted: 12 Jan 2017, 01:09
by Artem.spb
LEO_NIK wrote:
Artem.spb wrote: может, стоит перейти на дерево (tree)?

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

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

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

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

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

С деревом же выбранный пункт однозначно определяется по его значению item tag, который можно отредактировать на этапе формирования дерева.

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

PostPosted: 12 Jan 2017, 08:14
by LEO_NIK
Artem.spb wrote: программное изменение ОДНОГО листбокса, а не сложные махинации с разными

Artem.spb, спасибо за развёрнутый ответ. Понятно и убедительно. Если этот вариант проще, обязательно перейду на него. Пробую.

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

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

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

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

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

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

Мое предложение именно в таком контексте. Написал-же ХРАНИТЬ

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

PostPosted: 12 Jan 2017, 17:44
by LEO_NIK
Спасибо и Blackman, и Borjomy_1, и все ранее участвующие в моей проблеме. Вы, как опытные программисты, видите далеко вперёд от меня. Дохожу в программировании до Ваших идей. Дело времени. Мне это очень полезно. Я как только начал создавать симулятор радиостанции, то сразу задал главный вопрос: какой алгоритм, структурную схему симулятора принять, чтобы потом не зайти в тупик и не переделывать всё сначала. Мне тогда помогли, направили по нужному пути. Сейчас, по мере продвижения проекта, решаю те же вопросы о правильном алгоритме, но уже относительно частных, более узких задач. Вот как с выбором Меню. То ли взять один listbox и менять его наполнение, то ли сразу создать их много, по количеству элементов "дерева" Меню и открывать их по одному в нужный момент. Я понимаю, что сделать можно всё, но только какими усилиями. Ещё раз спасибо за советы. Они мне очень нужны. Успевать бы за Вашими мыслями!

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

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

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

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

PostPosted: 12 Jan 2017, 18:13
by Blackman
Да осилит дорогу идущий)
Основная идея на картинке. Остальное навигация по дереву.

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

PostPosted: 12 Jan 2017, 18:56
by LEO_NIK
Blackman wrote:Основная идея на картинке

Да, с Tree намного нагляднее и проще. Сколько я мучился, подсчитывая нажатия на UP/Down, чтобы не выскочить за список вверх или вниз. К тому же количество элементов списка для разных пунктов разное ... Спасибо!

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

PostPosted: 15 Jan 2017, 02:37
by LEO_NIK
Blackman wrote:Основная идея на картинке

Взял за основу. Огромное спасибо!
В реальной радиостанции МЕНЮ появляется при нажатии на соответствующую кнопку (ввёл в программу) и выключается при повторном нажатии. Listbox с МЕНЮ ложится на коричневый фон. Для максимального правдоподобия (см. самое первое ВЛОЖЕНИЕ в теме) сделал МЕНЮ прозрачным.
Появился вопрос, для пояснения которого ввёл в меню совсем немного реальных позиций. Если нажимать всё время п.1, то приходим к пункту, где требуется ввести MMSI. MMSI - это уникальный 9-значный номер радиостанции, по которому её можно вызывать (аналог - номер телефона). При вводе по одной цифре, цифра 9 справа внизу (счётчик) по мере ввода последовательно уменьшается до нуля. Цифровые кнопки в программе уже запустил, а в материалах к вопросу их пока нет, мне показалось, что это не главное. Вот тут вопрос.
Помогите по дальнейшей структуре, чтобы не зашел в тупик. Показал на картинках, как это выглядит в реальной радиостанции. Я написал в последнем пункте МЕНЮ букву I, в радиостанции - это вертикальный мигающий курсор (можно сделать и горизонтальный, и квадратное мигающее окошко и т.п.), показывающий, что сюда надо вписывать номер MMSI. Вводимый MMSI нужно как-то сохранить, т.к. он частенько используется.
Идея всего моделирования в том, чтобы обучаемый создал вызов другой радиостанции по этому MMSI. Вызываемая радиостанция - клон вызывающей, только с небольшими отличиями в параметрах: в первую очередь, MMSI, время UTC, ну и ещё более мелкие. Если вызов сделан правильно, то вызываемая радиостанция появится на экране компьютера и обучаемый должен сформировать на ней ответ, который отобразится на вызывающей.
Как же сформировать MMSI, который нужен для обеих радиостанций? Глобальная переменная? Как её привязать к МЕНЮ, посредством которого она вводится? Кроме того, есть в радиостанции возможность формировать в памяти (адресная книга) радиостанции много MMSI и они время от времени могут быть востребованы (но это отдельная ветка МЕНЮ - в Contacts). Это забегая вперёд, хотя, может быть, уже сейчас нужно что-то заложить в программу. Итак, мне важно правильно ввести MMSI и сохранить его для последующего применения. Спасибо за внимание.
Для удаления неправильно введённой цифры есть кнопка Del. Для сохранения введённого MMSI нажать на кнопку OK, расположенную под надписью OK (Accept).

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

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