Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
4-1197823589
MetalFan
2007-12-16 19:46
2009.05.24
ReadFile c Overlapped, ньюансы работы.


3-1221156965
wipr
2008-09-11 22:16
2009.05.24
сортировка данных в XML


2-1238133229
Alexandra
2009-03-27 08:53
2009.05.24
Как создать LargeButton в dxBarManager?


15-1237445511
Дмитрий С
2009-03-19 09:51
2009.05.24
Как узнать атрибуты файла в php


4-1209468741
bon
2008-04-29 15:32
2009.05.24
Terminal Service





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский