![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Dll как хранилище иконок
Jioniro © (2005-09-27 15:06:00)Привет всем, такая проблема!
Есть эдемент управления при нажатии на который необходимо заменить одну иконку (на этом элементе управления) на другую. Таких элементов много.
Мне нужно хранилище этих иконок.
Подскажите какой компонент использовать как хранилище или может быть dll. Если есть идеи как использовать dll как хранилище то, пожплуйста, с примером, потому что с dll я никогда не работал.
y-soft (2005-09-28 11:54:00) [1]>OldNaum © (28.09.05 11:37) [11]
Да не за что, просто я сам сталкивался с похожей проблемой и провел некоторые изыскания... А целует меня уже внучка :)
OldNaum (2005-09-28 11:37:00) [2]y-soft я тя расцелую при встрече ))) спасибо огромное!
y-soft (2005-09-28 07:30:00) [3]>OldNaum © (28.09.05 04:56) [7]
Исходники редактора ресурсов, написанного Colin Wilson на Delphi:
http://www.btinternet.com/~wilsoncpw/xn_resourceeditor_source.zip
Код всех используемых компонентов и библиотек находится на
http://www.wilsonc.demon.co.uk/delphi.htm
y-soft (2005-09-28 07:23:00) [4]>Джо © (28.09.05 05:04) [8]
Наверное, копать нужно в сторону BeginUpdateResource/UpdateResource/EndUpdateResource
Поддерживается только в NT-системах или в Win9X с установленным Microsoft Layer for Unicode on Windows 95/98/Me Systems
В MSDN есть пример использования, только вот эти функции сами ресурсы не строят, а только позволяют уменьшить геморрой по переформатированию PE...
Осложняет дело то, что в MSDN информация по внутренней структуре разных видов ресурсов разрознена и содержит много ошибок :(
>OldNaum © (28.09.05 04:56) [7]
может быть есть инфа / примеры? чтение ресурсов часто вижу, а вот далее...
Посмотрите здесь утилиты, написанные на Delphi:
http://www.wilsonc.demon.co.uk/files/d9/resourceutils/resourceutils.zip
Вроде бы что-то было и в JEDI Code Library
А примеров на C и C++ в инете вообще много...
Джо (2005-09-28 05:04:00) [5]
> [7] OldNaum © (28.09.05 04:56)
Наверное, копать нужно в сторону BeginUpdateResource/UpdateResource/EndUpdateResource.
OldNaum (2005-09-28 04:56:00) [6]кхе )
rOOse © (27.09.05 15:59) [5]
да ресторатор тоже самое, господи ) тут надо подвигаться все-таки к автоматизации, ну их, эти редакторы (
y-soft © (27.09.05 16:01) [6]
может быть есть инфа / примеры? чтение ресурсов часто вижу, а вот далее... Мастер, неужели никто ни сталкивался с записью и прочими операциями?
y-soft (2005-09-27 16:01:00) [7]>OldNaum © (27.09.05 15:51) [4]
подскажите как можно программно заменить / добавить / удалить определенную иконку из ресурсов DLL
Разве что таким же путем, как это делает ResHacker - парсить ресурсы в DLL на низком уровне и затем программно создавать новые и формировать секцию ресурсов в DLL заново :(
rOOse (2005-09-27 15:59:00) [8]
> [4] OldNaum © (27.09.05 15:51)
> а то с ResHacker'ом / eXeScope запаривает сидеть )
пользуйся Restorator'ом
OldNaum (2005-09-27 15:51:00) [9]сразу вопрос есть ) есть такая штука - называется MBBuilder (визуальная среда проектирования / разработки прикладного ПО для MapInfo на MapBasic'e) - она позволяет использовать пользовательские иконки на тулбарах в проектируемом приложении.
в качестве хранилища иконок она как раз использует DLL. подскажите как можно программно заменить / добавить / удалить определенную иконку из ресурсов DLL, дабы автоматизировать сей процесс, а то с ResHacker'ом / eXeScope запаривает сидеть )
y-soft (2005-09-27 15:36:00) [10]>Digitman © (27.09.05 15:30) [1]
К сожалению, TImageList написан так, что в DFM он не схраняет 32-битные иконки с прозрачностью должным образом, поэтому приходится грузить при инициализации из ресурсов (ну и немного колдовать с WinAPI, конечно) :)
Digitman (2005-09-27 15:30:00) [11]а почему именно dll возникла на горизонте ?
имей объект TImageList - и вуаля ! Просто, наглядно. эффективно, со вкусом ..
или где ?
y-soft (2005-09-27 15:30:00) [12]1. Создаете ресурсы из своих иконок
2. Нажимаете в Delphi File\New и выбираете в появившемя окне DLL
3. Прямо в открывшемся файле DPR в любом месте вставляете строчку
{$R Путь_к_созданному_Вами_файлу_ресурсов.res}
4. Компилируете и сохраняете проект
Далее, чтобы использовать можете поступать со своей DLL следующим образом:
1.Загружаете ее
var
DllHandle : HMODULE;
DllHandle := LoadLibraryEx(Путь_к_Вашей_DLL, 0, LOAD_LIBRARY_AS_DATAFILE);
2. Загружаете свои иконки
var
Ic : TIcon;
Ic := TIcon.Create;
Ic.Handle := LoadIcon(DllHandle, Наименоване_ресурса);
Иконку можете загрузить в какой-нибудь ImageList или использовать непосредственно...
3. Когда иконки больше не нужны, освобождаете занятые ими ресурсы
Ic.Free;
4. По окончанию работы выгрузите DLL
FreeLibrary(DllHandle);
Показан только общий алгоритм, в реальном коде добавятся по крайней мере проверки на успешность вызова функций...