C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Иконка на файле, Иконка на файле
Steam-x
  Отправлено: 31.07.2003, 16:40


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Привет Всем!
У меня тут возник маленький вопросик.
Вот его краткое содержание:
Есть толпа самых различных файлов (имется ввиду различное расширение файлов). Если машина девственно чиста, как простыни после ACE и тети Аси, то все файлы отображаются, в графических файловых менеджерах, с иконкой в виде беленького прямоугольника, за исключением файлов которые знает Windows. И вот мы ставим Word — и случилось чудо, иконка преобразилась букву W, ставим winamp и файлы с расширением *.mp3 тоже стали красивыми и их стало из далека видать.
Минуточку внимания прослушайте вопрос!
- Как сделать так чтобы после того как на машине появилась моя программа у файлов с необходимым мне расширением появилась моя иконка. И как сделать так чтобы можно было как в winampe выбирать разные иконки.
Спасибо за внимание!
seg_r
Отправлено: 31.07.2003, 18:00


Дежурный стрелочник

Группа: Участник
Сообщений: 74



Есть такая прекрасная вещь, реестр Винды, там прописываются всякие разные херни и не очень, также там есть и описание типов файлов, создаешь нужный тип или меняешь старый, а с иконками это уже твоя фантазия, пиши прогу, которая будет красиво отображать выбор иконок ну вот так ...
Steam-x
Отправлено: 01.08.2003, 08:41


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (seg_r @ 31/07/2003, 19:02)
Есть такая прекрасная вещь, реестр Винды, там прописываются всякие разные херни и не очень, также там есть и описание типов файлов,

Про существование реестра я знаю, и спасибо за напоминание, но как все это делается практически...
seg_r
Отправлено: 01.08.2003, 09:25


Дежурный стрелочник

Группа: Участник
Сообщений: 74



создай какой-нить тип средствами винды (проводник, типы файлов...)
и проследи как все это в реестре поменялось и написалось...
Георгий
Отправлено: 01.08.2003, 11:42


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



погуляй по FAQ к Windows там и должно быть это написано. приличное FAQ я вроде на 3dnews.ru видел
Eugene
Отправлено: 04.08.2003, 14:15


Не зарегистрирован







В HKEY_CLASSES_ROOT создайте свой раздел (например .txt), измените параметр по умолчанию на txt_file (или что-то вроде этого), теперь создайте раздел txt_file (в HKEY_CLASSES_ROOT), в нем — DefaultIcon и измените параметр по умолчанию на имя файла (.exe, .dll, .ico и т.д.)
Admin
Отправлено: 04.08.2003, 15:47


Владимир

Группа: Администратор
Сообщений: 1190



Article #17867: Creating a file association for my application?

и посмотрите ответ по теме:
http://www.rxlib.ru/forums/index.php?t=251&view=new
Gedeon
Отправлено: 05.08.2003, 17:47


Ветеран

Группа: Модератор
Сообщений: 1742



Вопрос: Как программно зарегистрировать собственное расширение для файлов в WINDOWS?

Ответ :

code:
--------------------------------------------------------------------------------

TRegistry *Reg;
AnsiString asFileName;
Reg = NULL;

try
{
Reg = new TRegistry;
Reg->RootKey = HKEY_CLASSES_ROOT;
Reg->OpenKey("\\.vdv", true);
Reg->WriteString("", "MyProg");
Reg->CloseKey();
Reg->OpenKey("\\MyProg", true);
Reg->WriteString("", "My document");
Reg->CloseKey();
Reg->OpenKey("\\MyProg\\Shell\\Open\\Command", true);
Reg->WriteString("", ParamStr(0) + " \"%1\"");
Reg->CloseKey();
Reg->OpenKey("\\MyProg\\DefaultIcon", true);
Reg->WriteString("", ParamStr(0) + ", 1");
Reg->CloseKey();
}
__finally
{
if (Reg != NULL)
{
delete Reg;
}
}

if (ParamCount> 0)
{
asFileName = ParamStr(1);
if (FileExists(asFileName))
{
Memo1->Lines->LoadFromFile(asFileName);
}
else
{
ShowMessage(asFileName + " не существует");
}
}



--------------------------------------------------------------------------------


Этот пример срегистрирует расширение *.vdv
И при клике на файл с таким расширением загружает текст из него в
Memo1.




Reg->OpenKey("\\MyProg\\DefaultIcon", true);

Последний параметр имеет не булевый тип, а целочисленный.
Определяет номер иконки из .exe.
И если, например, будет стоять 2, то иконка файла будет показана вторая.
Я так делал для возможности выбора оной из множества.


--------------------------------------------------------------------------------
Steam-x
  Отправлено: 14.08.2003, 09:23


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Так, с иконкой на файле разобрался, но теперь возникла другая проблема — основная иконка на ехе-нике берется из рез-файла и она первая по списку, из 3-х возможных, а мне необходимо поставить третью. Причем, когда я в проекте подгружаю иконку, то на форме отображается необходимая мне иконка, а на панели задач Виндов и в файл-менеджерах первая из рез-файла.
Вопрос: Как сделать так, чтобы на ехе-нике висела нужная мне иконка, и можно было бы выбрать из рез-файла любую иконку?
Фух! Очень запутанно, но я надеюсь идея понятна.
Steam-x
  Отправлено: 21.08.2003, 09:27


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Ау!
Обратите внимание на наше восклицание!(перефразирую песню)
Как вытянуть нужную иконку из рез-файла, если в этом файле несколько иконок?????
Георгий
Отправлено: 21.08.2003, 20:23


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Эх... Никак! В M$ кто-то решил, что показывать надо именно первую картинку — вот её и показывают... Хотя, возможно, это в будущем исправят...
Steam-x
Отправлено: 26.08.2003, 20:06


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Тогда, как это делается в ВИНАМПЕ? Там ведь можно выбирать какую иконку поставить на файл, а какую на .EXE
Георгий
Отправлено: 26.08.2003, 20:43


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



если ты об иконке на *.mp3, то это иконка не файла программы, а ассоциация не исполняемого файла — там же, где в реестре указывается реакция на start <имя файла> и указана иконка.

а у WinAmp.exe иконка в TotalCmd не меняется... — только что проверил.

Отредактировано Георгий — 26/08/2003, 21:49
Steam-x
Отправлено: 27.08.2003, 19:58


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Так я об этом и говорю.
У меня с моей программой связано 2 типа файлов. Так вот! Иконки на типах файлов те что надо, а на самом EXE-нике висит иконка первого типа файлов, а не та что нужно. Хотя необходимая иконка присутствует в рес-файле.

Вернуться в Вопросы программирования в C++Builder