![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отображение иконки ассоциированного файла [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 - это индекс отдельнойиконки в файле ресурсов