открыть файл своей прогой

  • Автор темы Dudee
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

Dudee

Ребятки, помогите плз, буду очень признателен!
Такая ситуация: написал я прогу, которая делает кучу ерунды, а потом (по команде юзера) сохраняет всё что наделала в файл уникального формата.Может (по команде того же юзера) потом этот файл открыть. Меня интересует следующее: как сделать так, чтобы при двойном клике на файл, он открывался этой погой? Получилось присвоить этим файлам иконку проги
Код:
var
Reg : TRegistry;
begin
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey('.tec',true);
Reg.WriteString('','FluorFile');
Reg.CloseKey;
Reg.OpenKey('FluorFile',true);
Reg.WriteString('','FAnalyser');
Reg.OpenKey('DefaultIcon',true);
Reg.WriteString('',ParamStr(0) + ',0');
Reg.CloseKey;
Reg.OpenKey('FluorFileshellopencommand',true);
Reg.WriteString('',ParamStr(0) + '%1');
finally
Reg.Free;
end;
end;
но когда запускаю файл, открывается список всех программ,чтоб я выбрал одну из них. Даже если выбираю свою, то открывается пустое окно моей проги,как еслибы я посто запустил exe'шник :) Подскажите, как можно указать на процедуру Load, которой я окрываю файлы изнутри программы?
 
G

Gisma

ты сначала настрой свою прогу чтоб она умела из командной строки вылавливать имя файла на открытие:)
 
D

Dudee

а как это сделать? :)
можно кусочек кода, если не сложно
 
Z

zubr

Все очень просто. Прога определит путь к файлу, на который кликали с помощью функции ParamStr(1):
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
FileName:string;
begin
If ParamCount>0 then
FileName:=ParamStr(1);//Здесь FileName и есть путь к твоему файлу
end;
 
B

Barmutik

И заодно сразу не забыть что если прога запущена.. то при клике на этом типе файла винда откроект новый инстанс Вашей программы, и если Вам надо что бы открывалось в уже запущенной то надо обрабатывать это дело и передавать имя файла уже запущенной копии программы...
 
D

Dudee

Не знаю почему, но ParamStr(1) = пустой строке :( вот для наглядности:
Код:
procedure TfmMain.FormCreate(Sender: TObject);
var
FileName : String;
i : Integer;
begin
if ParamCount > 0 then
 begin
  FileName := ParamStr(1);
  LoadF(FileName,sg01,sg1,sg2,sgUC,sgSF,chUC,chSF);
 end;
 Caption := ParamStr(1);
end;
после выполнения кода Caption просто исчезает :( в чём может быть причина?
 
D

Dudee

Ещё оказалось: ParamCount = 0!!! Как это возможно? Ведь, как минимум, ParamStr(0) = путь_к_exe'шнику (сам проверял) ничего не понимаю :(
 
B

Barmutik

Полный код в студию .. потому как так советовать можно долго .. должно работать так как посоветовали...
 
Z

zubr

Не знаю почему, но ParamStr(1) = пустой строке
Так наверно ты запускал прогу без параметров. Если запускать программу из файла, то путь к файлу и будет параметром.
Ещё оказалось: ParamCount = 0!!! Как это возможно? Ведь, как минимум, ParamStr(0) = путь_к_exe'шнику (сам проверял) ничего не понимаю
В том то и дело что 0-вой параметр данная функция не засчитывает.
 
D

Dudee

всё клёво работает!!! Спасибо всем! проблема была в том, что путь к пргоге в реестре надо прописывать в двойных кавычках:


Код:
Reg.OpenKey('FluorFile\Shell\Open\Command');
Reg.WriteString('','"' + ParamStr(0) + '"','%1');
 
Z

zubr

Для: Dudee, есть еще одни грабли о которых я забыл указать. Если путь к файлу содержит каталоги с именами содержащими пробелы, например Program Files, то ParamStr(1) выдаст строку до первого пробела, то есть закончится на слове Program, поэтому надо определять ParamCount и складывать строки от ParamStr(1) до ParamStr(ParamCount).
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!