|
Вопрос # 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]:
Помогло! Спасибо всем большое!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|