Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отображение иконки ассоциированного файла [D7, XP]


D@nger ©   (2009-03-27 14:19:00) 

Имеется иконка содержащая два изображения... одно для отображения самого exe файла, а вторая для отображения ассоциированного с приложением файла...
иконку прикрепил к проекту через опции проекта...
в реестре создал ключ DefaultIcon и в нем параметр "По умолчанию" со значением "путь к exe файлу",0 ...
сам exe файл отображается с правильной иконкой а вот ассоциированные файлы отображаются с этой же иконкой ... как указать в реестре что ассоциированные файлы отображать со второго изображения в ico файле? пробовал менять значение на "путь к exe файлу",1 .... но иконка не меняется...


D@nger   (2009-04-09 09:00:00) [1]

Вобщем разобрался я с этим вопросом.. если кому интересно вот мое решение...
Заходим в Delphi в меню Project->Resources (у меня этот пункт есть в D7? у кого то почему то нет. если нет то добавляем ресурс через brcc32.exe) и добавлем необходимую иконку. Если у вас уже добавлена иконка к приложению, то называем добавленный ресурс с буквы которая по алфавиту идет после латинской буквы M (MainIcon), например N1. Теперь остается указать в реестре системы какую иконку отображать на ваш тип файла... приведу готовую процедуру:

procedure REGext; - регистрация расширения в системе
var reg:TRegistry;
    tmp:string;
begin
  reg:=Tregistry.Create;
try
  reg.RootKey:=HKEY_CLASSES_ROOT;
  reg.CreateKey('.tst');
  reg.OpenKey('.tst',true);
  reg.WriteString('','TST.Document');
  reg.CloseKey;
  hide;
  MessageDlg('Файл *.tst успешно зарегистрирован в системе!', mtInformation, [mbOk], 0);
except
  MessageDlg('Ошибка при регистрации расширения'+#13
  +'Возможно у вас не достаточно прав для внесения изменений в реестр.', mtError, [mbOk], 0);
  abort;
end;
 reg.Free;
end;


Для отмены регистрации в системе следующая процедура:


procedure TFsettings.UnREGext;
var reg:TRegistry;
begin
    reg:=Tregistry.Create;
 try
    reg.RootKey:=HKEY_CLASSES_ROOT;
    if reg.KeyExists('.tst') then reg.DeleteKey('.tst');

    Reg.RootKey:=HKEY_CURRENT_USER;
    if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts',true) then  if reg.KeyExists('.tst') then reg.DeleteKey('.tst');      

    if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs',true ) then   if reg.KeyExists('.tst') then reg.DeleteKey('.tst');

    Reg.RootKey:=HKEY_LOCAL_MACHINE;
    if reg.OpenKey('SOFTWARE\Classes',true) then if reg.KeyExists('.tst') then reg.DeleteKey('.tst');
    hide;
    MessageDlg('Регистрация файлов *.TST успешно отменена!', mtInformation, [mbOk], 0);
 except
    MessageDlg('Ошибка при отмене регистрации расширения'+#13
  +'Возможно у вас не достаточно прав для внесения изменений в реестр.', mtError, [mbOk], 0);
  abort;
end;
   reg.Free;
end;


Далее нам нужно указать путь к приложению и какую иконку отображать в експлорере:

procedure CheckPathReg;
var reg:Tregistry;
    f:string;
begin
  reg:=Tregistry.Create;
  try
   reg.RootKey:=HKEY_CLASSES_ROOT;
   if not reg.KeyExists('TST.Document\shell\open\command')then
     reg.CreateKey('TST.Document\shell\open\command');

  reg.OpenKey('TST.Document\shell\open\command',true);
  f:=application.ExeName+' "%1"';
  reg.WriteString('',f);
  reg.CloseKey;

  if not reg.KeyExists('TST.Document\DefaultIcon')then
     reg.CreateKey('TST.Document\DefaultIcon');

  reg.OpenKey('TST.Document\DefaultIcon',true);
  f:=application.ExeName+',1'; {1 - индекс иконки в exe файле}

  reg.WriteString('',f);
  reg.CloseKey;
  except end;
  reg.Free;
end;

Может быть я написал элементарные вещи..но новичкам я думаю может пригодится...


D@nger   (2009-03-27 14:46:00) [2]

чето я напутал... иконки местами поменялись...(( .... как указать в ресурсах если несколько иконок.. что эта иконка для exe файла?


D@nger   (2009-03-27 14:30:00) [3]


> 1 - это индекс отдельной иконки в файле ресурсов

ааа... понял.. т.е. надо вторую иконку прикрепить к проекту и уже указать в реестре 1 ....


clickmaker   (2009-03-27 14:28:00) [4]

> путь к exe файлу",1 .... но иконка не меняется

1 - это индекс отдельнойиконки в файле ресурсов


Наверх

Титульная страница Поиск, карта сайта Написать письмо