| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Задача на сообразительность |
| Автор: Alex 13.9.2005, 14:25 | ||
Не запуская Delphi скажите, что будет на экране после выполнения кода:
PS: Диалог имеет настройки по умолчанию. |
| Автор: Quadr0 13.9.2005, 14:41 |
| ... |
| Автор: Alex 13.9.2005, 15:02 |
| |
| Автор: Rrader 13.9.2005, 15:09 |
| Ошибка должна быть, если файл не будет существовать. Добавлено @ 15:10 А он и так не существует, путь неверный. Добавлено @ 15:11 Аж в Delphi страшно смотреть правду... |
| Автор: ~FoX~ 13.9.2005, 15:42 |
| Ничего не будет - строка не соответствует OPENFILENAME структуре, функция GetSaveFileName вернет какой то там еррор и SaveDialog1.Execute не выполниться. Только я прикола не понял... |
| Автор: Quadr0 13.9.2005, 16:31 |
| ... |
| Автор: ~FoX~ 13.9.2005, 16:47 |
| Quadr0 Точно не помню но по вроде в структуру передается lpstrfile в которой разделитель может быть только '\' или '.' и еще какойто если MultySelect есть. Могу ошибаться конечно. Вобщем если путь указан не верно, то вызывается CommDlgExtendedError и это, типа опа приплыли - никаких вам диалогов. За подробностями в МСДН, мне лениво искать сегодня. |
| Автор: Akella 13.9.2005, 17:04 |
| исключительная ситуация, что-то типа Cannot create file |
| Автор: Alex 13.9.2005, 20:36 |
| Ладно, дело было так. Ваш покорный слуга решил сегодня в 10 утра проверить ключевые моменты работы программы, которую сегодня заказчику показывать нужно было. Одним из таких моментов является экспорт отчетных документов в разные форматы, Проверяю, мне показывают форму настройки экспорта и по ее закрытию должен показываться пресловутый SaveDialog, но этого почему-то не происходит. Генератор отчета и его функции экспорта я использую FastReport 3, чертыхаясь, лезу в исходники (благо есть), ставлю точки останова и начинаю офигевать. Доходит до метода SaveDialog1.Execute, идет на его выполнение и тут же не показывая диалога вываливается с отрицательным результатом. 4 часа длятся пляски с бубном и ощущение, что крыша сейчас уедет, т.к. понять сие действие просто не реально. Пробуются все теории, которые только могли придти ко мне в голову и голову Петровичу. Результат ноль. В три часа путем уже невероятных шаманских действий замечаю, что единственную настройку SaveDialog, которую делают разработчики FR это передача названия файла по умолчанию, смотрю, что же там хранится. По совершенно глупейшей ошибке в путь попадает "/". Каким образом FR загружал шаблон отчета в пути, которого был "/" я не понял досих пор, но то, что SaveDialog даже не ругается на такой путь, а просто грохается это кошмар, он даже в GetLastError возвращает 0. Бардак в общем |
| Автор: p0s0l 13.9.2005, 21:33 | ||||
Мда... Бывает же
|
| Автор: Alex 13.9.2005, 21:48 | ||||
Буду знатьт. Спасибо Добавлено @ 21:53
Самое странное, что я в FR по ошибке подавал "E:\Prog_on_Delphi\Work\Svet\Rep/Склад Товарная накладная.fr3", а правильный путь должен был быть "E:\Prog_on_Delphi\Work\Svet\Rep\Склад Товарная накладная.fr3" и как он открывал этот файл для меня загадка |
| Автор: Snowy 13.9.2005, 23:03 |
| А винда какая было? XP свободно съедает как досявые, так и линуксовые пути. Прямой слэш имеет явно линуксовое происхождение. 9х явно такой путь не съедят, а XP без проблем. |
| Автор: Alex 13.9.2005, 23:08 |
| Винда ХР SP2 и все обновления, которые доступны на сегодняшний день |
| Автор: Snowy 13.9.2005, 23:29 |
| Значит нужно в исходняках SaveDialog'a порыться - где-то он неверно строку парсит. По идее коресь в FR, но это обычная ситуация для времен кросплатформенности. |
| Автор: Alex 13.9.2005, 23:53 | ||||
| А что там особенно ковыряться? SaveDialog они дергают стандартный, а если смотреть его исходники, то там идет самая обыкновенная заполнения массива данных и передача этого массива на вход Win Api функции вызова диалога, а в ней уже и отваливаемся. А FR, тоже ничего криминального не делает и не парсит:
Добавлено @ 23:57 На самом деле даже вот такой код:
возвратит истину. Получается, что FindFirstFile, на котором построена FileExists находит файл и спокойно может с ним работать. |
| Автор: Alex 14.9.2005, 00:03 |
| В принцыпе если так внимательно на все посмотреть, то единственным узким местом, на которое нарвались разработчики FR оказалась функция ExtractFileName, которая просто не готова к таким путям в отличии от всех системных функций |