Куда уходит фокус
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Куда уходит фокус
Окно главной программы, с несколькими SubPanel, при запуске вставляет в свои субпанели FB приборов, в данном конкретном случае различные Power Supplies. Фронтальные Панели этих Power Supplies представляют собой Cluster с контролами. Первоначально этот сluster disabled & grayed. Далее, главная программа проверяет присуствие в системе этих самих блоков (GPIB) и в случае обнаружения, инициализирует найденый блок питания и делает доступным его управление -> Enable Cluster. Все замечательно работает. Каждые две секунды главная программа обнюхивает VISA Resourses на предмет изменений. В случае обнаружения, повторяет выше описанную процедуру, в случае выключения наоборот disabled & grayed его панель. Физически это выглятит так: Юзер запустил программу, включил нужный в данный момент блок питания, окно активизировалось, делай что нужно, (либо наоборот, включил блок, потом запустил программу). Остальные отаются неактивированы. Выключил Блок, его панель тут же деактивировалась...
Воот.
А теперь проблема: обычный numeric control, расположеный на фронтальной панели, теряет фокус.
Значит я кликаю на numeric control, появляется мигающий курсор и только я собрался ввести что то с клавиатуры, а фокуса уже и нет...
Перелопатил форумы, нашел что у народа теряется фокус, если обновлять свойства, типа Tip Strip property, в других панелях, но я то ничего не обновляю, у меня вообще панель не инициализирована и выключена. Я только посылаю сообщение actor, мол посмотри не появилось что то в системе с твоим GPIB адресом, и если да, дай мне знать, я в курсе что делать дальше...
Если выключить опрос, все работает и фокус не уходит.
Уже "липкий пот, холодные конечности" .. Может кто подскажет, как побороть данную проблему, либо как отловить кто "ворует" фокус. Крайне не хочется NumPad лепить...
Воот.
А теперь проблема: обычный numeric control, расположеный на фронтальной панели, теряет фокус.
Значит я кликаю на numeric control, появляется мигающий курсор и только я собрался ввести что то с клавиатуры, а фокуса уже и нет...
Перелопатил форумы, нашел что у народа теряется фокус, если обновлять свойства, типа Tip Strip property, в других панелях, но я то ничего не обновляю, у меня вообще панель не инициализирована и выключена. Я только посылаю сообщение actor, мол посмотри не появилось что то в системе с твоим GPIB адресом, и если да, дай мне знать, я в курсе что делать дальше...
Если выключить опрос, все работает и фокус не уходит.
Уже "липкий пот, холодные конечности" .. Может кто подскажет, как побороть данную проблему, либо как отловить кто "ворует" фокус. Крайне не хочется NumPad лепить...
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Куда уходит фокус
А если перед началом "проверки" узнать на каком элементе установлен фокус, а по окончании его туда принудительно установить (вернуть)?
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- professor
- Сообщения: 3409
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Куда уходит фокус
не понял, как фокус убегает, если панель выключена?
У меня была похожая проблема, когда фокус не хотел ставиться. Приходилось ставить фокус, менять свойства контрола и снова ставить фокус. Только так соглашались работать. Если фокус ставил один раз в конце или начале действий, не работало
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Куда уходит фокус
В смысле на каком? На том, на который я щелкнул. Фокус уходит в момент отправки сообщения actor с выключеной панелью, мол проверь вдруг может чего появилось в системе... Игры с property Is Frontmost успеха не принесли. Смысл происходящего до конца мной не понят и пока остановился на временном решении - в момент щелчка mouse down выключаю опрос, а уже после mouse leave востанавливаю его обратно. Все работает. Решение не лучшее и смахивает на костыль, что произойдет, если юрер щелкнул на контроле, опрос выключился, мышь остаётся в этом положении и событие mouse leave не происходит и опрос обратно не включается. Придется городить какой нибудь таймер, который по истечении определенного времени, если юзер не предпринимал никаких действий, включать опрос принудительно обратно. Вообщем буду копать дальше..
Последний раз редактировалось taras_33 30 апр 2020, 16:12, всего редактировалось 2 раза.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- professor
- Сообщения: 3409
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Куда уходит фокус
любого сообщения, или того, которое дёргает панель?
Если вызвать что-то бездействующее?
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Куда уходит фокус
В том-то и дело что панель я не дёргаю. Отправляется единственное сообщение в котором происходит проверка, на предмет наличия конкретного GPIB адреса в системе (VISA Found Resources).
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- professor
- Сообщения: 3409
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Куда уходит фокус
С пустым методом тоже самое.
Чтобы было более понятно приложил структуру проекта. Внизу четыре блока питания, будет добавлятся больше и представляют собой Actors с фронтальными панелями в виде кластеров. Enable/Disable & Grayed этих кластеров наглядно дает понять юзеру какие из блоков включены. Практический весь функционал блоков реализован в PS ROOT, от которого они наследуются. Выше Frame (голубенький) главная программа-контроллер, фронтальня панель которого состоит из субпанелей, в которые вставляются кластеры блоков и который управляет всем хозяйством. Контроллер периодически опрашивает блоки на предмет наличия их в системе (включены ли они - VISA Find Resources) Блоки отвечают контроллеру о статусе и контроллер базируясь на нем включает/выключает, инициализирует и т.д.
Скажем я работаю с одним блоком, остальные выключены. Хочу к примеру поменять угол сдвига между фазами, щелкаю на numeric, появляется курсор и тут же пропадает. Фокус уходит в момент отправки сообщения выключеным блокам, включенные не опрашиваются. Если блок выключить, то ошибка в коммуникации, отловиться, фронтальная панель - cluster Disable & Grayed, НО сам Actor продолжит работать и добавится в список опроса. Как то так.
Чтобы было более понятно приложил структуру проекта. Внизу четыре блока питания, будет добавлятся больше и представляют собой Actors с фронтальными панелями в виде кластеров. Enable/Disable & Grayed этих кластеров наглядно дает понять юзеру какие из блоков включены. Практический весь функционал блоков реализован в PS ROOT, от которого они наследуются. Выше Frame (голубенький) главная программа-контроллер, фронтальня панель которого состоит из субпанелей, в которые вставляются кластеры блоков и который управляет всем хозяйством. Контроллер периодически опрашивает блоки на предмет наличия их в системе (включены ли они - VISA Find Resources) Блоки отвечают контроллеру о статусе и контроллер базируясь на нем включает/выключает, инициализирует и т.д.
Скажем я работаю с одним блоком, остальные выключены. Хочу к примеру поменять угол сдвига между фазами, щелкаю на numeric, появляется курсор и тут же пропадает. Фокус уходит в момент отправки сообщения выключеным блокам, включенные не опрашиваются. Если блок выключить, то ошибка в коммуникации, отловиться, фронтальная панель - cluster Disable & Grayed, НО сам Actor продолжит работать и добавится в список опроса. Как то так.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Куда уходит фокус
Есть еще пара тем с подобным вопросом, но без ответа -
https://forums.ni.com/t5/LabVIEW/quot-R ... d-p/195926
https://forums.ni.com/t5/LabVIEW/Focus- ... -p/3227967
А как именно отправляются те периодические сообщения? Delayed Message; или Timeout? событие в Event Structure; или что-то третье?
https://forums.ni.com/t5/LabVIEW/quot-R ... d-p/195926
https://forums.ni.com/t5/LabVIEW/Focus- ... -p/3227967
А как именно отправляются те периодические сообщения? Delayed Message; или Timeout? событие в Event Structure; или что-то третье?
Мы делили апельсин - много наших полегло...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Куда уходит фокус
Старые темы. Описание, обсуждение и пути решения проблемы здесь:... еще пара тем с подобным вопросом, но без ответа...
The UI Thread, Root Loop, and LabVIEW: What You Need to Know
https://www.winemantech.com/blog/the-ui ... d-to-know/
Run Method should not run in the user interface thread
https://forums.ni.com/t5/LabVIEW-Idea-E ... n#comments
Quick Tip: Asynchronously launching VIs the right way
https://labviewcoder.com/2016/07/06/qui ... right-way/
Asynchronous Calls in the Actor Framework
https://forums.ni.com/t5/Actor-Framewor ... -p/3867654
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Куда уходит фокус
Так а какие пути решения? Изменение запуска актора? В этих темах не затрагивается "перехват фокуса". Понятно что выполнение в одному UI Thread блокирует процессы, но означает ли это что изменяется и "фокус" окна?
Мы делили апельсин - много наших полегло...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Куда уходит фокус
AristosQueue
"You want to know why the Run method "Requires Root Loop" (that's the term from the code side of things). This is pretty straightforward to explain: The UI thread can do "cooperative multitasking", to allow many methods/properties to appear to run in parallel even though they all require the UI thread by giving each of them a little bit of time. But some operations, particularly those that affect multiple VIs simultaneously, cannot proceed together. Trying to process a Run command at the same time as scripting a Drop SubVI node would be particularly messy, just to pick one example. There are many operations that cannot do the cooperative multitasking because they affect so much system state, and Run is one of those methods. That's definitely not something that can change."
Другими словами для асинхронного запуска необходимо снять фокус, а иначе можно
"You want to know why the Run method "Requires Root Loop" (that's the term from the code side of things). This is pretty straightforward to explain: The UI thread can do "cooperative multitasking", to allow many methods/properties to appear to run in parallel even though they all require the UI thread by giving each of them a little bit of time. But some operations, particularly those that affect multiple VIs simultaneously, cannot proceed together. Trying to process a Run command at the same time as scripting a Drop SubVI node would be particularly messy, just to pick one example. There are many operations that cannot do the cooperative multitasking because they affect so much system state, and Run is one of those methods. That's definitely not something that can change."
Другими словами для асинхронного запуска необходимо снять фокус, а иначе можно