Открытие диалогового окна в определенной позиции

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Открытие диалогового окна в определенной позиции

Сообщение jane_wild »

Всем здравствуйте. Возможно мой вопрос покажется глупым, но все же спрошу.
Btn Dialog.png
Btn Dialog.png (1.42 КБ) 1232 просмотра
Есть ли возможность открывать диалоговые окна в позиции установленой пользователем, а не по центру экрана, как по умолчанию?
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1334
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 40 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение AndreyDmitriev »

jane_wild писал(а): 19 сен 2022, 14:29 Есть ли возможность открывать диалоговые окна в позиции установленой пользователем, а не по центру экрана, как по умолчанию?
Навскидку - нет такой возможности. Разве что взять Three Button Dialog (он сделан как отдельный инструмент), сделать себе копию, поправить по вкусу, и вот тогда его можно показывать там где надо - либо статически задать позицию панели в свойствах инструмента, либо динамически позицию задавать через узел свойства.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение dadreamer »

Насколько я помню по своим старым исследованиям, возможность такая есть. One Button Dialog вызывает внутреннюю функцию OneButtonAlert, которая помимо прочего принимает координаты. Прототип такой:

Код: Выделить всё

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;
Думаю, не сложно будет вызвать эту функцию через CLFN. Если не справитесь, пример позже выложу.
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1334
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 40 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение AndreyDmitriev »

dadreamer писал(а): 19 сен 2022, 15:58 Насколько я помню по своим старым исследованиям, возможность такая есть. One Button Dialog вызывает внутреннюю функцию OneButtonAlert, которая помимо прочего принимает координаты.
Ну это немножко хардкорный путь для новичка, но в принципе работает, да. Спасибо, не знал, что там координаты есть.
А пример набросайте, пожалуйста, если не трудно, а то что-то я туплю, как строки туда правильно передать, а в отладчик лень лезть.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение dadreamer »

AndreyDmitriev писал(а): 19 сен 2022, 17:25Ну это немножко хардкорный путь для новичка
jane_wild вроде не новичок уже :)
Вложения
OneButtonAlert.vi
lv2011
(5.81 КБ) 50 скачиваний
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1334
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 40 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение AndreyDmitriev »

А, понял, я 35 десятичное в StrType воткнул... А этот параметр что вообще означает?
dadreamer писал(а): 19 сен 2022, 19:08 jane_wild вроде не новичок уже :)
Под "новичком" я имел ввиду "обобщительный образ", а не конкретно автора вопроса, приношу извинения, никого не хотел обидеть, честно.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение dadreamer »

AndreyDmitriev писал(а): 19 сен 2022, 19:38А этот параметр что вообще означает?
Тип строки для параметра MsgText (текст в окне), на текст на кнопке и в заголовке не распространяется. Насколько мне известно, функция поддерживает только эти типы:
0x30 LabVIEW String (LStr) (передаётся как LStrHandle *)
0x34 C String (CStr)
0x35 Pascal String (PStr)

Да, там Return по-хорошему - Unsigned Pointer-sized Integer, а не U32, иначе в 64-битном :labview: вернёт неверный указатель. Возвращается указатель на указатель на U32, куда функция прописывает "1" (хоть ОК жми, хоть крестик). Толку от этой единички не особо много, конечно.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение rushonda »

Можно просто subvi вместо диалогового окна сделать и открывать его в любом нужном месте
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение jane_wild »

dadreamer писал(а): 19 сен 2022, 19:08 jane_wild вроде не новичок уже :)
dadreamer Вы мне льстите. Количество сообщений никак не связано с моим професионализмом, не зря же мой "любимый" раздел на форуме - для чайников.
За пример громадное спасибо!!!

Только осталось выяснить где расположена эта dll которую Вы используете конфигурируя CLFN ?
CLFN.PNG
CLFN.PNG (9.61 КБ) 1100 просмотров
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение dadreamer »

jane_wild писал(а): 20 сен 2022, 14:22Только осталось выяснить где расположена эта dll которую Вы используете конфигурируя CLFN ?
LabVIEW - это зарезервированное слово, при вводе его в поле выбора dll :labview: должен линковаться к собственному процессу и брать оттуда имена функций, которые содержатся в labview.exe. Абсолютный путь к labview.exe указывать не рекомендуется, т.к. во-первых не будет работать в RTE, и во-вторых могут быть неприятности при смешивании разных версий :labview: на одной системе. Судя по скрину, что-то идёт не так, раз выпадающий список с именами функций не активен?.. Или показалось? Я такого никогда не видел, но один юзер на форумах NI когда-то сообщал о таком поведении. Не знаю, как в итоге это решилось.

Я тут ещё примерчик для двухкнопочного диалога сделал.

Код: Выделить всё

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 КБ) 38 скачиваний
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение jane_wild »

dadreamer писал(а): 20 сен 2022, 16:06 LabVIEW - это зарезервированное слово, при вводе его в поле выбора dll :labview: должен линковаться к собственному процессу и брать оттуда имена функций, которые содержатся в labview.exe. Абсолютный путь к labview.exe указывать не рекомендуется, т.к. во-первых не будет работать в RTE, и во-вторых могут быть неприятности при смешивании разных версий :labview: на одной системе. Судя по скрину, что-то идёт не так, раз выпадающий список с именами функций не активен?.. Или показалось? Я такого никогда не видел, но один юзер на форумах NI когда-то сообщал о таком поведении. Не знаю, как в итоге это решилось.
Спасибо за подробное объяснение, теперь все понятно.

Показалось все Ok
Screenshot 2022-09-20 091257.png
Я почему задалась этим вопросом. Дело в том, что при запуске программы показывается заставка, которая распологаестся поверх всех окон и по центру. Так вот, при инициализации всего и вся, могут возникнуть какие то ошибки, например отсуствие какой нибудь Scale. Шкала заменяется на дефолтную и показываестя сообщение юзеру...
Так вот заставка скрывает это сообщение, а программа ждет нажатие на кнопку и создается впечатление что все зависло... Благодаря Вам это теперь не будет является проблемой, надеюсь что и в RT все будет работать :thank:
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Открытие диалогового окна в определенной позиции

Сообщение jane_wild »

Скомпилировала и проверила на работающей машине - всё работает! :dance:
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»