#delphi #icons #delphi-2007
#delphi #Значки #delphi-2007
Вопрос:
Использование Delphi 2007. Я добавляю в свое приложение 2 дополнительных значка, которые будут использоваться для некоторых пользовательских ассоциаций файлов. Использование пользовательских файлов ресурсов, и это работает правильно. Однако, просматривая результирующие exe-файлы, я обнаружил несколько дополнительных значков, и я не знаю, откуда они берутся.
В результате мои значки становятся значками 5 и 6 вместо 1 и 2. Результатом является то, что при добавлении пользовательских ассоциаций файлов моя запись реестра DefaultIcon должна использовать 5 и 6 вместо того, что я ожидал.
Меня беспокоит то, что, поскольку я не понимаю, откуда берутся эти значки, я могу вызвать у себя проблемы в будущем.
Есть идеи, где их искать?
Комментарии:
1. @Luke В Delphi всегда есть некоторые значки по умолчанию. Создайте новое приложение VCL forms, в котором ничего нет, скомпилируйте его и посмотрите на значки в результирующем exe-файле. (используйте исходный текст Luke) извините, не смог удержаться
2. @Johan: Ты уверен? Я никогда не видел ни одного [кроме значка приложения]…
3. @Johan: Попробовал новое приложение vcl forms, и единственный значок — это MAINICON.
4. @Да, вы правы, раньше вы получали дополнительные значки с приложением MDI, но я проверил в Delphi 2007, и там отображается только 1 значок. Интересно, когда они это изменили.
5. @Johan, они этого не сделали. Delphi по умолчанию включал только один значок.
Ответ №1:
Delphi добавляет один значок в ваш exe-файл (по умолчанию или указанный пользователем).
Если вы видите больше значков в своем приложении, то они либо:
- Где-то добавляется с помощью rc-файла.
- Они были добавлены непосредственно в файл .res вашего проекта.
Вы можете просматривать и редактировать содержимое вашего файла .res с помощью любого редактора ресурсов. Два хороших примера — это приложения от Андерса Меландера и Колина Уилсона.
Обновить:
Поскольку Люк не нашел другого файла .rc, а его файл .res верен, вот пара других вещей, которые я бы попробовал:
- Delphi 2007 поддерживает события до и после сборки. Посмотрите, есть ли какие-либо, которые могут добавить ресурсов.
- Посмотрите на выходные данные компилятора в окне сообщений на предмет любых признаков неожиданного появления файла .res или .rc.
- Найдите в своих исходных файлах экземпляры «.res» или «.rc».
Комментарии:
1. * один значок, который может иметь разные «значки» в зависимости от размера, например: 256×256 — плюшевый мишка, 128×128 — лев, 32×32 — треугольник, 24×24 — буква «D»
2. У одного значка может быть несколько изображений, но по сути это все равно один .ico. Посмотрите на ресурс MAINICON в исполняемом файле Delphi с помощью редактора ресурсов.
3. @Bruce: Использовал редактор ресурсов от Андерса Меландера и обнаружил следующее. В файле разрешения приложения есть только один значок, MAINICON, чего я и ожидал. На моем пользовательском ресурсе есть две иконки, чего я и ожидал. В моем exe-файле 7. Неучтенными значками являются ReminderBell, vcl_ew, vcl_nesw, vlc_ns. Выполните поиск по источнику и не можете найти никаких других ссылок на .rc или .res. Ссылок на эти значки тоже нет. Все еще в тупике.
4. Я добавлю еще одно или два предложения.
5. Поиск файлов .rc и .res по всему диску не помог, так как у меня было 769 файлов .rc и 4k файлов .res. Поискал в источниках сторонних библиотек (я использую несколько) фактические названия значков и нашел ссылки LoadIcon на каждый из четырех значков.
Ответ №2:
В дополнение к тому, что сказал Брюс, ResHacker также является бесплатным инструментом для просмотра ресурсов вашего exe.
Кроме того, я не уверен, сработает ли это, но не могли бы вы сохранить нужные значки в ресурсной библиотеке dll и извлекать / использовать их, когда вам нужно?