Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

Dll как хранилище иконок   Найти похожие ветки 

 
Jioniro   (2005-09-27 15:06) [0]

Привет всем, такая проблема!
Есть эдемент управления при нажатии на который необходимо заменить одну иконку (на этом элементе управления) на другую. Таких элементов много.
Мне нужно хранилище этих иконок.
Подскажите какой компонент использовать как хранилище или может быть dll. Если есть идеи как использовать dll как хранилище то, пожплуйста, с примером, потому что с dll я никогда не работал.


 
Digitman ©   (2005-09-27 15:30) [1]

а почему именно dll возникла на горизонте ?

имей объект TImageList - и вуаля ! Просто, наглядно. эффективно, со вкусом ..

или где ?


 
y-soft ©   (2005-09-27 15:30) [2]

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);


Показан только общий алгоритм, в реальном коде добавятся по крайней мере проверки на успешность вызова функций...


 
y-soft ©   (2005-09-27 15:36) [3]

>Digitman ©   (27.09.05 15:30) [1]

К сожалению, TImageList написан так, что в DFM он не схраняет 32-битные иконки с прозрачностью должным образом, поэтому приходится грузить при инициализации из ресурсов (ну и немного колдовать с WinAPI, конечно) :)


 
OldNaum ©   (2005-09-27 15:51) [4]

сразу вопрос есть ) есть такая штука - называется MBBuilder (визуальная среда проектирования / разработки прикладного ПО для MapInfo на MapBasic"e) - она позволяет использовать пользовательские иконки на тулбарах в проектируемом приложении.

в качестве хранилища иконок она как раз использует DLL. подскажите как можно программно заменить / добавить / удалить определенную иконку из ресурсов DLL, дабы автоматизировать сей процесс, а то с ResHacker"ом / eXeScope запаривает сидеть )


 
rOOse ©   (2005-09-27 15:59) [5]


>  [4] OldNaum ©   (27.09.05 15:51)


> а то с ResHacker"ом / eXeScope запаривает сидеть )

пользуйся Restorator"ом


 
y-soft ©   (2005-09-27 16:01) [6]

>OldNaum ©   (27.09.05 15:51) [4]

подскажите как можно программно заменить / добавить / удалить определенную иконку из ресурсов DLL

Разве что таким же путем, как это делает ResHacker - парсить ресурсы в DLL на низком уровне и затем программно создавать новые и формировать секцию ресурсов в DLL заново :(


 
OldNaum ©   (2005-09-28 04:56) [7]

кхе )

rOOse ©   (27.09.05 15:59) [5]
да ресторатор тоже самое, господи ) тут надо подвигаться все-таки к автоматизации, ну их, эти редакторы (

y-soft ©   (27.09.05 16:01) [6]
может быть есть инфа / примеры? чтение ресурсов часто вижу, а вот далее... Мастер, неужели никто ни сталкивался с записью и прочими операциями?


 
Джо ©   (2005-09-28 05:04) [8]


> [7] OldNaum ©   (28.09.05 04:56)

Наверное, копать нужно в сторону BeginUpdateResource/UpdateResource/EndUpdateResource.


 
y-soft ©   (2005-09-28 07:23) [9]

>Джо ©   (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++ в инете вообще много...


 
y-soft ©   (2005-09-28 07:30) [10]

>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


 
OldNaum ©   (2005-09-28 11:37) [11]

y-soft я тя расцелую при встрече ))) спасибо огромное!


 
y-soft ©   (2005-09-28 11:54) [12]

>OldNaum ©   (28.09.05 11:37) [11]

Да не за что, просто я сам сталкивался с похожей проблемой и провел некоторые изыскания... А целует меня уже внучка :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
1-1127307206
DelphiLexx
2005-09-21 16:53
2005.10.16
Избежать мерцания при перемещении


14-1127748542
Карелин Артем
2005-09-26 19:29
2005.10.16
Вот и база жителей РФ!


14-1127395657
Kot Andrei
2005-09-22 17:27
2005.10.16
Соломон и Руссинович


1-1127421199
Евгений Р.
2005-09-23 00:33
2005.10.16
Сумма прописью на английском


5-1101362935
diabolik_krsk
2004-11-25 09:08
2005.10.16
Помогите с наследником DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский