Иконка в message

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Раньше не требовалось, сейчас столкнулся. Если в message указать стандартную иконку, например, icon:question, то в разных версиях ОС она отображается по разному. Попробовал заменить на иконку из файла. Если указать 'myIcon.ico' и подложить к программе, то отображает. А если прилинковать к dll и указать '~myIcon.ico', то не работает. Кроме как отказаться от message и делать свое окно, может есть какой-то еще вариант? Это с рантаймом с6, скорее всего, на с11 будет аналогично.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Иконка в message

Сообщение Дед Пахом »

Обычно в dll делают WINDOW-процедуру без кода, просто чтобы накидать на окно картинок - они прилинкуются к dll и будут доступны через ~myIcon.ico. Можно и без окна, просто добавить файлы к проекту как ресурсы.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Дед Пахом писал(а): 26 Март 2023, 20:28 Обычно в dll делают WINDOW-процедуру без кода, просто чтобы накидать на окно картинок - они прилинкуются к dll и будут доступны через ~myIcon.ico. Можно и без окна, просто добавить файлы к проекту как ресурсы.
Я так и делал. Если для кнопки устанавливать через prop:icon, то работает, а в message нет.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Иконка в message

Сообщение Дед Пахом »

Упс, прочитал по диагонали.
А это только для dll или в exe тоже не работает? Скорее всего, message просто не поддерживает формат "~myIcon.ico".
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Я для dll пробовал. Где-то на памяти, что когда-то давно этот вопрос поднимался, но не помню результата. Похоже, что дело именно в message.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Иконка в message

Сообщение Игорь Столяров »

finsoftrz писал(а): 26 Март 2023, 21:05 Я для dll пробовал
Добавьте иконку в проект основного APP (EXE).
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Игорь Столяров писал(а): 26 Март 2023, 22:20
finsoftrz писал(а): 26 Март 2023, 21:05 Я для dll пробовал
Добавьте иконку в проект основного APP (EXE).
Не работает.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Я так понимаю, что message это уже уровень win api, там прилинкованные иконки не известны. То есть, решить проблему можно только заменив стандартный message своим окном. Мне это не проблематично, так как message я напрямую в прикладном коде не использую, в основном, через вызов функций прокладок. Когда-то во времена с55 с message были проблемы, и использовались свои окна, а в с6 вернулось на message.
У CapeSoft на эту тему библиотечка была, они хукают message и подменяют своим диалоговым окном с расширенными возможностями.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Иконка в message

Сообщение Игорь Столяров »

Хотелось бы увидеть пример демонстрирующий проблему (не фото / видео !) и прогнать его на заведомо рабочей среде разработки.
И тогда уже обсуждать решение. Есть опасения, что это локальная проблема ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Забавный глюк. Из обычной оконной процедуры вызываем функцию с message из другой dll. В функции с message, вызываем message перед open(window), первый раз не работает. После open(window) - работает. При повторном вызове функции работает всегда. Закрываем окно, из которого вызываем функцию, открываем, первый раз до open(window) снова не работает. В общем, обход я нашел, надо перед message открыть пустое окно, а после закрыть. Глюк воспроизводится стабильно, делать пример на стандартных шаблонах времени нет. Главное, что понятно, как обойти.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Иконка в message

Сообщение Игорь Столяров »

finsoftrz писал(а): 27 Март 2023, 1:14 делать пример на стандартных шаблонах времени нет
Возможно, что в штатных шаблонах Clarion этой проблемы и не было ...
Отлично, что получен результат, который Вас устроил. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Это не проблема шаблонов, а проблема в рантайме.
Можете сами попробовать, должно получиться. Делаете в одной dll соурс процедуру без окна, в которой один только message со ссылкой на приликованную к этой dll иконку (типа ~myicon.ico). Из другой dll вызываете эту процедуру, например, при нажатии на кнопку. Message без иконки. Если в соурс процедуре сделать пустое окно и перед message добавить open(Window), то message с иконкой, как положено.

Один только момент, что рантайм C6. На C11 не пробовал, так как не актуально.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Иконка в message

Сообщение Игорь Столяров »

finsoftrz писал(а): 27 Март 2023, 6:36 Из другой dll вызываете эту процедуру
У Вас ещё и вызов процедуры с Message() из DLL ...
Попробуйте прилинковать тогда Icon к проекту вызывающего DLL (а не EXE, как я написал ранее).
finsoftrz писал(а): 27 Март 2023, 6:36 а проблема в рантайме
RunTime работает с прилинкованными ресурсами проекта, список которых формирует шаблон.
C штатными шаблонами Clarion (по крайне мере ABC) я такой проблемы не вижу ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Иконка в message

Сообщение finsoftrz »

Игорь Столяров писал(а): 27 Март 2023, 7:02 У Вас ещё и вызов процедуры с Message() из DLL ...
Попробуйте прилинковать тогда Icon к проекту вызывающего DLL (а не EXE, как я написал ранее).
Да, если прилинковать иконку к dll, из которой вызывается, то работает корректно. Но это совсем костылище, так как процедура с message может вызываться из разных dll. Обход проблемы через открытие пустого окна меньшее из зол.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Иконка в message

Сообщение Игорь Столяров »

finsoftrz писал(а): 27 Март 2023, 7:21 Да, если прилинковать иконку к dll, из которой вызывается, то работает корректно
В принципе, то же самое происходит и с иконками в PopUp().
Видимо (!!!) для RunTime доступны ресурсы проекта в котором создан текущий поток.
Как говорит молодёжь: не баг, а фича ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить