| 
| 
 | Вопрос # 4 788/ вопрос открыт / | 
 |  Здравствуйте, эксперты!
 Занялся связыванием файла по расширению с файлом программы.
 Сделал ассоциацию файлов с программой (в приложении №1). Вроде бы все работает нормально.
 
 В главной форме программы прописал загрузку нажатого файла (в приложении №2). Все хорошо работает, если в имени файла не встречаются пробелы.
 Например, файл с именем "d:\temp\112 2 .32.grop"
 параметр ParamStr(1) передает как "FileName=D:\temp\112", т.е. только до первого пробела.
 
 В чем ошибаюсь?
 Спасибо
 Приложение:Переключить в обычный режим  {{code}} procedure TAssociatorForm.AssociateFile(ext: string; ExeName, ProgramName, IconName:
string);var s: string;var Reg: TRegistry;begin         Reg.OpenKey(ext, True);    Reg.WriteString('', ProgramName);     Reg.OpenKey('\' + ProgramName + '\DefaultIcon\', True);     s := IconName + ',0';    Reg.WriteString('', s);     Reg.OpenKey('\' + ProgramName + '\Shell\Open\', True);      Reg.OpenKey('command\', True);    Reg.WriteString('', ExeName + ' %1');     Reg.Free;     SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);end;{{/code}}     {{code}}  procedure TFormManager.DblClickLoadFile;var FileName: string;var LogIni: TMemIniFile;begin   if ParamCount > 0 then  begin    FileName := ParamStr(1);     ///    LogIni := TMemIniFile.Create('LogDblClickLoadFile.ini');    LogIni.WriteString('DblClickLoadFile', 'FileName', FileName);    LogIni.UpdateFile();    FreeAndNil(LogIni);    ///     Self.FManager.Load(Self, FileName);    Self.LoadCalendarDate(Self);    Self.UpdateView;  end;end;  {{/code}}  
|  |   Вопрос задал: Aндрей (статус: 1-ый класс)Вопрос отправлен: 6 декабря 2010, 15:44
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: min@y™ Ну, всё понятно. Кое-где не хватает символов "двойные кавычки".Короче, код я твой не смотрел, щас дам тебе один свой модуль, где есть нужные тебе функции. Выкинь свой код и замени на мой. Он отлажен и работает. По возможности просмотри его и разберись - КАК он работает. Модуль разделён на категории, тебе нужна вот эта категория (остальное можешь выкинуть):
 
 // -------------------- Функции для работы с реестром --------------------------
function RegFileExt(AExtension, AExtDescription, AFileDescription,
                    AOpenWith, AParamString: String; AIconIndex: Integer): Boolean;
function FileExtIsRegistered(const AExtension: string): Boolean;
function UnRegFileExt(AExtension, AExtDescription: String): Boolean;
function ExtToFileType(const Ext: string): string; // Описание формата из реестра по расширению
function FileNameToFileType(const AFileName: string): string; // Описание формата из реестра по имени файлаПример использования некоторых функций:
 
 const
  // Расширения, иконки, реестр
  ProjectFileExt =       '.seproj';
  ProjectExtDesc =       'seproject';
  ProjectFileDesc =      'Проект Source Editor';
  ProjectIconIndex =     1;
 
// ... -------------------- ...
 
// Регистрация расширения
  if not FileExtIsRegistered(ProjectFileExt)
    then RegFileExt(ProjectFileExt,
                    ProjectExtDesc,
                    ProjectFileDesc,
                    ParamStr(0),
                    '%1',
                    ProjectIconIndex);К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 6 декабря 2010, 16:05
 Оценка за ответ: 5
 Комментарий к оценке: К ответу прикреплён файл. Загрузить »...и открывается пустая страница(
 |  Ответ #2. Отвечает эксперт: Вадим К Здравствуйте, Aндрей!попробовать тут
 
 Reg.WriteString('', ExeName + ' %1');заменить на
 Reg.WriteString('', ExeName + ' "%1"');
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 6 декабря 2010, 16:59
 
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 6 декабря 2010, 16:46; участников в обсуждении: 4. 
|   | Ерёмин А.А. (статус: *Администратор), 6 декабря 2010, 16:00 [#1]:Если параметр содержит пробелы, то он берётся в двойные кавычки. В Windows всё работает автоматически: и запуск приложений с параметрами и обработка параметров. Так что вопрос в том, откуда вы пытаетесь вызывать свою программу — проблема должна быть там. |  
|   | min@y™ (статус: Доктор наук), 6 декабря 2010, 16:27 [#2]: Цитата (Aндрей): Комментарий к оценке: К ответу прикреплён файл. Загрузить » ...и открывается пустая страница(  Боюсь, сайт глючит. Вот, выложил на файлопомойку, попробуй оттуда скачать: http://zalil.ru/30087667
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 6 декабря 2010, 16:28 [#3]:попробовать тут 
 Reg.WriteString('', ExeName + ' %1');заменить на
 Reg.WriteString('', ExeName + ' "%1"');Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ерёмин А.А. (статус: *Администратор), 6 декабря 2010, 16:30 [#4]: Цитата (Aндрей): К ответу прикреплён файл. Загрузить »...и открывается пустая страница(
 Спасибо за замеченную ошибку, исправлено. Приношу извинения за неудобства.
 |  
|   | Aндрей (статус: 1-ый класс), 6 декабря 2010, 16:46 [#5]:Помогло! Спасибо всем большое! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |