Нестандартные контролы

Обсуждение, связанное с разработкой ПО верхнего уровня
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Нестандартные контролы

Сообщение crashwork »

Кто нибудь пытался сделать кнопку например такой формы:
Чертеж стенда.png
Чертеж стенда.png (8.14 КБ) 8235 просмотров
Основная проблема - это определить область для нажатия. Т.е. если вставить такой рисунок (в каком либо формате) в labview и делать контрол обычным способом (путем подмены готового), то в итоге вроде как получится такая кнопка но labview воспримит ее просто как прямоугольник (при нажатии на прозрачных областях кнопки - она все равно будет переключаться). Отсюда и две проблемы:
1. Как создать свой контрол с нуля (возможно ActiveX или C# и т.п.).
2. Как создать свой контрол на базе старого но без вышеупомянутых глюков.
И вообще интересно - стандартные контролы лежат в обычных ctl файлах, но сделаны как-то по особенному.
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Нестандартные контролы

Сообщение Pavel Krivozubov »

crashwork писал(а):Кто нибудь пытался сделать кнопку например такой формы:
Чертеж стенда.png
Основная проблема - это определить область для нажатия. Т.е. если вставить такой рисунок (в каком либо формате) в labview и делать контрол обычным способом (путем подмены готового), то в итоге вроде как получится такая кнопка но labview воспримит ее просто как прямоугольник (при нажатии на прозрачных областях кнопки - она все равно будет переключаться). Отсюда и две проблемы:
1. Как создать свой контрол с нуля (возможно ActiveX или C# и т.п.).
2. Как создать свой контрол на базе старого но без вышеупомянутых глюков.
И вообще интересно - стандартные контролы лежат в обычных ctl файлах, но сделаны как-то по особенному.
может забить её прозрачными круглыми Led-ами? :D И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Нестандартные контролы

Сообщение mzu2006 »

Indey писал(а): может забить её прозрачными круглыми Led-ами? :D И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?
и сделать из этого всего XControl
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Нестандартные контролы

Сообщение crashwork »

Indey писал(а):может забить её прозрачными круглыми Led-ами? :D И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?
Кстати способ есть чуть проще, но это как-то низко что ли. Можно кнопку в невидимых участках обложить decorations элементами и поднять на передний слой, тогда нажиматься будет то что надо.
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Нестандартные контролы

Сообщение Pavel Krivozubov »

crashwork писал(а):
Indey писал(а):может забить её прозрачными круглыми Led-ами? :D И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?
Кстати способ есть чуть проще, но это как-то низко что ли. Можно кнопку в невидимых участках обложить decorations элементами и поднять на передний слой, тогда нажиматься будет то что надо.
все гениальное просто :D
классный вариант кстати. :super: я бы на нем и остановился.
upd. Ну при условии, что ты декорации сделаешь невидимыми разумеется. :brows:
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Нестандартные контролы

Сообщение Konstantin Sumenko »

Ну на C# контрол создается не так уж и сложно, тем более там две разновидности создания контролов: user и custom. Насчет портирования первого не уверен, так как используется xaml, воторой спокойно переносится. Еще можно само окно прибора сделать произвольной формы средствами winAPI.
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Нестандартные контролы

Сообщение crashwork »

В общем решил отписаться по поводу своих изысканий насчет нестандартных кнопок. Облаживать декоративными элементами это не выход, эдак можно пол дня промаяться. Решил все сделать программно.
На реализацию не смотрим (все на скору руку). Идея проста получаем картинку контрола с фоном специально ядовитого цвета (у меня это ярко красный), выделяем из картинки тот пиксель на котором произошло нажатие и сравниваем его цвет с заданным фоновым, если совпало - значит нажатие на прозрачной области и значение контрола не изменяем ну и соответственно наоборот. Событие маусдаун естественно фильтруем.
Самый большой минус данного способа - это время выполнения. Основная доля времени приходится на взятие картинки, отальное не существенно. Чем больше размеры контрола тем больше уходит времени на взятие картинки. На контрол в :vi: у меня на моем компе уходит порядка 5-6 мс.
Вложения
Untitled 1.vi
(29.35 КБ) 254 скачивания
00.png
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Нестандартные контролы

Сообщение Eugen Graf »

Ага, очень интересно :super:

А при чём тут красный бэкграунд? Честно сказать только проверил на работоспособность, в БД особо не разбирался. Поясни...
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Нестандартные контролы

Сообщение crashwork »

бэкграунд можно любой, главно чтобы он отличался от реальных цветов кнопки (тоже кстати недостаток), получается что в кнопке не должно быть цветов таких как бекграунд иначе при нажатие на такие участки она не будет фурычить.
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Нестандартные контролы

Сообщение crashwork »

А, я понял, ты наверно не то имел в виду. Вобщем бекграунд РЕАЛЬНЫЙ может быть любой. Просто когда делается скрин то можна этот самый граунд задать любого цвета, т.е. отличный от реального.
Вложения
01.png
01.png (10.34 КБ) 8145 просмотров
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Нестандартные контролы

Сообщение Eugen Graf »

Что интересно, если я выбираю любой другой цвет кроме красного, вся система не работает. Доработай плиз свою идею, я думаю ей наверняка найдётся применение. Может правда X-Control какой нибудь сделать...
:wink:
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Нестандартные контролы

Сообщение mzu2006 »

Интересно

Немного пооптимизировал, вот что вышло.

работает побыстрее
Clipboard01.png
Вложения
StrangeButton.vi
(18.78 КБ) 241 скачивание
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Нестандартные контролы

Сообщение crashwork »

Цвет то ерунда, просто ж я в case статически вписал красный цвет потому любой другой и не катит. Xcontrol никогда не делал. Для себя сделаю пока subvi где на вход подается reference кнопки и цвет фона. Т.е. например я черчу кнопку а потом в subvi подаю reference и цвет фона такой чтобы бы не встречался в этой самой кнопке (ядовитый какой-нибудь). При таком подходе полной автоматизации не добиться (прийдется самому подбирать цвет и обрабатывать маусдаун), но это в общеб то не проблема. И что то мне подсказывает что и в Xcontrol от ручного выбора цвета никуда не уйти. Вобщем завтра выложу рабочий subvi и пример кнопки какой нить поинтересней, а там посмотрим.
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Нестандартные контролы

Сообщение crashwork »

mzu2006, о, отлично теперь с тебя subvi
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Нестандартные контролы

Сообщение crashwork »

mzu2006, эээээ так просто ж время там определяется раньше чем делается скрин, а если так как ниже, то case отработает за то же время что и раньше. Или я че то не понял. Оптимизировать реально удастся если уйти от метода GetImage, остальное скорей всего существенных результатов не даст. Ну можно еще сделать GetImage в параллельном потоке, но опять таки все равно процессорное время съестся хоть и по другому.
Вложения
StrangeButton (1).vi
(19.32 КБ) 261 скачивание
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Лицевая панель»