Открыть файл программой по умолчанию delphi

перенесено со старого форума. сообщение от LEOGIGA.

Мне надо из делфи открыть файл, как мне это сделать?

перенесено со старого форума. сообщение от Virtson.

вызов программы по умолчанию :

WinExec(pchar(‘Explorer ‘+fst), sw_SHOWNORMAL);

(где fst — полное имя файла;
WinExec — находится в модуле Windows)

перенесено со старого форума. сообщение от Alar.

WinExec(pchar(‘Explorer ‘+fst), sw_SHOWNORMAL);

хороший способ, но его не удобно использовать если имя файла нужно ввести динамически.

Вот этот способ получше будет:
ShellExecute(0,’Open’,pchar(‘C:itog .swf’),nil,nil,1);

itog.swf — это файл который надо открыть.

Если нужно открыть файл в той же папке, что и exe файл, то сделай вот так:

ShellExecuteA(0, ‘Open’,pchar( ExtractFilePath(application.exename )+’itog.swf’),nil,nil,1);

Не забудьте в uses указать модуль — shellapi

Источник: www.programmersforum.ru

Delphi — Save and Open a project (How To)

Delphi: «Открыть с помощью» своей программы, обработка пробелов в имени файла

Сегодня я расскажу, как заставить Вашу программу на Delphi ПРАВИЛЬНО открывать указанный файл при запуске (например, если щелкнуть по какому либо файлу правой кнопкой мыши, выбрать пункт «Открыть с помощью…» и указать Вашу программу). При этом имя открываемого файла передается программе в параметре, и может возникнуть одна проблема — наличие пробелов в имени файла, который будет оценен как разделитель параметров. То есть, при указании имени файла «Новый файл.txt» программе будет передано 2 параметра: «Новый» и «файл.txt». Для правильной обработки этой ситуации нам необходимо «собрать» все параметры в кучу.

Итак, зададим переменную params типа string и в нее «сложим» все наши параметры, получаемые методом ParamStr, количество которых можно получить методом ParamCount. Вот такая простая процедура:

Procedure .
var params: string;
begin
params:=»;
if ParamCount>0 then
for i := 1 to ParamCount do
begin
params := params + ParamStr(i);
if i<>ParamCount then params := params + ‘ ‘;
end;
end;

Процедура обычно выполняется в событии FormCreate главной формы приложения. Затем остается только открыть файл, имя которого хранится в переменной params. Чтобы открытие файла можно было произвести в другой процедуре, переменную params делаем глобальной (выносим приведенный блок var, например, под блок uses в начале кода модуля).

Читайте также:
Как принудительно остановить программу в python

Источник: brullworfel.ru

Ассоциация файлов с программой

Подписаться на RSS рассылку

Открытие файла с помощью нашей программы (Dephi)

Вообще все работает очень просто. Вся необходимая для этого информация заносится в реестр в определенную ветку. Откройте редактор реестра (Пуск -> Выполнить -> regedit) и зайдите в ветку HKEY_CLASSES_ROOT. Там Вы увидите все существующие в системе расширения. Там вы найдете и .txt и .bmp и многие другие знакомые расширения.

Давайте рассмотрим расширение .jpg. В нем у меня есть ветка OpenWithProgids, а в ней есть ACDSee Pro 2.0.jpg типа REG_SZ. Дальше переходим по ветке HKEY_CLASSES_ROOTACDSee Pro 2.0.jpg. В ней есть несколько веток. Рассмотрим те, которые нам понадобятся, это: DefaultIcon — путь к иконке которой будет отображаться файл в проводнике; shellOpencommand — какую программу открывать при двойном клике по файлу.

Необходимо знать, что при запуске программы в качестве параметра передается путь к файлу, который открывается. Поэтому нужно будет обрабатывать этот параметр.

Пусть файл будет расширения .dev . Напишем процедуру для добавления необходимых значений в реестр. Не забудьте добавить в секцию uses модуль Registry для работы с реестром.

uses Registry, ShlObj;. var Reg: TRegistry;. procedure Associate;var s:string;begin Reg:=TRegistry.Create; // создаем Reg.RootKey := HKEY_CLASSES_ROOT; // указываем корневую ветку Reg.OpenKey(‘.devOpenWithProgids’, true); Reg.WriteString(‘TestApplication.dev’, »); Reg.OpenKey(‘TestApplication.devDefaultIcon’, true); s:=Application.ExeName+’,0′; Reg.WriteString(», s); Reg.OpenKey(‘TestApplication.devShellOpen’, true); Reg.WriteString(», ‘Открыть в TestApplication’); Reg.OpenKey(‘command’, true); s:='»‘+Application.ExeName+'» «%1″‘; Reg.WriteString(», s); Reg.Free; SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);end;

Функция OpenKey открывает ветку, указанную в первом параметре. Второй параметр установлен в True, чтобы ветвь создалась, если она не существует.

Далее в переменной s формируем путь к иконке. В данном случае берется иконка с индексом 0 из exe приложения. Например, можно добавить в приложение еще одну иконку и использовать её для файлов программы, но можно указать и путь к .ico файлу.

TestApplication.dev я выбрал сам. Название этой ветки придумываете вы сами. Обычно пишется название программы и добавляется расширение, так как программа может работать с несколькими расширениями.

Читайте также:
Raft прекращена работа программы

После добавления данных в реестр вызывается процедура SHChangeNotify , чтобы иконки обновились и настройки применились.

Далее напишем процедуру для снятия ассоциации:

procedure DeleteAssociate;begin Reg:=TRegistry.Create; Reg.RootKey := HKEY_CLASSES_ROOT; reg.DeleteKey(‘.dev’); reg.DeleteKey(‘TestApplication.dev’); Reg.Free; SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);end;

Тут все еще проще — просто удаляем созданные ветки.

Теперь осталось только обработать параметр, чтобы программа не просто загружалась, а еще и открывала файл. Все очень просто, во время создания формы считываем функцией ParamCount количество параметров и если их число не 0, то вызываем функцию загрузки, а в качестве входного параметра в эту функцию передаем путь к файлу, который нужно открыть. Щелкните по форме два раза, тем самым создавая, обработчик создания формы.

procedure TForm1.FormCreate(Sender: TObject);begin if ParamCount <> 0 then Load(ParamStr(1));end;

Ну и нужно еще написать функцию загрузки файла. Добавьте TMemo на форму.

function Load(FName:string): boolean;begin Form1.Memo1.Lines.LoadFromFile(FName);end;

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

Добавьте два TButton на форму. По клику по первому будет выполняться ассоциация, а по второму снятие ассоциации.

Кликаем два раза по первой кнопке и приводим процедуру к такому виду.

procedure TForm1.Button1Click(Sender: TObject);begin Associate;end;

Выполняем действия аналогичные описанным выше, но для второй кнопки.

procedure TForm1.Button2Click(Sender: TObject);begin DeleteAssociate;end;

Ну вот и все. При попытке открытия файла с расширением .dev в Memo1 должно загрузиться содержимое файла.

Просмотров: 20067

Порядок вывода комментариев:

0 Спам
( 17.05.2011 )

14. Алекс

Ассоциация .MP3 не работает Winamp не хочет меняется а если выбрать другой расширение то тогда работает

0 Спам
( 19.03.2011 )

13. Сергей (Xaker)
правда если файл уже зарегистрирован другой программой то ассоциация не сработает(

0 Спам
( 19.03.2011 )

12. Сергей (Xaker)
Ассоциация отлично работает спасибо, и всё вроде хорошо но назрел вопрос..

Читайте также:
В какой программе чертить для чпу

Как можно «добавить в приложение еще одну иконку» ? её нужно загрузить в файл ресурсов или ещё что? подскажите пожалуйста)

0 Спам
( 15.07.2010 )

11. Александр Чернявский
ассоциация не выходит

0 Спам
( 21.02.2010 )

10. Сергей (Xaker)

в общем путь то я нашёл но при закрытии программа не закрывается а выдаёт ошибку.. File Access Denied как можно исправить.

Ответ: Сложно сказать, ничего не известно.
Создайте тему на форуме с подробным разъяснением проблемы.

0 Спам
( 21.02.2010 )

9. Сергей (Xaker)

А что если мне нужно просто получить адрес файла через который запустили мою программу. Если использую FName то программа не работает + ещё и не закрывается.

Ответ: А это разве не то?
«Необходимо знать, что при запуске программы в качестве параметра передается путь к файлу, который открывается.»

0 Спам
( 10.12.2009 )

8. levwv

У меня другая проблема все .exe открываются через блокнот каквернуть всё обратно? (я просто ассоциацию сделал вирусу чтоб он открылся в блокноте, но его учать постигла все программы)

Ответ: ууу сложный случай, вирус видимо был .exe вот и все.
Попробовать экспортировать эту ветвь реестра с другой ОС и импортировать у себя.

0 Спам
( 16.11.2009 )

7. Евгений
а у меня пишет failed to set data for ‘editor.exe’

0 Спам
( 11.11.2009 )

6. melina
спасибо , ооочень помогло !!

0 Спам
( 03.11.2009 )

5. maksim_larionov

С обработкой нескольких выделенных файлов все же проблема: windows открывает их моей программой каждый отдельно (paramcount для каждой запущенной =1 ), а очень хотелось бы, чтобы paramcount совпадал с числом выделенных:) Пробовал записать в реестре не %1, а %l, но не помогает. Программа не MDI

Ответ: Думаю тут уже нужно просто после запуска программы, смотреть есть ли уже экземпляр приложения в памяти, если есть, то передавать другому экземпляру путь к файлу, а после принятия пути, открывать файл. А после передачи закрывать приложение. Тем самым будет только 1 экземпляр в котором все файлы.

Источник: delphidevelop.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru