Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.24;
Скачать: CL | DM;

Вниз

Отображение иконки ассоциированного файла   Найти похожие ветки 

 
D@nger   (2009-03-27 14:19) [0]

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


 
clickmaker ©   (2009-03-27 14:28) [1]

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

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


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


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

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


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

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


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

Вобщем разобрался я с этим вопросом.. если кому интересно вот мое решение...
Заходим в 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;

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



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

Текущий архив: 2009.05.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1237101209
MultIfleX
2009-03-15 10:13
2009.05.24
Delphi & Win Mobile


2-1239457733
Индеец
2009-04-11 17:48
2009.05.24
RTTI и конструктор класса


15-1237498202
Юрий
2009-03-20 00:30
2009.05.24
С днем рождения ! 20 марта 2009 пятница


15-1237841510
alexander-rsh
2009-03-23 23:51
2009.05.24
Drag&Drop


2-1239122277
Drowsy
2009-04-07 20:37
2009.05.24
Как "передать управление клавиатурой" компоненту типа TPanel?