Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2013, 05:02   #1
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
Злость Ассоциация файлов.

Здравствуйте, помогите пожалуйста не могу сделать что бы jpg bmp и прочие граф. форматы открывались моей программой сделал следующее:

Код:
 
private
       ext:string;    des:string;    exe:string;
    { Private declarations }
  public
    published
     property ExeName : String read exe  write exe;
      property Description : String read des  write des;
       property Extension : String read ext write ext;
    { Public declarations }
  end;

  const HKEY_CURRENT_USER = longWord($80000001);
  const CLASSES_PATH = 'Software\Classes\';

procedure TForm1.Label1Click(Sender: TObject);
var reg:TRegistry;
begin
exe:=application.ExeName;
des:='.jpg';
ext:='.jpg';
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey(CLASSES_PATH + ext,true);
reg.WriteString('', des);  reg.CloseKey;
reg.OpenKey(CLASSES_PATH + des,true);
reg.WriteString('',des);
reg.Openkey('DefaultIcon',true);
reg.WriteString('', exe + ', 1');
reg.CloseKey;
reg.OpenKey(CLASSES_PATH + des+'\Shell\Open',true);
reg.WriteString('','&Open');
reg.OpenKey('Command', true);
reg.WriteString('', '"'+ exe+'"' + ' "%1"');
reg.CloseKey;
reg.Free;
end;
Так вот запись в реестр действительно произвелась, но ... формат jpg так и не открылся, сделал такую же запись с несуществующим форматом - " JMG " и создал такой формат вручную ( текстовый файл с изменённым расщирением ) у него появилась та самая иконка моей программы и по запуску этого файла открывается моя программа, но почему JPG не хочет?
И ещё, буду жудко признателен если подскажите как мне произвести чтение этого файла.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 14.01.2013, 08:12   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

возможно стоит попробовать сменить RootKey на другой..
Кольша вне форума Ответить с цитированием
Старый 14.01.2013, 11:45   #3
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Поменял на HKEY_LOCAL_MACHINE там есть уже JPG ну чтож пишу туда же, всё равно не хочет...
Люди прошу помогите, а то это ужас какой-то.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 14.01.2013, 13:07   #4
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Операционная система?если 7'как попробуй от админа запустить..
Кольша вне форума Ответить с цитированием
Старый 14.01.2013, 14:16   #5
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Я попробовал другой вариант кода, он работает с запуском администратора, в реестре все записи есть и вроде правильные путь к приложению и т.п. Но всё равно не хочет работать вот код который я пишу:
Код:
 procedure RegisterFileType(ExtName:String; AppName:String) ;
 var
    reg:TRegistry;
 begin
   reg := TRegistry.Create;
   try
    reg.RootKey:=HKEY_CLASSES_ROOT;
    reg.OpenKey('.jpg' + ExtName, True) ;
    reg.WriteString('.jpg', ExtName + 'file') ;
    reg.CloseKey;
    reg.CreateKey(ExtName + 'file') ;
    reg.OpenKey(ExtName + 'file\DefaultIcon', True) ;
    reg.WriteString('jpg', AppName + ',0') ;
    reg.CloseKey;
    reg.OpenKey(ExtName + 'file\shell\open\command', True) ;
    reg.WriteString('jpg',AppName+' "%1"') ;
    reg.CloseKey;
   finally
    reg.Free;
   end;

   SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil) ;
 end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
RegisterFileType('jpg','D:\Delphi (написанные)\В разработке\Просмотр изображений - копия\Project1.exe') ;
end;
И всё равно не хочет работать я уже и не знаю как это люди делают.... Данную статью просматривают 130 человек и никто ответить не может...
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 14.01.2013, 14:34   #6
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
unit Komp;
{Avtor Nikolai Ovchnnikov aka kol'sha 
mail:ovchinnikovnikola@mail.ru
vk:http://vk.com/dj_kl
Если кто - то модифицирует , улутшит 
компонент пожалуйста сообщите мне}
interface

uses
 Windows, Registry,ShlObj;

type
  TKomp = class
  private
  protected
  public
procedure Komp_Register(ext, app, icon,iconp: string);
procedure Komp_unRegister(ext, app: string);
  published
  end;
implementation

procedure TKomp.Komp_Register(ext, app, icon,iconp: string);
{ext:=расширение файла(безточки);
app:=приложение которое будет открывать;
icon:=иконка файла(по счету в dll или exe);
iconp:=путь к exe или dll  с иконкой;}
var
  reg: TRegistry;
begin
  reg:=TRegistry.Create;
  with reg do
  begin
    RootKey:=HKEY_CLASSES_ROOT;
    OpenKey('.'+ext,True);
    WriteString('',ext+'file');
    CloseKey;
    CreateKey(ext+'file');
    OpenKey(ext+'file\DefaultIcon',True);
    WriteString('',iconp+','+icon);
    CloseKey;
    OpenKey(ext+'file\shell\open\command',True);
    WriteString('',app+' "%1"');
    CloseKey;
    Free;
  end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);  
end;

procedure TKomp.Komp_unRegister(ext, app: string);
{ext:=расширение файла(безточки);
app:=приложение которое будет открывать;}
var
  reg: TRegistry;
begin
  reg:=TRegistry.Create;
  with reg do
  begin
    RootKey:=HKEY_CLASSES_ROOT;
    OpenKey('.'+ext,True);
    WriteString('',ext+'file');
    CloseKey;
    CreateKey(ext+'file');
    DeleteKey(ext+'file\DefaultIcon');
    CloseKey;
    DeleteKey(ext+'file\shell\open');
    DeleteValue(App+' "%1"');
    CloseKey;
    Free;
   
  end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

end.
Не судите строго..это было год назад...я был такой дибил(^_^)..p.s. по крайней мере с mp3 работало на ура))
Кольша вне форума Ответить с цитированием
Старый 14.01.2013, 17:08   #7
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

не открывается файл в вашей программе потому,что этот код только регистрирует ассоциацию формата файла с вашей программой.а кто будет обрабатывать параметры запуска?в первом параметре и передается путь к открываемому файлу.по этому пути и следует открывать файл.нулевой параметр-полный путь к исполняемому файлу приложения.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.01.2013, 17:13   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

У меня была таже проблема. Решение такое:
Вы зарегистрируйте программу в ключе jpg и bmp(.jpg, .bmp).
Потом добавте такой код в FormCreate:
Код:
if ParamCount>0 then //если запущен ваш jpg или bmp 
begin //то...
FileName:=ParamStr(1); //то заносим в переменую полный путь к нашему файлу. Можете сделать другое. 
end;
В конце остается только поменять в свойствах еxe приложение на своё.
Вот и всё!
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 15.01.2013, 16:24   #9
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

В том то и дело, что приложение не регистрируется с форматом... При запуске JPG запускается не моё приложение.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассоциация файлов с программой Кристинка89 Общие вопросы Delphi 13 04.01.2015 17:40
Ассоциация Файлов digital-stream Мультимедиа в Delphi 3 27.11.2014 23:34
ассоциация файлов Menmo Общие вопросы Delphi 10 10.11.2012 21:35
Ассоциация файлов Renat21 Общие вопросы Delphi 1 04.02.2011 20:35