Нестандартные контролы
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Нестандартные контролы
Кто нибудь пытался сделать кнопку например такой формы:
1. Как создать свой контрол с нуля (возможно ActiveX или C# и т.п.).
2. Как создать свой контрол на базе старого но без вышеупомянутых глюков.
И вообще интересно - стандартные контролы лежат в обычных ctl файлах, но сделаны как-то по особенному.
Основная проблема - это определить область для нажатия. Т.е. если вставить такой рисунок (в каком либо формате) в labview и делать контрол обычным способом (путем подмены готового), то в итоге вроде как получится такая кнопка но labview воспримит ее просто как прямоугольник (при нажатии на прозрачных областях кнопки - она все равно будет переключаться). Отсюда и две проблемы:1. Как создать свой контрол с нуля (возможно ActiveX или C# и т.п.).
2. Как создать свой контрол на базе старого но без вышеупомянутых глюков.
И вообще интересно - стандартные контролы лежат в обычных ctl файлах, но сделаны как-то по особенному.
-
Pavel Krivozubov
- professor
- Сообщения: 4421
- Зарегистрирован: 07 фев 2008, 16:39
- Награды: 3
- Версия LabVIEW: 7.0 - 2013
- Откуда: г. Электросталь
- Благодарил (а): 24 раза
- Поблагодарили: 9 раз
- Контактная информация:
Re: Нестандартные контролы
может забить её прозрачными круглыми Led-ами? И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?crashwork писал(а):Кто нибудь пытался сделать кнопку например такой формы:Основная проблема - это определить область для нажатия. Т.е. если вставить такой рисунок (в каком либо формате) в labview и делать контрол обычным способом (путем подмены готового), то в итоге вроде как получится такая кнопка но labview воспримит ее просто как прямоугольник (при нажатии на прозрачных областях кнопки - она все равно будет переключаться). Отсюда и две проблемы:
1. Как создать свой контрол с нуля (возможно ActiveX или C# и т.п.).
2. Как создать свой контрол на базе старого но без вышеупомянутых глюков.
И вообще интересно - стандартные контролы лежат в обычных ctl файлах, но сделаны как-то по особенному.
Правила форума
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Нестандартные контролы
и сделать из этого всего XControlIndey писал(а): может забить её прозрачными круглыми Led-ами? И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Нестандартные контролы
Кстати способ есть чуть проще, но это как-то низко что ли. Можно кнопку в невидимых участках обложить decorations элементами и поднять на передний слой, тогда нажиматься будет то что надо.Indey писал(а):может забить её прозрачными круглыми Led-ами? И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?
-
Pavel Krivozubov
- professor
- Сообщения: 4421
- Зарегистрирован: 07 фев 2008, 16:39
- Награды: 3
- Версия LabVIEW: 7.0 - 2013
- Откуда: г. Электросталь
- Благодарил (а): 24 раза
- Поблагодарили: 9 раз
- Контактная информация:
Re: Нестандартные контролы
все гениальное простоcrashwork писал(а):Кстати способ есть чуть проще, но это как-то низко что ли. Можно кнопку в невидимых участках обложить decorations элементами и поднять на передний слой, тогда нажиматься будет то что надо.Indey писал(а):может забить её прозрачными круглыми Led-ами? И на каждый сделать евент маус даун, где динамически будет подгружаться другая картинка?
классный вариант кстати. я бы на нем и остановился.
upd. Ну при условии, что ты декорации сделаешь невидимыми разумеется.
Правила форума
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Нестандартные контролы
Ну на C# контрол создается не так уж и сложно, тем более там две разновидности создания контролов: user и custom. Насчет портирования первого не уверен, так как используется xaml, воторой спокойно переносится. Еще можно само окно прибора сделать произвольной формы средствами winAPI.
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Нестандартные контролы
В общем решил отписаться по поводу своих изысканий насчет нестандартных кнопок. Облаживать декоративными элементами это не выход, эдак можно пол дня промаяться. Решил все сделать программно.
На реализацию не смотрим (все на скору руку). Идея проста получаем картинку контрола с фоном специально ядовитого цвета (у меня это ярко красный), выделяем из картинки тот пиксель на котором произошло нажатие и сравниваем его цвет с заданным фоновым, если совпало - значит нажатие на прозрачной области и значение контрола не изменяем ну и соответственно наоборот. Событие маусдаун естественно фильтруем.
Самый большой минус данного способа - это время выполнения. Основная доля времени приходится на взятие картинки, отальное не существенно. Чем больше размеры контрола тем больше уходит времени на взятие картинки. На контрол в у меня на моем компе уходит порядка 5-6 мс.
На реализацию не смотрим (все на скору руку). Идея проста получаем картинку контрола с фоном специально ядовитого цвета (у меня это ярко красный), выделяем из картинки тот пиксель на котором произошло нажатие и сравниваем его цвет с заданным фоновым, если совпало - значит нажатие на прозрачной области и значение контрола не изменяем ну и соответственно наоборот. Событие маусдаун естественно фильтруем.
Самый большой минус данного способа - это время выполнения. Основная доля времени приходится на взятие картинки, отальное не существенно. Чем больше размеры контрола тем больше уходит времени на взятие картинки. На контрол в у меня на моем компе уходит порядка 5-6 мс.
- Вложения
-
- Untitled 1.vi
- (29.35 КБ) 255 скачиваний
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Нестандартные контролы
Ага, очень интересно
А при чём тут красный бэкграунд? Честно сказать только проверил на работоспособность, в БД особо не разбирался. Поясни...
А при чём тут красный бэкграунд? Честно сказать только проверил на работоспособность, в БД особо не разбирался. Поясни...
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Нестандартные контролы
бэкграунд можно любой, главно чтобы он отличался от реальных цветов кнопки (тоже кстати недостаток), получается что в кнопке не должно быть цветов таких как бекграунд иначе при нажатие на такие участки она не будет фурычить.
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Нестандартные контролы
А, я понял, ты наверно не то имел в виду. Вобщем бекграунд РЕАЛЬНЫЙ может быть любой. Просто когда делается скрин то можна этот самый граунд задать любого цвета, т.е. отличный от реального.
- Вложения
-
- 01.png (10.34 КБ) 8175 просмотров
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Нестандартные контролы
Что интересно, если я выбираю любой другой цвет кроме красного, вся система не работает. Доработай плиз свою идею, я думаю ей наверняка найдётся применение. Может правда X-Control какой нибудь сделать...
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Нестандартные контролы
Интересно
Немного пооптимизировал, вот что вышло.
работает побыстрее
Немного пооптимизировал, вот что вышло.
работает побыстрее
- Вложения
-
- StrangeButton.vi
- (18.78 КБ) 243 скачивания
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Нестандартные контролы
Цвет то ерунда, просто ж я в case статически вписал красный цвет потому любой другой и не катит. Xcontrol никогда не делал. Для себя сделаю пока subvi где на вход подается reference кнопки и цвет фона. Т.е. например я черчу кнопку а потом в subvi подаю reference и цвет фона такой чтобы бы не встречался в этой самой кнопке (ядовитый какой-нибудь). При таком подходе полной автоматизации не добиться (прийдется самому подбирать цвет и обрабатывать маусдаун), но это в общеб то не проблема. И что то мне подсказывает что и в Xcontrol от ручного выбора цвета никуда не уйти. Вобщем завтра выложу рабочий subvi и пример кнопки какой нить поинтересней, а там посмотрим.
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Нестандартные контролы
mzu2006, эээээ так просто ж время там определяется раньше чем делается скрин, а если так как ниже, то case отработает за то же время что и раньше. Или я че то не понял. Оптимизировать реально удастся если уйти от метода GetImage, остальное скорей всего существенных результатов не даст. Ну можно еще сделать GetImage в параллельном потоке, но опять таки все равно процессорное время съестся хоть и по другому.
- Вложения
-
- StrangeButton (1).vi
- (19.32 КБ) 262 скачивания
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 328 Просмотры
-
Последнее сообщение Artem.spb