![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
почему Opendialog "тормозит" программу [D7, XP]
dasha © (2007-01-28 16:29:00)программа отказывается открывать файлы через shellexecute после того как выбирается файл через opendialog
if Opendialog1.Execute and FileExists(OpenDialog1.FileName)then edit1.Text:=OpenDialog1.FileName;
причем не открываются обсолютно независимые от этой строчки файлы, а ошибки никакой не выдает
если опустить FileExists(OpenDialog1.FileName) то ничего не изменится
Virgo_Style (2007-01-28 19:24:00) [1]GetCurrentDir до того, SetCurrentDir после того, но ненадежно все это, если программу ярлыком запускать, то уже неизвестно, какой каталог будет текущим, лучше б все же [11] / [8]a
Anatoly Podgoretsky (2007-01-28 19:03:00) [2]> dasha (28.01.2007 18:38:10) [10]
Восстановить не возможно, поскольку подобная информация отсутствует, но можно расширить имя файла - ExpandFileName, после ExtractFilePath и результат в переменную root
Затем используешь root + file
Делать это можно только при условии, что относительный и текущий пути совпадают.
У тебя в текущий момент совпадают.
Anatoly Podgoretsky (2007-01-28 18:39:00) [3]> dasha (28.01.2007 18:25:06) [6]
Не используй относительные пути, а то что работало до вызова диалога, так это ты в рубашке родилась, так звезды сложились, что текущий путь равен относительному.
Если ты уверена, то expandFileName при старте приложения, извлечь отсюда путь и потом прибавлять его перед вызовом. Но это до поры до времени, все равно рано или поздно будет проблема. Только абсолютные пути - путь к успеху.
dasha (2007-01-28 18:38:00) [4]а как восстановить текущий каталог?????
Virgo_Style (2007-01-28 18:33:00) [5]dasha (28.01.07 18:25) [6]
ну вообщем связи со строкой
if Opendialog1.Execute and FileExists(OpenDialog1.FileName)then edit1.Text:=OpenDialog1.FileName;
я не вижу...
см. [3]
Virgo_Style (2007-01-28 18:31:00) [6]a. Не используй относительные пути,
или
b. Восстанавливай текущий каталог после выбора файла,
или
c. А нет ли у OpenDialog в настройках "не изменять текущий каталог"?
dasha (2007-01-28 18:26:00) [7]да запускаемый файл это совсем не выбираемый через диалог
dasha (2007-01-28 18:25:00) [8]В программе есть много вызовов функции shellExecute, например на щелчок мыши по ячейке таблицы должен открываться файл, относительный адрес которого записан в ячейке 'Adress_R' (просто строкой ..допустим Materiali\CO\PS\3_kurs\grafik_sso.doc):
s:=ADOQuery1.FieldValues['Adress_R'];
ShellExecute(Handle,nil,pchar(s),'','',SW_MAXIMIZE );
или при нажатии на кнопку "Открыть"
s:=ADOQuery3.FieldValues['Adress_R'];
ShellExecute(Handle,nil,pchar(s),nil,nil,SW_MAXIMIZE)ж
ну вообщем связи со строкой
if Opendialog1.Execute and FileExists(OpenDialog1.FileName)then edit1.Text:=OpenDialog1.FileName;
я не вижу...после того как через opendialog выбран файл перестают открываться файлы даже из других модулей программы, на других формах....т.е. при нажатии на кнопки или щелчке по таблице просто ничего не происходит
а до выбора через диалог все прекрасно работает
Virgo_Style (2007-01-28 17:04:00) [9]Anatoly Podgoretsky © (28.01.07 16:41) [4]
OpenDialog.filename возвращает полный путь.
> причем не открываются обсолютно независимые от этой
> строчки файлы
Я понимаю эту фразу именно таким образом: запускаемые файлы - это НЕ выбираемый файл. Быть может, я ошибаюсь, поживем - увидим.
Anatoly Podgoretsky (2007-01-28 16:41:00) [10]> Virgo_Style (28.01.2007 16:40:03) [3]
OpenDialog.filename возвращает полный путь.
Virgo_Style (2007-01-28 16:40:00) [11]Телепатор говорит, что у тебя текущий каталог меняется при выборе файла, а пути забиты относительные
Anatoly Podgoretsky (2007-01-28 16:36:00) [12]> dasha (28.01.2007 16:29:00) [0]
shellexecute не наблюдается
Джо (2007-01-28 16:35:00) [13]Вероятно, следует показать код, использующий ShellExecute и объяснить, что значит «отказывается открывать».