Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 850

/ вопрос открыт /

Здравствуйте!
Собираюсь сделать для своего приложения ассоциацию, у меня будет 3 типа файлов, .waw .mp3 .ogg и на каждый своя иконка. Хранить все иконки рядом с приложением, их может удалить\заменить на свои юзер :)
код ассоциации ниже, вопрос вот в чем, как поместить все иконки в приложение, и указать каждому типу файлов следующий код
Application.ExeName+',0' первая иконка.. Application.ExeName+',1'; вторая и т д , или как это все сунуть в отдельную dll библиотеку ? попробовал в лоб создать новую dll библиотеку, в ней создать форму, а на форме разместить 3 image с загруженными иконками... dll компилится, и явно видно что все иконки в ней, т.к. размер dll >1.5 mb но иконок в ней приложение не видит... как можно засунуть в dll ресурсы, чтобы их видело приложение ? за раннее огромное спасибо :)

Приложение:
  1.  
  2. uses Registry, ShlObj;
  3. ...
  4. var Reg: TRegistry;
  5. ...
  6. procedure Associate;
  7. var s:string;
  8. begin
  9.  
  10. Reg.RootKey := HKEY_CLASSES_ROOT;
  11.  
  12. Reg.OpenKey('.devOpenWithProgids', true);
  13. Reg.WriteString('TestApplication.dev', '');
  14.  
  15. Reg.OpenKey('TestApplication.devDefaultIcon', true);
  16. s:=Application.ExeName+',0';
  17. Reg.WriteString('', s);
  18.  
  19. Reg.OpenKey('TestApplication.devShellOpen', true);
  20.  
  21.  
  22. Reg.OpenKey('command', true);
  23. s:='"'+Application.ExeName+'" "%1"';
  24. Reg.WriteString('', s);
  25.  
  26. Reg.Free;
  27.  
  28. SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
  29. end;


BloodVIRUS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: BloodVIRUS (статус: Посетитель)
Вопрос отправлен: 5 марта 2010, 16:59
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, BloodVIRUS!
Чтобы к иконкам можно было обращаться таким образом, они должны быть ресурсами приложения. Создайте res-файл любым доступным способом (ручным написанием RC-файла и его компиляцией brcc.exe, с помошью программ типа Resource Hacker и т.д.) и подключите его к программе строкой {$R icons.res}.

Ответ отправил: Dron (статус: Студент)
Время отправки: 5 марта 2010, 17:15

Ответ #2. Отвечает эксперт: Amidamaru

Здравствуйте, BloodVIRUS!
Добавить ресурсы можно с помощью обычного текстового файла ресурсов.
Создайте файл, например resplus.rc и запишите в нем:

ZICON1 ICON icon1.ico
ZICON2 ICON icon2.ico
ZICON3 ICON icon3.ico
...
как видно в каждой строчке находится описание добавляемого ресурса:
ИМЯ_РЕСУРСА ТИП_РЕСУРСА Имя_Файла
также не стоит забывать, что иконки в ресурсах при компиляции распределяются по алфавиту. Имя "главной" иконки, которая находится в стандартном файле ресурсов - MAINICON
Если добавить иконки с именем по алфавиту "выше" - то эта иконка и станет "главной".
После того как вы создали этот файл (желательно в той же папке что и проект), откройте менеджер проекта и добавьте этот файл в проект или добавьте в код строчку
{$R 'resplus.res' 'resplus.rc'}

Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 5 марта 2010, 17:17


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 5 марта 2010, 19:30; участников в обсуждении: 1.
min@y™

min@y™ (статус: Доктор наук), 5 марта 2010, 19:30 [#1]:

Эх, хотел пример привести, но уже ответили...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 16 ноября 2024, 20:46
Выполнено за 0.03 сек.