Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.05.2014, 15:40
RobinStone RobinStone вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 27
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Привязка файла к программе

Многоуважаемые программисты, в очередной раз взываю к Вашей милости.
Помогите в таком вопросе : написал я программу.., она что то вроде хитрого текстового редактора, с разными наворотами. В ней создаются текстовые файлы, с расширением, к примеру, .bom, как так сотворить, что бы при клике на этот .bom открывалась моя программа + кликнутый .bom,
Подскажите куда копать, если что...
Заранее поклон в пол ...

Прошу прощения, а тут есть кто нибудь?

Последний раз редактировалось RobinStone, 26.05.2014 в 16:18.
Ответить с цитированием
  #2  
Старый 26.05.2014, 18:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
procedure TForm1.RegisterFileType(ext: string; FileName: string);
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('',FileName+',0');
    CloseKey;
    OpenKey(ext+'file\shell\open\command',True);
    WriteString('',FileName+' "%1"');
    CloseKey;
    Free;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  RegisterFileType('mp3', Application.ExeName);
end;
пример из интернета, ибо в своих исходниках было лень гуглить)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
RobinStone (26.05.2014)
  #3  
Старый 26.05.2014, 21:25
RobinStone RobinStone вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 27
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию пояснение

Хотелось бы что б немного объяснили что куда и откуда, хотя это наверное сам должен, как тут пишут - ручками-ручками...

Последний раз редактировалось M.A.D.M.A.N., 26.05.2014 в 22:00.
Ответить с цитированием
  #4  
Старый 27.05.2014, 00:43
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от RobinStone
Хотелось бы что б немного объяснили что куда и откуда...
Да на самом деле всё довольно прозаично - после регистрации в системе вашего расширения и ассоциации его со сборкой происходит следующее - если в проводнике произведён клик по данному файлу, то проверяется где расположена обрабатывающая его прога и ей посылается приказ запуститься, а в параметре ParamStr передаётся имя требуемого для обработки файла. На практике это выглядит так - при первом запуске программы в FormCreate необходимо записать в реестр подобное
Код:
...
var
 r: Tregistry;
begin
 r:= TRegistry.Create;
 with r do
 begin
 RootKey:= HKEY_CLASSES_ROOT;
 OpenKey('.bom', true);
 WriteString('', 'Мой текстовик');
 CloseKey;

 CreateKey('Мой текстовик');
 OpenKey('Мой текстовик\DefaultIcon', true);
 WriteString('', Application.ExeName + ', 0');
 CloseKey;

 OpenKey('Мой текстовик\shell\open\command', true);
 WriteString('', Application.ExeName + ' %1');
 CloseKey;
 Free;
 end;
...
т.е. регистрируем своё расширение и меняем у него стандартную иконку на другую, в данном случае на значок вашего приложения. Затем следует такое в коде прописать
Код:
//  RestoreLongName восстанавливает "короткое" имя файла
// Это нужно для запуска при получении параметров от проводника
// Прога конечно, запустится и так, но с мессагой типа "Файл не найден"
Function RestoreLongName(fn: string): string;
  function LookupLongName(const filename: string): string;
   var
   sr: TSearchRec;
  begin
  if FindFirst(filename, faAnyFile, sr) = 0 then
   Result:= sr.Name
  else
   Result:= ExtractFileName(filename);
   SysUtils.FindClose(sr);
  end;
   function GetNextFN: string;
   var
   i: integer;
  begin
   Result:= '';
   if Pos('\\', fn) = 1 then
  begin
   Result:= '\\';
   fn:= Copy(fn, 3, length(fn)-2);
   i:= Pos('\', fn);
   if i <> 0 then
   begin
   Result:= Result + Copy(fn, 1, i);
   fn:= Copy(fn, i + 1, length(fn)-i);
   end;
  end;
   i:= Pos('\', fn);
   if i <> 0 then
   begin
   Result:= Result + Copy(fn, 1, i-1);
   fn:= Copy(fn, i + 1, length(fn)-i);
   end else
   begin
   Result:= Result + fn;
   fn:= '';
   end;
  end;
 Var
 name: string;
Begin
  fn:= ExpandFileName(fn);
  Result:= GetNextFN;
  Repeat
  name:= GetNextFN;
  Result:= Result + '\' + LookupLongName(Result + '\' + name);
  Until length(fn)= 0;
End;
в коментах есть описание, пропускаем этот шаг
Код:
procedure TFPlay.FormShow(Sender: TObject);
 var
  s: string;
  i: integer;
 begin

// Получены параметры от проводника
 if ParamCount > 0 then
 begin
 s:= ParamStr(1); // Имя файла для открытия

// Если в имени файла есть пробелы, то шелл передает
// его не целиком, а "кусочками" (особенность системы :)
// Надо всё это соединить, не забывая про пробелы
 for i:= 2 to ParamCount do
 s:= s + ' ' + ParamStr(i);
 s:=RestoreLongName(s);
 end;
end;
теперь в s лежит имя файла переданного для открытия
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
RobinStone (27.05.2014)
  #5  
Старый 27.05.2014, 10:09
RobinStone RobinStone вне форума
Прохожий
 
Регистрация: 02.06.2013
Сообщения: 27
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию благодарность

просто спасибо, что Вы есть...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter