Как сделать иконку delphi

Обновлено: 05.07.2024

" писал(а): А поменять иконку на самой программе, чтобы TotalCmd показывал не иконку Delphi, а мою?

Это вообще уже просто лентяйство! Сам книги читать не пробовал? Это же в любом учебнике написано!
Делай следующее:
Project -> Options -> Вкладка Application -> Дальше разберёшся, там всё просто.
И не надо всё пихать в одну тему, неужели так тяжело создать новую. :@

Всё просто, скачивай программу Restorator 2006. (yandex, google,rambler). Я когда-то тоже задался этим вопросом. Вот как я меняю иконки в программе
"Restorator 2006 Trial"
_____________

1) Открываю свою программу. (file-open)
2) Здесь появляются всякие папки т.к. cursor, dialogs, bitmap и т.д. Включительно, есть и папка "icon". Выделяем эту папку, далее ПКМ (правая кнопка мыши) > Add Resourse.
3) Во вкладке Name вводи любое имя.
4) Заходи в папку Icon (если ещё не зашел).
5) На созданный тобой файл жми ПКМ > Assign. > Assign to.
6) В появившемся окне выбирай свой значок (иконку, которую хочешь добавить в exe)
7) Запомнив её имя, удаляй старую иконку, которая была в папке Icons ранее(выделив, нажми клавишу delete). Переименовывай свой файл в то имя, которое было присвоено "родной" иконе (той, которую ты удалил).
8) Сохраняй файл.
____________________________

ЕСЛИ У ТЕБЯ В ПРОГРАММЕ НЕТ ИЗНАЧАЛЬНОЙ ИКОНКИ (если знак приложения - пустое белое окно), ТО МОЖЕШЬ НЕ ИСПЫТЫВАТЬ ВЫШЕУКАЗАННЫЙ МЕТОД.

Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали.

Ресурсы - важная часть приложения Windows. Однако, не все разработчики удосуживаются создать правильный набор ресурсов, необходимый для корректного поведения приложения, в итоге мы видим приложения, которые просят, чтобы пользователь самостоятельно запустил их с правами администратора (под Windows Vista/2008/7) или иконки которых отображаются зернисто или как непонятный набор пикселей, а некоторые не имеют описания и номера версии.

Ресурсы, сами по себе - записи только для чтения внутри вашего .exe или .dll , которые просматривает Windows в поисках значков, описаний и прочих нужных ей вещей.

Как же сделать из стандартного нечто :

Что-то красивое, вот такое:

Для примеров я буду использовать Rad Studio Delphi 2010 под Windows 7 x64.

Rad Studio уже во время компиляции добавляет в ресурсы компилируемого файла необходимые (или не очень) ей записи. Среди них какие-то строки с текстами об ошибках, информация о компиляторе, данные о ваших формах, стандартные bitmap' ы и еще бог знает что. Пока нас это не будет интересовать, нам интересно то, что Rad Studio не удосуживается добавить.

What is resource?

Прежде всего ресурсы - это записи внутри .exe или .dll файла, хранящие в себе некоторую информацию, например, изображение курсора или строковое значение для локализации. Ресурсы в Windows могут быть как стандартного (предопределенного) типа (BITMAP, CURSOR, FONT и т.д.), так и заданного пользователем типа (User-defined). Если используется один из стандартных типов, то доступ к этому ресурсу осуществляется посредством целочисленного значения (константы), определяющего этот ресурс (BITMAP - 2, CURSOR - 1, FONT - 8, etc). В случае User-defined тип задается любым строковым значением, например "JPEG" или "SOUND". Каждый из ресурсов, кроме RCDATA и User-defined, записываются в исполнямый файл в специальном формате, созданным именно для этого типа ресурса. Например ресурс типа ICON - не копия файла .ico, вставленной в конец .exe файла.

Какие вообще бывают предопределеные типы :

  • CURSOR = 1
  • BITMAP = 2
  • ICON = 3
  • MENU = 4
  • DIALOG = 5
  • STRING = 6
  • FONTDIR = 7
  • FONT = 8
  • ACCELERATOR = 9
  • RCDATA = 10
  • MESSAGETABLE = 11
  • GROUP_CURSOR = 12
  • GROUP_ICON = 14
  • VERSION = 16
  • DLGINCLUDE = 17
  • PLUGPLAY = 19
  • VXD = 20
  • ANICURSOR = 21
  • ANIICON = 22
  • HTML = 23
  • MANIFEST = 24

Я также привожу числовые значения, чтобы в них было проще ориентироваться позднее. Подробнее на MSDN.

Также ресурсы можут быть отнесены к конкретному языку (или сделать мультиязычными), например, строки локализации или диалоги. Для этого существует специальное поле при создании ресурса.

Creating icon resources

Вот стандартный диалог Delphi для работы с иконкой проекта и рядышком информации о версии.

Про эти окна скажу только одно - для вас их больше не существует. Мы не будем ими пользоваться, их функционыл недостаточен для создания полноценных ресурсов иконок и описания проекта.

Прежде всего наприсуйте иконку в высоком разрешении и создайте из этого файла несколько .ico файлов разных форматов :

Можно также поиграться с цветностью картинки для совместимости со старыми версиями Windows. В итоге должен получиться набор файлов вида icon128.ico. icon16.ico.

Теперь нужно создать .rc файл, который будет отвечать для сборку ресурса. Это просто текстовый файл ( ANSI encoded), который похож на обычный .cmd скрипт. Содержимое файла должно быть вот таким :

MAINICON ICON "icon128.ico"
2 ICON "icon48.ico"
3 ICON "icon32.ico"
4 ICON "icon24.ico"
5 ICON "icon16.ico"

Здесь мы отмечаем самую большую и четкую иконку 128 x128 как основную (MAINICON = 1) и указываем остальные как дополнительные. Windows сама найдет нужную ей иконку из этого списка.

Чтобы добавить эти иконки в проект их нужно скомпилировать утилитой brcc32 из составть Rad Studio. Синтаксис таков :

brcc32 -l0409 mainicon.rc

Компилятор ресурсов создаст файл mainicon.res, который является ресурсов с языком $ 0409 (EnUS). Рекомендую сразу создать .cmd скрипт, нам потребуется добавить еще пару ресурсов в исполняемый файл.

Adding resource to an application

Ресурсы в Delphi подключаются дерективой

Сразу после создания проекта Delphi создает для нам ресурс projectname.res, который подключается автосфомированной редетивой < $ R *.res>в файле проекта. Чтобы этого больше не происходило перейдем в файл проекта :

и изменим код так, чтобы он подключал не все подрят, а только то, что нам требуется :

И пересоберем проект целеком, нажав Shift+F9. В итоге получится симпотчная иконка, и все наши .ico включатся в итоговый проект ::

Скриншот ресурсов взят из Resource Hacker, им можно контролировать состояние ваших проектов. Как видите - иконки вставились и им назначился язык 1033 ( EnUS).

Application Info

Теперь нужно добавить описание исполняемого файла, которое отображается в диалоге Properties, на вкладке Details.

Создадим .rc файл, как и выше, но с текстом :

1 VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BLOCK "StringFileInfo"
BLOCK "040904E4"
VALUE "CompanyName", "DelphiCorp\0 00"
VALUE "FileDescription", "Reso urce Demo Application\000"
VALUE "FileVersion", "1.0.0.0\000"
VALUE "InternalName", "Resource De mo Application\000"
VALUE "LegalCopyright", "SV Fo ster, 2011\000"
VALUE "LegalTrademarks", "DelphiCo rp\000"
VALUE "OriginalFilename", "RDA.e xe\000"
VALUE "ProductName", "DelphiCorp\0 00"
VALUE "ProductVersion", "1.0.0.0\0 00"
VALUE "Comments", "\000"
>
>

BLOCK "VarFileInfo"
VALUE "Translation", 0x0409 0x04E 4
>
>

Итик, очевидно по тексту файла, это файл ресурсов первой версии, содержит VersionInfo , для приложения версии 1.0.0.0. FileVersion - версия конкретного .exe файла.

FileOS - для какой Windows предназначен этот файл. Бывают :

  • VOS_UNKNOWN
  • VOS_DOS
  • VOS_NT
  • VOS__WINDOWS16
  • VOS__WINDOWS32
  • VOS_DOS_WINDOWS16
  • VOS_DOS_WINDOWS32
  • VOS_NT_WINDOWS32

FileType описывает тип файла (приложение, библиотека, драйвер. ). Возможные значения :

  • VFT_UNKNOWN
  • VFT_APP
  • VFT_DLL
  • VFT_DRV
  • VFT_FONT
  • VFT_VXD
  • VFT_STATIC_LIB

FileSutType описывает тип драйвера, для приложений ставится VFT2_UNKNOWN

Блок StringFileInfo - это то, что показывается в Properties. Здесь можно указать компанию производителя, версию и все остальные параметры приложения.

Обратите внимание на формировании языкового признака. Значение 040904E4 расшифровывается как langID + charsetID. Здесь $ 0409 ( EnUS) + $04E4 (Multilanguage).

Аналогично для блока VarFileInfo.

Добавьте в ваш .cmd строку для компиляции ресурса

brcc32 -l0409 VersionInfo.rc

а в Delphi подключите ресурс

Теперь файл обрел полноценные свойства!

Manifest

Manifest - сравнительно новое изобретение, появилось в Windows XP. Описывает, какую тему оформления следует использовать приложению, требуется ли ему административные привелегии, версию и описание.

Чтобы добавить создайте файл manifest.xml в кодировке UTF8 w/ BOM.

Ничего менять в нем, кроме имени и версии приложения, обычно не требуется. Единственное место, котрое может интересовать - requestedExecutionLevel / level. Оно поддерживает несколько параметров :

  • asInvoker - приложение будет запущено с привелегиями пользователя
  • highestAvailable - приложение будет запущено с максимально доступными привелегиями
  • requireAdministrator- приложение будет запущено с максимально привелегиями администратора, появится окно UAC для подтверждения

Как уже стало обычно, добавьте строку в .cmd:

brcc32 -l0409 Manifest.rc

а в Delphi подключите ресурс

За подробностями по параметрам манифеста следует обращаться в MSDN: Application Manifest

Result

Итак, в итоге мы собрали приложение, отвечающее всем требованиям эстетики и фэн-шуя :

Теперь это выглядет как полноценный коммерческий продукт. Не забывайте обновлять информацию здесь по мере необходимости.

Есть проект Юнит-Тестов, который состоит в одной ProjectGroup с основным проектом приложения.
Пытаюсь изменить иконку ЮнитТестового проекта через опции проекта итог: в уголке формы - левая иконка (от Юнит-Тестового движка походу), на панели задач - моя иконка, а вот в проводнике (куда бы я ЕХЕ не копировал) - нет иконки вообще.

Как мне поменять иконку исполняемого файла в этом случае.

Перевел проект с Delphi 2007 на Delphi 10.3 (создал новый проект в 10.3 потом по очереди перетягивал и рефакторил Юниты старого проекта)

Картинка с другого сайта.

Иконка на панели задач и в заголовках форм есть.

Картинка с другого сайта.

Но исчезла из Эксплорера и в свойствах файла тоже отсутствует.

Все рекомендации из этого поста выполнил - не помогло.

Один странный нюанс:
Сейчас приложение весит 21.3 МБ.
В пустом проекте и пока приложение весило меньше 20 МБ - иконка отображалась корректно.

При смене на дефолтную из студии, в свойствах файла и Эксплорере ничего не меняется.

Смотрел файл ресурсов - там все эти иконки есть.

прицепи как ресурс

Posted via ActualForum NNTP Server 1.5

Картинка с другого сайта.

Дело в том, что файл ресурсов в проекте есть.
И внутри ЕХЕ иконки тоже есть:

Там в качестве иконки была какая-то галочка от CheckBox.
Теперь буду искать откуда она прилетает.

Изменять иконку приложения или окна достаточно просто - для этого у TApplication и TForm предусмотрено свойство Icon. Смена иконки может вестись обычным присвоением свойству Icon нового значения:

При этом происходит не присвоение указателя (как казалось бы), а копирование данных посредством вызова Assign, который производится в методе TForm.SetIcon

Загрузка иконки из ресурса

Загрузка производится типовым вызовом API:

Причем имя в ресурсе желательно писать всегда в верхнем регистре

Все сказанное выше пригодно и для приложения, только в этом случае вместо Form1 выступает Application. Для принудительной перерисовки кнопки приложения в панеле задач можно применить вызов

Пример организации простейшей анимации иконки приложения

При этом естественно предполагается, что в Image1 и Image2 загружены иконки.

Программирую в Delphi не первый год, а уже наверное полтора десятилетия.
Но вот вопрос - не устанавливается иконка. Т.е. взял старый проект, переделал его немного, а позже заметил, что слетела иконка приложения.
Я естественно постарался поставить её стандартными средствами "Project" > "Options" > "Application" > "Load Icon" .
Она там отобразилась - всё вроде нормально, но вот при компиляции всё равно не "вшивается" в приложение.
Как быть? И что это за глюк?
Может какой-то файл как-то почистить редактором кода?
Информация о иконке в каком файле приложения записывается?

Данная информация храниться в файле проекта .res
Подставил из другого проекта - иконка поменялась на иконку из того проекта.
Создал новое приложение, взял от туда .res -файл, подставил в проект, ситуация повторилась. Иконка стандартная от Delphi и не изменяется.
Как всё-таки быть?


зачастую это бывает глюк винды - слишком кеширует иконки файлов и не планирует менять на правильную - зашитую в приложение. Решается (т.е. определяется - действительно ли иконка не та) просмотром свойств файла или копированием в другую папку. И - иконка указана для нужной Build configuration?

@kami, Разобрался, данную информацию хранит в себе файл [имя_проекта].res Но вот теперь второй вопрос - как его создать новый?

он генерируется автоматически на основании данных в dproj. В частности, за иконку отвечает тег из dproj (емнип) Icon_MainIcon. При сборке генерируется файл vrc, потом - res. Кстати - никаких ворнингов нет о duplicated resource?

Если при открытии проекта файл [имя_проекта].res отсутствует, то он будет создан заново автоматически. Просто удалите его и переоткройте проект

@ГерманБорисов, да вот от того и задал вопрос про его создание, так как при компиляции пишет not found такой-то res.

Читайте также: