Delphi не меняется иконка приложения
а с этого места можно подробней? где можно почитать о файле ресурсов, как с ним работать, и тому подобное?
Можно так:C билдером поставляется ImageEditor (доступен, например, через меню Tools). Запускаешь его, создаёшь в нём ресурс MAINICON, рисуешь свою иконку, сохраняешь res-файл на диск.
Или возьми от примеров res-файл и отредактируй его в том же ImageEditore. Originally posted by fellow
Можно так:
C билдером поставляется ImageEditor (доступен, например, через меню Tools). Запускаешь его, создаёшь в нём ресурс MAINICON, рисуешь свою иконку, сохраняешь res-файл на диск.
Или возьми от примеров res-файл и отредактируй его в том же ImageEditore. Originally posted by enola
спасибо помогло :)
только вот качество иконки оставляет желать лучшего! Может можно как-нить сделать лучше?
Originally posted by enolaМожет можно как-нить сделать лучше?
Сначала надо найти качественную иконку, можно даже в стиле XP - с альфа-каналом. Потом удалить нахрен иконку из res-файла. Борланд так и не научился работать с иконками в стиле XP.
Пишется rc-файл следующего содержания:
Сохраняется, скажем, как MyAlpha.rc. Потом в командной строке дается:
В результате создается файл ресурса MyAlpha.res, который и надо подключить к проекту.
Originally posted by Freeman
Сначала надо найти качественную иконку, можно даже в стиле XP - с альфа-каналом. Потом удалить нахрен иконку из res-файла. Борланд так и не научился работать с иконками в стиле XP.
Пишется rc-файл следующего содержания:
Сохраняется, скажем, как MyAlpha.rc. Потом в командной строке дается:
В результате создается файл ресурса MyAlpha.res, который и надо подключить к проекту.
получилось и качество хорошее, только вот когда я компилировал проект он у меня ругнулся на второй res файл т.е. res файл проекта, я его отключил и все нормально, но вот интересно в том res файле ничего нужного не было?
Originally posted by enolaон у меня ругнулся на второй res файл т.е. res файл проекта
Как конкретно ругнулся?
Если файл ресурсов создан автоматически Билдером, в нем, как правило, хранится иконка приложения и сведения о версии, если включено на соответствующей вкладке свойств проекта.
Кстати, еще раз о качестве. Если не используется более 16 цветов и альфа-каналы, можно цивилизованным способом загрузить иконку приложения. Если ты вручную рисовал, наверняка только в одном размере. Для нормального вида же надо иметь, как минимум, 16x16 и 32x32.
Originally posted by Freeman
Как конкретно ругнулся?
Если файл ресурсов создан автоматически Билдером, в нем, как правило, хранится иконка приложения и сведения о версии, если включено на соответствующей вкладке свойств проекта.
Кстати, еще раз о качестве. Если не используется более 16 цветов и альфа-каналы, можно цивилизованным способом загрузить иконку приложения. Если ты вручную рисовал, наверняка только в одном размере. Для нормального вида же надо иметь, как минимум, 16x16 и 32x32.
Да VersionInfo у меня включен, и икону рисовал как положено в нескольких размерах не только 16x16, 32x32, 128x128, и т.д. что можно сделать?
вот чего я смог сделать:
1. как Freeman советовал, создал файл rc с указанием на иконку с альфа каналами, потом файликом brcc32 создал res файл, потом Resource Workshop 4.5 добавил VersionInfo, подключил res файл к проекту, скомпилировал его и все получилось, но:
1. Автоинкремент версии файла не работает!
2. Каждый раз при смене версий придется делать эту не очень интересную последовательность действий!
меня вот это бы спасло: Как можно иконку в консольном приложении стандартно добавить?
можно цивилизованным способом загрузить иконку приложенияимеешь ввиду через Project->Options->Aplication
так там кнопка Load Icon. не активна!
Программирую в Delphi не первый год, а уже наверное полтора десятилетия.
Но вот вопрос - не устанавливается иконка. Т.е. взял старый проект, переделал его немного, а позже заметил, что слетела иконка приложения.
Я естественно постарался поставить её стандартными средствами "Project" > "Options" > "Application" > "Load Icon" .
Она там отобразилась - всё вроде нормально, но вот при компиляции всё равно не "вшивается" в приложение.
Как быть? И что это за глюк?
Может какой-то файл как-то почистить редактором кода?
Информация о иконке в каком файле приложения записывается?
Данная информация храниться в файле проекта .res
Подставил из другого проекта - иконка поменялась на иконку из того проекта.
Создал новое приложение, взял от туда .res -файл, подставил в проект, ситуация повторилась. Иконка стандартная от Delphi и не изменяется.
Как всё-таки быть?
2,623 5 5 золотых знаков 33 33 серебряных знака 65 65 бронзовых знаков
зачастую это бывает глюк винды - слишком кеширует иконки файлов и не планирует менять на правильную - зашитую в приложение. Решается (т.е. определяется - действительно ли иконка не та) просмотром свойств файла или копированием в другую папку. И - иконка указана для нужной Build configuration?
@kami, Разобрался, данную информацию хранит в себе файл [имя_проекта].res Но вот теперь второй вопрос - как его создать новый?
он генерируется автоматически на основании данных в dproj. В частности, за иконку отвечает тег из dproj (емнип) Icon_MainIcon. При сборке генерируется файл vrc, потом - res. Кстати - никаких ворнингов нет о duplicated resource?
Если при открытии проекта файл [имя_проекта].res отсутствует, то он будет создан заново автоматически. Просто удалите его и переоткройте проект
@ГерманБорисов, да вот от того и задал вопрос про его создание, так как при компиляции пишет not found такой-то res.
Начинаем украшать своё окно. Стандартная иконка вас не устраивает, так как, во-первых, она выглядит убого, а во-вторых, увидев её, все сразу поймут, что вы начинающий программист. Каждый компилятор: Delphi, Builder, Visual C++ привносят свои иконки. По ним можно догадаться где было сделано приложение. Это, своего рода реклама компилятора. Visual C++ содержит встроенное средство создания редактирования иконок. Кроме того, вы можете просто скопировать в папку с проектом файл с расширением **.ico. Это и будет наша иконка.
Обычно каждая фирма имеет свою фирменную иконку, по которой узнают её продукт. Действительно. Иконки таких программ, как Adobe Photoshop, Microsoft Word, Borland Delphi не спутаешь ни с какими другими.
Иконки, курсоры, картинки - это ресурсы приложения. Ссылки на них находятся в файле с расширением **.rc. Это некомпилированный файл ресурсов, в котором вы будете описывать всё, что не входит в стандартное окно.
В файле ресурсов обычно содержатся подробные описания диалоговых окон, элементов управления, меню и др. Это своего рода разметка - что, где и с какими координатами находится. У нас пока никаких ресурсов нет. Что ж, сейчас они появятся!
Выберите в меню пункт Project->Add Resource или нажмите Ctrl+R. У вас появится окно добавления ресурса.
Через него можно добавлять картинки, курсоры, диалоговые окна, меню, панели управления и др. Выберите строчку Icon и нажмите кнопку New, если хотите воспользоваться редактором рисования, или кнопку Import, если хотите вставить готовый файл. В любом случае, она откроется в редакторе. А в папочке Resourse Files у вас появился файл с расширением rc и файл иконки. Если щёлкнуть по файлу RC, то выпадет всё, что в него входит. В данном случае, иконка. Компилятор её назвал IDI_ICON1. IDI - (все имена начинаются с ID - Identifer). Вы можете изменить её название, щёлкнув правой кнопкой по строке с именем и выбрав в контекстном меню поле "Properties". У вас откроется в левой нижней части новое окно, если вы работаете в 7-й версии или появится окно Properties если это версия 6. В строке ID
вам никто не запрещает поменять имя. Смените безликое IDI_ICON1 на IDI_MYICON, чтобы точно знать, что это ВАША иконка. Запустите проект кнопкой F5.
Что? Вместо красивой иконки дурацкий флажок? Кончено. Окно-то не знает, что вы добавили иконку в проект. Надо ему об этом сказать.
Перво-наперво, познакомим компилятор с нашей иконкой. Объявим идентфиикатор szIconName, который будет содержать имя иконки в редакторе ресурсов (IDI_MYICON). Переменную szIconName лучше всего объявить под объявлением имени программы, в самом начале:
char szProgName[]="Имя программы"; //эта строка уже была
char szIconName[]="IDI_MYICON"; //а эту мы добавим
Когда мы заполняли структуру WNDCLASS, мы совершенно чётко сказали ей, что иконок у нас нет, не было и не будет, приравняв поле w.hIcon=0. Найдите строку:
w.hIcon=0;
w.hIcon=LoadIcon(hInstance, szIconName);
hInstance - идентификатор текущего приложения.
IDI_MYICON ICON "serdechko.ico"
У файлов *.rc свой язык. В этой строке мы пишем сначала идентификатор IDI_MYICON, потом говорим, что это иконка ICON. Потом идёт имя файла, который по умолчанию в той же папке.
Выберите в меню Build->Rebuild All или Build->Build Solution.
Теперь даже в Проводнике, ваша программа будет гордо носить иконку, данную вами.
Предупреждение! Иногда компилятор упорно не хочет включать новую иконку и выдаёт программу с флажками вместо иконок. Какие от этого есть рецепты? Создавать файл ресурсов самому. Для этого примера он приведён полностью и если вы заменит созданный автоматически файл тем, что привёл я, поменяв имя файла на своё, то хуже от этого никому не будет.
Конечно такие сложности будут только в API. В MFC и VCL (тем более!) всё в значительной степени автоматизировано. Достаточно нескольких щелчков мышью.
Кроме пользовательских иконок, можно вывести стандартные иконки, если ваше окно подходит под их назначение:
IDI_APPLICATION - иконка приложения по умолчанию
IDI_ASTERISK - символ i (информационные приложения)
IDI_EXCLAMATION - восклицательный знак (предупреждение)
IDI_HAND - знак STOP (ошибка)
IDI_QUESTION - вопросительный знак
IDI_WINLOGO (NULL) - флажок
Потренеруйтесь, меняя иконки, например:
w.hIcon=LoadIcon(hInstance, IDI_APPLICATION);
Я часто буду использовать в своих примерах IDI_APPLICATION, так как её показать уже не стыдно.
сори, создам новую тему. В предыдущей стоит галка "вопрос решен" и народ туда не заглядывает.
есть в моем екзешнике и формы, и все остальное. Сунул иконку для приложения в Project-Options-Application.
но еще в приложении используется 2 иконки (в систрей они подставляются). Так вот после компиляции иконка приложения (в проводнике) видна как одна из ресурса, а не та, которую я вставил в Project-Options.
это как и почему так может быть?
Добавлено 20.04.07, 13:30
Компонент может какой MAINICON переписывает. Попробуй вручную поставить, или удали exe файл, а потом компилируй. Может иправится.
Добавлено 20.04.07, 13:30
не, компоненты все стандартные, ничего никуда не переписывают
ехе-файл удалил, скомпилил опять - иконка опять у него не та.
вщм, обрисую ситуацию по-новому:
есть мой прожект. В нем используется ресурс с 2-мя иконками (для того, чтобы в трее их менять). Но у приложения в св-вах стоит другая иконка (Project-Options-Application. )
И вот если скомпилить прожку с тем "дополнительным" ресурсом (с 2-мя иконками), то иконка откомпиленного приложения становится одной из той, которая в ресурсе, а не той, которую я задал в св-вах проекта
но если ресурс отрубить от моего приложения, то иконка сразу становится правильной, т.е. заданной в св-вах приложения
Ты ресурс с двумя иконками ка делал и где?
В секции иконок какие имена у двух иконк?
При каком ВИДЕ иконка у приложения не та ( Какая ориентация стоит в проводнике ВИД -> . ) ?
Red16 ICON D:\Programming\Borland\Delphi7\Projects\KBK\Imgs\StateRed.ico Green16 ICON D:\Programming\Borland\Delphi7\Projects\KBK\Imgs\StateGreen.icoкомпилил его через brcc32.exe
при ВСЕХ видах в проводниках и в тотал командире иконка рисуется вторая из ресурса - т.е. StateGreen.ico под именем Green16
при этом всём в св-вах проекта я указал вообще другую иконку (с именем CheckBackups.ico, если это что-то подскажет )
если ресурс отключить из приложения, иконка становится правильной (CheckBackups.ico). Если ресурс подключить обратно, то опять рисуется StateGreen.ico
вот тестовый проектик.В нем одна единственная пустая форма. В файл Project1.drp добавлен мой ресурс с 2-мя иконками. В св-ва прожекта задается совсем другая иконка (CheckBackups.ico)
при запуске в левом верхнем углу формы и даже в панели задач иконка рисуется правильная, а у ЕХЕшника иконка берется почему-то из ресурса.
Иконкой является первый ресурс ICON в ресурсной секции исполняемого файла. Таким по замыслу Borland должен быть ресурс с названием MAINICON.
Но в Дельфийских экзешниках иконки получаются отсортированными по алфавиту (то ли так надо, то ли так устроен борландовский редактор ресурсов. не разбирался). В итоге, если название иконки по алфавиту должно стоять раньше, то она и будет использоваться в качестве основной.
Так что, чтобы устранить проблему, нужно просто переименовать дополнительные иконки, линкующиеся из ресурсов и сделать полный билд проекта.
Давай разберёмся для начало что есть что.
А теперь как всё это вылечить я немного повторю и ещё раз озвучю сказанное Smike.
У тебя в готовом проекте имена иконок естественно сортируются по алфавиту (посмотрр скрин).
Самый простой способ это в твой подцепляемый ресурс добавить ещё однйу иконку с именем "ААА".
Или любым редактором ресурса отредактируй Project1.res, и измени имя иконки MAINICON на "AAA" или "000".
Читайте также: