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

Тема в разделе "Delphi - Система", создана пользователем Dudee, 24 янв 2006.

Статус темы:
Закрыта.
  1. Dudee

    Dudee Гость

    Ребятки, помогите плз, буду очень признателен!
    Такая ситуация: написал я прогу, которая делает кучу ерунды, а потом (по команде юзера) сохраняет всё что наделала в файл уникального формата.Может (по команде того же юзера) потом этот файл открыть. Меня интересует следующее: как сделать так, чтобы при двойном клике на файл, он открывался этой погой? Получилось присвоить этим файлам иконку проги
    Код (Text):
    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, которой я окрываю файлы изнутри программы?
     
  2. Gisma

    Gisma Гость

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

    Dudee Гость

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

    zubr Гость

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

    Barmutik Гость

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

    Dudee Гость

    Не знаю почему, но ParamStr(1) = пустой строке :( вот для наглядности:
    Код (Text):
    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 просто исчезает :( в чём может быть причина?
     
  7. Dudee

    Dudee Гость

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

    Barmutik Гость

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

    zubr Гость

    Так наверно ты запускал прогу без параметров. Если запускать программу из файла, то путь к файлу и будет параметром.
    В том то и дело что 0-вой параметр данная функция не засчитывает.
     
  10. Dudee

    Dudee Гость

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


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

    zubr Гость

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

Поделиться этой страницей