Курсор графика. Отследить нажатие.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Курсор графика. Отследить нажатие.
Есть XY график и в нём курсор. При нажатии на график требуется отследить было ли нажатие на свободном месте графика или нажатие произведено когда курсор был захвачен (общий курсор изменил свою картинку, появился или крестик или параллельные отрезки). В свойствах курсора не нашёл параметра, указывающего на захват курсора. Вариант с использованием события Cursor Grab не очень привлекает, поскольку это событие идёт с некой задержкой по отношению к событию нажатия на график и требует анализа тайм аута. Захотел попробовать отследить в каком состоянии курсор, но что то не смог этого сделать просто по не знанию. У кого какие идеи, поделитесь, пожалуйста.
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 175 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Откуда такая информация?Юрий писал(а): события Cursor Grab не очень привлекает, поскольку это событие идёт с некой задержкой по отношению к событию нажатия на график
Максимальная задержка 1 мс.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Artem.spb, не важно какая задержка, главное, что она есть и события Mouse Down и Cursor Grab разнесены. А нужно то что? Если есть только Mouse Down а Cursor Grab нет, то производиться некое действие, например, в приложенном примере вызывается палитра выбора цветов. Если есть Mouse Down и Cursor Grab, то ничего не делается, вернее производится стандартная работа с курсором графика. Как я уже упоминал, этот вариант мне не нравится, хотя он и работает, см. вложение.
- Вложения
-
- Курсор+.vi
- (21.37 КБ) 101 скачивание
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Artem.spb, Ну, пусть будет галстука. При чём тут это? Вопрос не в том, какое действие производится - это же пример. А вопрос в том как сформировать вызов этого действия. Даже использование события Cursor Grab лишнее, не очень хорошо и т.д., поскольку оно возникает только по нажатию мыши, а необходимая информация для принятия решения уже есть до нажатия, это то, что общий курсор принял иное значение, а именно: крестик или параллельные отрезки.
Последний раз редактировалось Юрий 16 мар 2017, 19:06, всего редактировалось 1 раз.
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 175 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
При том, что может существовать другой путь определения необходимости выполнить действие
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Честно говоря, не понял мысль. Если речь идёт о других вариантов решения поставленной в начале задачи, то я буду премного благодарен, если они будут изложены.Artem.spb писал(а):При том, что может существовать другой путь определения необходимости выполнить действие
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 175 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
А задача-от в чём? с какой целью пользователь будет тыркать в график, если ему не надо курсор перетянуть?
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Если надо перетягивать курсор он и перетягивается. Если тыкается в свободное место от курсора, то формируется действие, зависящее от конкретной для данной программы задачи, например:Artem.spb писал(а):А задача-от в чём? с какой целью пользователь будет тыркать в график, если ему не надо курсор перетянуть?
1. меняется цвет общего фона графика. Умоляю, не спрашивайте: "Зачем менять общий фон графика?".
2. на месте тычка помещается необходимая фигура.
3. верещащим голосом запускается голосовое сообщение: "Тыкай только в курсор графика", а, может, и текстовое сообщение.
и т.д.
А, если ближе к делу, то как увидеть в каком на данный момент состоянии находится общий курсор (не графика).
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 175 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Задачи интересные, но я не знаю варианта без ожидания.
В одном из проектов отлавливаю одно/два нажатия по listbox (как раз нужна разная реакция). Приходится ставить флаги и таймауты.
да, подождать, а потом делать или нет.
Можно поиграть с динамическими событиями и обрабатывать mouse up, а не нажатие. И при грабе курсора выключать ожидание ну и я бы не стал делать две event-структуры в одном цикле. лучше менять таймаут в одной.
В одном из проектов отлавливаю одно/два нажатия по listbox (как раз нужна разная реакция). Приходится ставить флаги и таймауты.
да, подождать, а потом делать или нет.
Можно поиграть с динамическими событиями и обрабатывать mouse up, а не нажатие. И при грабе курсора выключать ожидание ну и я бы не стал делать две event-структуры в одном цикле. лучше менять таймаут в одной.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Artem.spb, Спасибо за вариант. Действительно, если действие формировать по UP, то всё ложиться более логично, правда использование динамических событий мне показалось вычурным. Всё то же самое, только без них см. во вложении. С другой стороны увидел в Вашем примере нечто для себя новенькое.
На счёт "но я не знаю варианта без ожидания" можно повториться. Если в событии Mouse Down анализировать картинку курсора, то тут же можно принять решение будет он захвачен или нет. Только вот как это делать - не знаю.
На счёт "но я не знаю варианта без ожидания" можно повториться. Если в событии Mouse Down анализировать картинку курсора, то тут же можно принять решение будет он захвачен или нет. Только вот как это делать - не знаю.
- Вложения
-
- Курсор++.vi
- (22.44 КБ) 109 скачиваний
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 175 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Можно и локальной переменной, но минус этого в том, что событие всё равно происходит. Да и переменная где-то висит. А с динамическими событиями холостого хода нет, впрочем, дело вкуса.
Как определить тип курсора я не знаю, единственно извращённый вариант, приходящий на ум - определять позицию курсора мыши и курсора графика и пытаться понять, попал ли пользователь. Но тут будет ещё препятствие в виде типа инструмента графика - зум, позиционирование, курсор.
Как определить тип курсора я не знаю, единственно извращённый вариант, приходящий на ум - определять позицию курсора мыши и курсора графика и пытаться понять, попал ли пользователь. Но тут будет ещё препятствие в виде типа инструмента графика - зум, позиционирование, курсор.
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Задержка у Вас будет в любом случае, даже в самом оптимальном. С другой стороны, мне стало действительно интересно, кто куда торопится? Для пользователя будет одинаково быстро что 100 мс, что 10 мс. Вы по нажатию в свободное место графика менюшку вызываете же, да? Ну так и пусть она появляется через таймаут 100 мс. Либо заведите отдельный поток на обработку события вызова меню, обрабатываться будет со скоростью, которую позволит CPU. В Event-структуру 2 события: "Cursor Grab?" и MoseDown. Заводите по одному флагу на каждое событие. Регистрация события будет в любом случае с некоторым тайм-аутом, но обработка события может занимать микросекунды(флаг закидываете в очередь или уведомитель и шлёте в поток нужный, для вызова меню). Либо, если всё-таки, таймаут будет не критичен, выполняйте обработку прям в текущем event-е.Юрий писал(а):Artem.spb, не важно какая задержка, главное, что она есть и события Mouse Down и Cursor Grab разнесены. А нужно то что? Если есть только Mouse Down а Cursor Grab нет, то производиться некое действие, например, в приложенном примере вызывается палитра выбора цветов. Если есть Mouse Down и Cursor Grab, то ничего не делается, вернее производится стандартная работа с курсором графика.
Либо меню с цветами вызывайте по нажатию правой кнопки мыши. А работу с курсором левой.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Vitekkz88, Всё это так. И мысли эти крутились в голове, но, как всегда, больная голова - ногам спокоя не даёт. Хочется, ведь, попроще, покрасивее, покомпактнее и т.д..
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Курсор графика. Отследить нажатие.
Юрий писал(а):Захотел попробовать отследить в каком состоянии курсор, но что то не смог этого сделать просто по не знанию.
Похоже, что такое решение "в лоб" единственное, если идти именно таким путём. Может, я что-то упустил, но не нашёл также нигде способа получить текущее состояние захваченного курсора (похоже, не реализовано за ненадобностью). Так что, подобный вариант с захватом иконки курсора имеет право на жизнь. Правда не знаю, какова будет латентность работы такого алгоритма, если речь о каких-то там миллисекундах.Юрий писал(а):Если в событии Mouse Down анализировать картинку курсора, то тут же можно принять решение будет он захвачен или нет. Только вот как это делать - не знаю.
К сожалению, в нет стандартного для получения иконки указателя мыши. Придётся обратиться к WinAPI, вот хотя бы: http://stackoverflow.com/questions/1046 ... ursor-icon Если совсем нечем заняться будет, можно будет состряпать какой-нибудь инструментик.
---
В общем, как-то так получается.
Последний раз редактировалось dadreamer 18 мар 2017, 14:10, всего редактировалось 1 раз.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение