Имя: Пароль:
1C
1C 7.7
v7: Ломается галерея картинок в обработке
,
0 MadDAD
 
06.12.17
11:37
Может кто сталкивался? На своей машине (Win7 x64) во внешнюю обработку добавляю кнопки с картинками. Сохраняю. Все открывается и работает ок.

Та же обработка в терминалке на сервере (Srv 2008 R2 x64) при попытке открыть в предприятии говорит "Unexpected file format." При открытии в конфигураторе  "Неправильный формат файла." и файл остается заблокированным.

Стал копать. При сохранении на сервере галерея картинок получается больше. Если разобрать и собрать GComp'ом проблема сохраняется. Если разобрать, подставить галерею из обработки сохраненной на сервере и собрать обратно, то все ок.

Платформа абсолютно идентичная. Версия MFC42 одинаковая. На машине другого разработчика (Win7 x64) тоже не открывается.
1 Ёпрст
 
06.12.17
11:37
[:]||||||||||||||||||[:]
2 Ёпрст
 
06.12.17
11:38
Поставь пароль на поделку свою, сохрани. Потом убери пароль.
3 Ёпрст
 
06.12.17
11:38
Иначе в контейнер не помещаются картинки вообще.
4 MadDAD
 
06.12.17
11:41
(3)(2) Не, не катит. Пробовал первым делом. Сами картинки в ert присутствуют.
5 Ёпрст
 
06.12.17
11:47
вся галерея там в бмп формате без заголовка, насколько я помню.
6 Ёпрст
 
06.12.17
11:47
можно посмотреть, чем они там отличаются
7 MadDAD
 
06.12.17
12:09
(6) С форматом галереи я разобрался. Даже тулзу написал. Это CImageList выгруженный в файл. Читается при помощи ImageList_Open(). Отличаются они тем, что на моей машине сама картинка этого имиджлиста сложена в иконках по одной в строке, а в варианте с сервера - по 4 в строке.

И вот хз почему так происходит.
8 MadDAD
 
06.12.17
13:01
(0) Отвечу сам себе. Не все красивости одинаково полезны.

Причина была в том, что у меня рядом с 1cv7s.exe лежал манифест (1cv7s.exe.manifest), в котором было указано использовать ComCtl32.dll версии 6.0. А на сервере такого манифеста не было и там используется версия постарше, которая сохраняет ImageList в немного другом формате. Разница в (6) - иконки в большом битмапе по разному уложены. И в конце после битмапа есть еще пара десятков непонятных байт.

В давние времена манифест был добавлен для того, чтобы 1С отображалась на экране с красивыми закругленными кнопками и прочими стилями Windows. Это такой способ включить поддержку тем в старых приложениях. После удаления манифеста моя платформа стала так же ругаться на эти обработки.
9 MadDAD
 
06.12.17
13:10
В результат всех изысканий родилась утилита, которая умеет распаковывать галерею, собирать её из больших файлов и из Gallery.bmp после GComp.

https://cloud.mail.ru/public/JDf3/fSmeMzCmi

Понимает так же ImageList в новом формате.
10 Ёпрст
 
06.12.17
13:11
ого, я уже и не помню, зачем манифест применял, парочка валяется в каталоге.
11 MadDAD
 
06.12.17
13:36
https://cloud.mail.ru/public/GZWt/dJGgmFwGA
Новая версия.

Старая открывает в новом формате и записывает тоже. В этой версии поправил, записывает в старом формате.
12 Ёпрст
 
06.12.17
13:36
спсб, пригодится
13 MadDAD
 
06.12.17
14:28
Совсем новая версия.

Добавил ключ -r.
Конвертировать без промежуточной разборки - сборки галереи.

https://cloud.mail.ru/public/J4ju/s1DhjEbXa

Пользоваться так:
Для исправления ошибки с версией берем FAR и плагин DocFileBrowser. Вытаскиваем поток Gallery.

Запускаем утилу: GalleryTool -r Gallery Gallery.bak должна написать что нашла сколько-то картинок и записала в в Gallery новую галерею.
Складываем Gallery обратно в обработку.

Для компиляции галереи из распакованного GComp исходника:
GalleryTool -c "[путь]\PictureGallery" Gallery
Должна написать, что собрала Gallery из 100500 картинок. Она сами их отресайзит в размер 80х80 и положит на белый фон. Сделает Gallery.head, Gallery.bmp и Gallery.tail. А так же поток Gallery целиком. Дальше можно собрать GComp или положить новый Gallery обратно в собранный MD как  в первом варианте.

Для разборки на отдельные иконки:
Вытаскиваем поток Gallery. Запускаем утилу -
GalleryTool -d Gallery "[Каталог]"
Разберет все на иконки 80x80 и сложит в каталог [Каталог].

Так же можно собрать поток Gallery из Gallery.bmp ( ключ -f), но привязки к реальным картинкам не будет, т.к. неоткуда её взять.

Думаю будет полезно тем, кто разбирает/собирает конфу при помощи GComp и меняет картинки.