Открытие файла в Делфи
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Открытие файла в Делфи - 2008-01-05 20:16:56.460000
|
|
|
Login_hochu
Сообщений: 1471
Оценки: 0
Присоединился: 2007-07-15 14:19:23.423333
|
Как в делфи открыть файл тем приложением, которое сопоставлено этому файлу в виндовс, например мне надо из программы открыть файл d:\document.doc - он должен открыться вордом? Можно ли это сделать, если абсолютный путь неизвестен , а файл лежит в одной папке с программой?
|
|
|
RE: Открытие файла в Делфи - 2008-01-05 20:38:02.016666
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом в топиках(или в хелпе/инете и т.д.)
|
|
|
RE: Открытие файла в Делфи - 2008-01-05 20:49:22.316666
|
|
|
Login_hochu
Сообщений: 1471
Оценки: 0
Присоединился: 2007-07-15 14:19:23.423333
|
С WinExec вроде разобрался - только почемуто не срабатывают пути вида %SystemRoot%\system32\mspaint.exe , а если написать C:\windows\system32\mspaint.exe - тогда работает.
|
|
|
RE: Открытие файла в Делфи - 2008-01-05 21:28:39.380000
|
|
|
blаcksun
Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333
|
quote:
ORIGINAL: Login_hochu С WinExec вроде разобрался - только почемуто не срабатывают пути вида %SystemRoot%\system32\mspaint.exe , а если написать C:\windows\system32\mspaint.exe - тогда работает.
function _GetTempPath: String;
var
Buffer: array[0..1023] of Char;
begin
SetString(Result, Buffer, GetTempPath(Sizeof(Buffer) - 1, Buffer));
end;
function GetSysDir: String;
var
Temp: array[0..255] of Char;
begin
GetSystemDirectory(Temp, 256);
Result := StrPas(Temp);
end;
function GetWinDir: string;
var
Temp: array[0..255] of Char;
begin
GetWindowsDirectory(Temp, 256);
Result := StrPas(Temp);
end;
|
|
|
RE: Открытие файла в Делфи - 2008-01-05 21:52:47.903333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Login_hochu С WinExec вроде разобрался - только почемуто не срабатывают пути вида %SystemRoot%\system32\mspaint.exe , а если написать C:\windows\system32\mspaint.exe - тогда работает. эээх. потому что систему надо изучать с основных принципов, а не с win32api. %SystemRoot% никакого отношения к файловой системе не имеет, это переменная окружения. Не скажу как это в точности реализовано в венде – не знаю, но если переменные окружения в венде – это действительно переменные окружения, то надо искать в win32api, что-то в стиле getenv из stdlib.h, если нет то есть другой способ: искать в win32api функции со слово shell и высматривать среди них те, которые раскрывают эти самые переменные окружения, что-нибудь в стиле ShellExpand или может подлиннее ShellExpandEnviron… Кстати ShellExecute, насколько я понимаю название, должна бы раскрывать все переменные окружения, и понимать пути вида ./some-file.exe, или ../some-dir/some-file.exe, или просто some-file.exe. Хотя странно что у тебя возникли проблемы с файлами в текущей директории – стандартом даже для доса было искать файлы с неполными путями начиная с текущей директории процесса, а уж директории . и .. присутствуют по-моему в любой файловой системе. Или ms забила на эти традиции?
|
|
|
RE: Открытие файла в Делфи - 2008-01-05 22:22:07.553333
|
|
|
Login_hochu
Сообщений: 1471
Оценки: 0
Присоединился: 2007-07-15 14:19:23.423333
|
Точно ! Я не додумался [sm=an.gif] В текущей директории файл запускается сразу ! ЗЫ я только вчера делфи скачал.
|
|
|
RE: Открытие файла в Делфи - 2008-01-06 00:19:09.473333
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
quote:
ORIGINAL: Genco Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом в топиках(или в хелпе/инете и т.д.) Насколько я помню, GetCurrentDirectory отдает текущую дирректорию для текущего процесса. Это не совсем то же самое, что дирректория с прогой. поясню. Суем в прогу диалог открытия файла и открываем чего-нить. Все. Дирректория с прогой - не текущая. Поэтому из текущей дирректории в ShellExecute лучше пихать имя файла с путем. ExtractFileDir(Application.ExeName)+'\<имя файла>'
|
|
|
RE: Открытие файла в Делфи - 2008-01-06 00:41:09.530000
|
|
|
blаcksun
Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333
|
quote:
ORIGINAL: alexbozhko quote:
ORIGINAL: Genco Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом в топиках(или в хелпе/инете и т.д.) Насколько я помню, GetCurrentDirectory отдает текущую дирректорию для текущего процесса. Это не совсем то же самое, что дирректория с прогой. поясню. Суем в прогу диалог открытия файла и открываем чего-нить. Все. Дирректория с прогой - не текущая. Поэтому из текущей дирректории в ShellExecute лучше пихать имя файла с путем. ExtractFileDir(Application.ExeName)+'\<имя файла>' А если прога без компонентов и формы?))
function ExtractFilePath(const FileName: String): String;
var
i: Integer;
begin
for i := Length(FileName) downto 0 do
if FileName[i] = '\' then
begin
Result := Copy(FileName, 0, i - 1);
exit;
end;
end;
.....
ExtractFilePath(ParamStr(0))+'\<имя файла>'
Так думаю лудше
|
|
|
RE: Открытие файла в Делфи - 2008-01-06 01:08:22.073333
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
quote:
ORIGINAL: blаcksun quote:
ORIGINAL: alexbozhko quote:
ORIGINAL: Genco Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом в топиках(или в хелпе/инете и т.д.) Насколько я помню, GetCurrentDirectory отдает текущую дирректорию для текущего процесса. Это не совсем то же самое, что дирректория с прогой. поясню. Суем в прогу диалог открытия файла и открываем чего-нить. Все. Дирректория с прогой - не текущая. Поэтому из текущей дирректории в ShellExecute лучше пихать имя файла с путем. ExtractFileDir(Application.ExeName)+'\<имя файла>' А если прога без компонентов и формы?))
function ExtractFilePath(const FileName: String): String;
var
i: Integer;
begin
for i := Length(FileName) downto 0 do
if FileName[i] = '\' then
begin
Result := Copy(FileName, 0, i - 1);
exit;
end;
end;
.....
ExtractFilePath(ParamStr(0))+'\<имя файла>'
Так думаю лудше А при чем тут это? ExtractFilePath - замена ExtractFileDir Функция ExtractFileDir прописана в SysUtils. Компоненты и формы тут не причем… Если прога без компонентов и формы, то объект Application не создастся. Через ParamStr его просто искать надо будет.
|
|
|
RE: Открытие файла в Делфи - 2008-01-06 01:14:52.496666
|
|
|
blаcksun
Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333
|
quote:
Функция ExtractFileDir прописана в SysUtils. Не, а вдруг ТС надо чтоб вес был небольшим? SysUtils прилично в весе добавляет
|
|
|
RE: Открытие файла в Делфи - 2008-01-06 01:22:45.920000
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
quote:
ORIGINAL: blаcksun quote:
Функция ExtractFileDir прописана в SysUtils. Не, а вдруг ТС надо чтоб вес был небольшим? SysUtils прилично в весе добавляет А я тогда просто срезаю из этого модуля нужную функцию :) То на то и выходит Но так лучше делать, чем писать свои. Рефакторинг кода потом проще делать :)
|
|
|
|
|