Открытие диалогового окна в определенной позиции
- jane_wild
- master
- Сообщения: 433
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 75 раз
- Поблагодарили: 7 раз
- Контактная информация:
Открытие диалогового окна в определенной позиции
Всем здравствуйте. Возможно мой вопрос покажется глупым, но все же спрошу.
Есть ли возможность открывать диалоговые окна в позиции установленой пользователем, а не по центру экрана, как по умолчанию?-
- VIP
- Сообщения: 1269
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2022
- Откуда: Германия
- Поблагодарили: 15 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
Навскидку - нет такой возможности. Разве что взять Three Button Dialog (он сделан как отдельный инструмент), сделать себе копию, поправить по вкусу, и вот тогда его можно показывать там где надо - либо статически задать позицию панели в свойствах инструмента, либо динамически позицию задавать через узел свойства.
-
dadreamer
- professor
- Сообщения: 3872
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 10 раз
- Поблагодарили: 97 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
Насколько я помню по своим старым исследованиям, возможность такая есть. One Button Dialog вызывает внутреннюю функцию OneButtonAlert, которая помимо прочего принимает координаты. Прототип такой:
А так вызывается стандартный диалог по центру экрана:
Думаю, не сложно будет вызвать эту функцию через CLFN. Если не справитесь, пример позже выложу.
Код: Выделить всё
OneButtonAlert: function(StrType: integer; MsgText, ButtonText: PShortString;
X, Y: integer; Caption: PShortString): PCardinal; cdecl;
Код: Выделить всё
procedure LVMessage(Text: ShortString);
begin
OneButtonAlert($35, @Text, nil, $7FFF, $7FFF, nil);
end;
-
- VIP
- Сообщения: 1269
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2022
- Откуда: Германия
- Поблагодарили: 15 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
Ну это немножко хардкорный путь для новичка, но в принципе работает, да. Спасибо, не знал, что там координаты есть.
А пример набросайте, пожалуйста, если не трудно, а то что-то я туплю, как строки туда правильно передать, а в отладчик лень лезть.
-
dadreamer
- professor
- Сообщения: 3872
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 10 раз
- Поблагодарили: 97 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
jane_wild вроде не новичок уже :)
- Вложения
-
- OneButtonAlert.vi
- lv2011
- (5.81 КБ) 35 скачиваний
-
- VIP
- Сообщения: 1269
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2022
- Откуда: Германия
- Поблагодарили: 15 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
А, понял, я 35 десятичное в StrType воткнул... А этот параметр что вообще означает?
Под "новичком" я имел ввиду "обобщительный образ", а не конкретно автора вопроса, приношу извинения, никого не хотел обидеть, честно.
-
dadreamer
- professor
- Сообщения: 3872
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 10 раз
- Поблагодарили: 97 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
Тип строки для параметра MsgText (текст в окне), на текст на кнопке и в заголовке не распространяется. Насколько мне известно, функция поддерживает только эти типы:
0x30 LabVIEW String (LStr) (передаётся как LStrHandle *)
0x34 C String (CStr)
0x35 Pascal String (PStr)
Да, там Return по-хорошему - Unsigned Pointer-sized Integer, а не U32, иначе в 64-битном

-
- developer
- Сообщения: 286
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 5 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
Можно просто subvi вместо диалогового окна сделать и открывать его в любом нужном месте
- jane_wild
- master
- Сообщения: 433
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 75 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
dadreamer Вы мне льстите. Количество сообщений никак не связано с моим професионализмом, не зря же мой "любимый" раздел на форуме - для чайников.
За пример громадное спасибо!!!
Только осталось выяснить где расположена эта dll которую Вы используете конфигурируя CLFN ?
-
dadreamer
- professor
- Сообщения: 3872
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 10 раз
- Поблагодарили: 97 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
LabVIEW - это зарезервированное слово, при вводе его в поле выбора dll


Я тут ещё примерчик для двухкнопочного диалога сделал.
Код: Выделить всё
uint32_t TwoButtonAlert(int32_t StrType, PStr MsgText, PStr Button1Text, PStr Button2Text, uint32_t FocusButton, int32_t X, int32_t Y, PStr Caption);
- Вложения
-
- TwoButtonAlert.vi
- lv2011
- (6.24 КБ) 25 скачиваний
- jane_wild
- master
- Сообщения: 433
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 75 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
Спасибо за подробное объяснение, теперь все понятно.dadreamer писал(а): ↑20 сен 2022, 16:06 LabVIEW - это зарезервированное слово, при вводе его в поле выбора dllдолжен линковаться к собственному процессу и брать оттуда имена функций, которые содержатся в labview.exe. Абсолютный путь к labview.exe указывать не рекомендуется, т.к. во-первых не будет работать в RTE, и во-вторых могут быть неприятности при смешивании разных версий
на одной системе. Судя по скрину, что-то идёт не так, раз выпадающий список с именами функций не активен?.. Или показалось? Я такого никогда не видел, но один юзер на форумах NI когда-то сообщал о таком поведении. Не знаю, как в итоге это решилось.
Показалось все Ok
Я почему задалась этим вопросом. Дело в том, что при запуске программы показывается заставка, которая распологаестся поверх всех окон и по центру. Так вот, при инициализации всего и вся, могут возникнуть какие то ошибки, например отсуствие какой нибудь Scale. Шкала заменяется на дефолтную и показываестя сообщение юзеру...
Так вот заставка скрывает это сообщение, а программа ждет нажатие на кнопку и создается впечатление что все зависло... Благодаря Вам это теперь не будет является проблемой, надеюсь что и в RT все будет работать

- jane_wild
- master
- Сообщения: 433
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 75 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: Открытие диалогового окна в определенной позиции
Скомпилировала и проверила на работающей машине - всё работает! 

-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 15 Ответы
- 1966 Просмотры
-
Последнее сообщение taras_33