EXE файл и способ добавления картинок

Простейшие вопросы в области инженерной разработки
AndreyDmitriev

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

Re: EXE файл и способ добавления картинок

Сообщение AndreyDmitriev »

Добавить или удалить элементы в Ring Control программно несколько проблематично, однако заменить картинки на уровне ресурсов теоретически возможно (причём не только у RingControl, можно и иконки на кнопках подменять). Но это не то, с чем я бы пошёл в продакшен. Пример в LV2010, в 2016 тоже вроде работает.
Вложения
Replace Image RunTime TEST.zip
(50.31 КБ) 156 скачиваний
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: EXE файл и способ добавления картинок

Сообщение Vitekkz88 »

AndreyDmitriev, пример в LV2016
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: EXE файл и способ добавления картинок

Сообщение Vitekkz88 »

JohnChaban писал(а):Человеку показал ему понравилось.
Единственное пожелание от него было чтобы под картинками были подписи на русском языке.
Но подписи не просто а и из строкого массива.
Смотрите, добавил подписи. Как работает: навели мышкой на элемент из списка картинок, значение в текстовом поле изменилось. Передвинули на следующий элемент, присвоили новое имя. Имена берутся из строкового массива. Я бы еще повозился над световым выделением на наведенный элемент списка, но это попробуйте придумать самостоятельно. Если же захотите, чтоб надпись появлялась непосредственно под выбираемой картинкой, то используйте аналогичную математику, которая используется для отображения массива с картинками.
Вложения
Безымянный.png
Безымянный.png (5.07 КБ) 7178 просмотров
PictureControl_Upgrade.zip
(50.1 КБ) 142 скачивания
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
AndreyDmitriev

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

Re: EXE файл и способ добавления картинок

Сообщение AndreyDmitriev »

Vitekkz88 писал(а):AndreyDmitriev, пример в LV2016
Ой, это я случайно после проверки сохранил в 2016. Вот сохранил обратно в 2010:
Вложения
Replace Images RunTime TEST Folder 2010.zip
(42 КБ) 121 скачивание
Аватара пользователя
dadreamer

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

Re: EXE файл и способ добавления картинок

Сообщение dadreamer »

AndreyDmitriev, уж почти 8 лет скоро исполнится этому примеру. А полноценный редактор ресурсов так никто и не написал до сих пор. Resource Editor от flarn2006 - единственная попытка продвинуться в этом направлении.
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

Re: EXE файл и способ добавления картинок

Сообщение JohnChaban »

Не удалось пока воспользоваться примером https://lavag.org/topic/1772-simulating ... mment-8158
C winapi не силен и пока не понятно что должно быть в результате выполнения данного vi
Аватара пользователя
dadreamer

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

Re: EXE файл и способ добавления картинок

Сообщение dadreamer »

JohnChaban писал(а):Не удалось пока воспользоваться примером https://lavag.org/topic/1772-simulating ... mment-8158
C winapi не силен и пока не понятно что должно быть в результате выполнения данного vi
Не совсем удачный :vi: , да ещё и с ошибкой - удаление потомка некорректно реализовано.
Всё-таки не советовал бы использовать этот способ ввиду его трудоёмкости. Там помимо SetParent ещё ряд вещей нужно сделать. В частности, изменить стиль окна-потомка, установить его координаты относительно окна-родителя, перерисовать это окно. Может, ещё что. И после завершения основной программы выполнить все указанные действия в обратном порядке. До кучи не стоит искать окошко через FindWindow, т.к. может найти чужое окно и тогда получится ералаш. Следует запустить дочерний процесс и по нему получить HWND. В общем, занятие не для чайников.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: EXE файл и способ добавления картинок

Сообщение Blackman »

Все достаточно просто.
После остановки VI окно контекстной справки останется встроенным и работающим. Поэтому закройте сначала окно контекстной справки, а затем можно закрывать VI.
Вложения
Context Help in Parent Window.PNG
Аватара пользователя
dadreamer

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

Re: EXE файл и способ добавления картинок

Сообщение dadreamer »

Blackman писал(а):Все достаточно просто.
После остановки VI окно контекстной справки останется встроенным и работающим. Поэтому закройте сначала окно контекстной справки, а затем можно закрывать VI.
Не проще ли тогда исправить :vi: , чтобы он работал как положено?
MSDN писал(а):hWndNewParent [in, optional]
Type: HWND
A handle to the new parent window. If this parameter is NULL, the desktop window becomes the new parent window. If this parameter is HWND_MESSAGE, the child window becomes a message-only window.
Но, как я уже сказал, одной этой функции будет маловато. Сделайте пару экзешников и посмотрите, что получится.
Аватара пользователя
JohnChaban
leader
leader
Сообщения: 669
Зарегистрирован: 18 фев 2010, 13:26
Версия LabVIEW: 2015,2016
Откуда: Город Сосновый Бор Ленинградская Область
Контактная информация:

Re: EXE файл и способ добавления картинок

Сообщение JohnChaban »

Еще вопрос если сделан vi дочерний в виде exe то его имя указывать в titlechildwindow без .exe?
Аватара пользователя
dadreamer

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

Re: EXE файл и способ добавления картинок

Сообщение dadreamer »

JohnChaban писал(а):Еще вопрос если сделан vi дочерний в виде exe то его имя указывать в titlechildwindow без .exe?
Указываете то, что написано в заголовке окна, когда вы запустили экзешник. Если там написано, например, Application, то указывайте строку Application.

Если будет свободное время, выложу исправленный вариант с запуском дочернего процесса и встраиванием на панель основной программы.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: EXE файл и способ добавления картинок

Сообщение Blackman »

MDI Toolkit for LabVIEW™: http://www.lvs-tools.co.uk/files/6814/3 ... asheet.pdf
VI Box XControls - SAPHIR: http://sine.ni.com/nips/cds/view/p/lang/ru/nid/210715
ALOHA Modular GUI: http://www.s5solutions.com/aloha---details.html
Здесь ссылки на примеры WinAPI, NET ... : https://decibel.ni.com/content/message/15852#15852
Аватара пользователя
dadreamer

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

Re: EXE файл и способ добавления картинок

Сообщение dadreamer »

dadreamer писал(а):Если будет свободное время, выложу исправленный вариант с запуском дочернего процесса и встраиванием на панель основной программы.
Поигрался немного с этим делом. Как-то ненадёжно это работает, да и не совсем эстетично. Вот пример с двумя экзешниками:
SetParent_Test_LV2013.rar
(395.01 КБ) 137 скачиваний
Какие нюансы обнаружились:
- Хэндл окна экзешника иногда меняется в процессе запуска. В результате встраивание окна-потомка в окно-родитель не срабатывает, т.к. процедура поиска окна выдаёт старый хэндл, который более недействителен. Единственное решение здесь - ставить задержку (не менее 500 мс), чтобы окно в течение этого времени успело "обрести свою форму". Честно говоря, не знаю, почему так происходит. Вероятно, lvrt использует собственный конструктор окон, в т.ч. свои процедуры оконных событий.
- При запуске Child-процесса его окно отображается на экране в течение некоторого количества времени (часто это заметно визуально). На такие состояния как SW_HIDE (0), SW_MINIMIZE (6), SW_SHOWMINIMIZED (2) окно не реагирует. Если выставить FP.State = Hidden, то потом это окно не восстановить, т.к. нет коммуникации между двумя экзешниками.
- TerminateProcess - не совсем хороший способ завершения работы Child-процесса. Но раз нет никаких механизмов связи между двумя exe, то способ единственный. Ну, или помещать в Child отдельную кнопку Stop, тогда можно использовать WaitForSingleObject (задел для этого есть в примере).
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: EXE файл и способ добавления картинок

Сообщение Borjomy_1 »

- Хэндл окна экзешника иногда меняется в процессе запуска.
Скорее всего это следствие того, что при запуске сначала рисуется окно процесса загрузки VIs из экзешника. Это окно отрисовывается, если на медленной машине запускается тяжелое приложение с большим количеством VI. Скорее всего это его хендл. И задержка тут не факт, что поможет...
Аватара пользователя
dadreamer

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

Re: EXE файл и способ добавления картинок

Сообщение dadreamer »

Borjomy_1 писал(а):И задержка тут не факт, что поможет...
Она помогает, но приходится наблюдать Child-окошко в течение полсекунды или больше. Я бы такое не стал у себя в программе использовать. Может, здесь можно как-то иначе извернуться, но мне в голову ничего не приходит. Если класс окна, заголовок и PID одинаковые, то непонятно, как различить окна.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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