| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > переносимость. commondialog |
| Автор: suvorr 14.10.2006, 10:28 |
| Уже писал про это (и не только я) но никак не могу получить окончательного удовлетворения! Для открытия файлов использую CommonDialog (а как еще?) CommonDialog сидит в cmdlg32.dll которого на многих машинах нет (кстати кто его ставит -Windows или VB?). В результате чего юзеры теряются! Уже давно смирился. Но тут попал на машину где cmdlg нет и вдруг IE на команду "открыть файл" выдает то самое окошко! Вопрос -КАААК? Спасибо |
| Автор: Тутанхамец 14.10.2006, 14:59 |
| cmdlg.ocx - это просто объектная оболочка для APIшных функций GetOpenFileName, GetSaveFileName и пр. |
| Автор: JusTalionis 16.10.2006, 14:33 |
| Вместо Common Dialog пользуйся для этого API. Как воспользоваться, я подробно объяснял в своем ответе вот на этот топик: http://www.forum.vingrad.ru/index.php?showtopic=104868 В этом методе будет использован файл comdlg32.dll, входящий в состав Виндов, им и пользуются остальные проги. |
| Автор: suvorr 17.10.2006, 08:53 |
| Hi, JusTalionis! Весьма спасибо! Твой код работает. Но возник странный такой трабл - если перед вызовом GetOpenFileName загнать в FileBox.lpstrfile некоторый файл предлагаемый юзеру "по умолчанию", а он его не захочет и выберет более длинный, то она, собака, режет его до длины предложенного! Несмотря на filebox.nmaxfile=255! Не наступал ли ты на это ? |
| Автор: JusTalionis 17.10.2006, 12:38 |
| FileBox.lpstrfile - это и есть буфер для ввода имени файла: оно вводится конкретно в тело заданной строки. Если данные длиннее ее, конечно усекутся. У меня написано: space(255) - это строка из 255 пробелов. А ты ее заменил просто своим именем? надо было дополнить пробелами в конце до 255 знаков. |
| Автор: suvorr 1.11.2006, 11:40 |
| ХА-ХА! Вы конечно будете смеяться, но под Windows XP код не работает !!!! Пишет RunTime Error 5 -неправильный вызов функции !!! За что боролись ??? А под 98 работает! Короче поставил я простой InputBox и прошу юзера набирать ручками !!! Хотя фонарею при этом - такая элементарная вещь -выбор файла - и никак не сделать что бы везде работало !! |
| Автор: mihanik 1.11.2006, 11:45 | ||
Ты здесь читал - http://forum.vingrad.ru/s/f21d0a7d04b29129ab4c57f0c3f42314/topic-118488.html ?
|
| Автор: suvorr 1.11.2006, 22:28 | ||
Mihanik-y. Что ты имеешь в виду ? По моему твой код аналогичен коду JusTalionis-a Я на основе него сделал ппростенький код
он нормально пашет на 98 а на XP Run Time Error !!! Invalid function call !!! Я думаю в 98 и в ХП эта GetOPenFileName разная ! Или я чего не понял в твоем коде ? |
| Автор: mihanik 2.11.2006, 08:13 |
| Странно... У меня и на XP, и на XP SP1, и на XP SP2 этот код пашет нормально... Даже на 2000 SP4 пашет... |
| Автор: Тутанхамец 2.11.2006, 10:54 |
| Нечего хаять Билла. Имхо, в этом коде ты не правильно (не полностью) заполняешь структуру. Поэтому у тебя не срабатывает GetOpenFileName и возвращает FALSE. И не отображает диалоговое окно. А ран-тайм еррор 5 возникает, когда ты пытаешь отрезать Left'ом часть строки, в которой нет ни одного символа. Откуда там сивмолы, если GetOpenFileName запоролась? Ты бы поставил брекпойнт на процедуру и посмотрел, где возникает ошибка. |
| Автор: mihanik 2.11.2006, 11:23 | ||||
| Заметил маленькую ошибку в своём коде... Вместо
надо писать
|
| Автор: suvorr 2.11.2006, 22:18 |
| Тутанхамцу - Спасибо, понял, исправлюсь ! - Ну посмотреть то я не мог поскольку у меня ХП нет, мне просто юзер с ХП сообщил что там происходит. - А всеж таки выходит что ХП тупее 98 ! |
| Автор: suvorr 4.11.2006, 13:59 | ||
| Тутанхамцу: Так вот же нет !!! Взял я полный код Механика с учетом его поправки, но за минусом маски
И он вроде как работает (под 98) но приплюснутое "L" не печатает !!! То есть в GetFile меня не строка а черт те что! Что потом индуцирует ошибки А что уж там в ХП получится .... Модератору (если увидит) -какого... мне стали каждый раз писать что я не имею права добавлять реплики в мой собственный топик и прогонять через вход? Раньше вроде как автоматом входил ? |
| Автор: Тутанхамец 4.11.2006, 14:15 | ||
| Со входом на форум - у тебя на компе небось кукисы не срабатывают. А что касается диалога, то смотри:
GetOpenFileName возвращает в выделенный буфер строку, оканчивающуюся нулем, то есть chr(0). Этот ноль воспринимается как конец строки. Можно прибавить после него хоть "L", хоть что и сколько угодно, но строка всё равно будет оканчиваться там, где ноль. Если хочешь что-то прибавить к строке, то сначала отрежь ноль. Добавлено @ 14:20 А в остальном твоя функция нормально работает под ХР. |
| Автор: suvorr 4.11.2006, 21:38 |
| Да, точняк, у JusTalionisa это предусмотрено! |
| Автор: Тутанхамец 5.11.2006, 08:38 |
| Не забудь предусмотреть ситуацию, когда юзер не выберет файл. Нажмет "Отмена" или крестик. Тогда у тебя опять же не будет строки, с которой ты оперируешь. |
| Автор: suvorr 5.11.2006, 09:28 |
| Спасибо! Но возник еще вопрос - эта фигня насчет необходимости заполнения всех параметров и вообще насчет разницы претензий со стороны 98 и ХП -она для всех апишек актуальна или это только GetOpenFile так развлекается ? В частности чисто конкретно меня интересует семейство waveIn... Правда пока на них никто не жаловался, но с другой стороны они у меня в таком закоулочке, что наверно немногие и добираются. |
| Автор: Тутанхамец 5.11.2006, 11:35 | ||
Боюсь, что это тебе придется устанавливать исключительно чувственным опытом Имхо лучше строго следовать документации. Даже если что-то непредусмотренное документацией работает под 98 и ХР, нет гарантии, что будет работать под висту. Чел по имени Стефан Цвейг сказал, что "формальность - это гарантия". |
| Автор: JusTalionis 3.10.2007, 11:15 | ||
Поскольку переносимость - моя больная мозоль, вот раскопал какую инфу:
Вот был бы блеск - упаковывать сделанные Бейсиком проги со всеми прилагающимися .ocx-ами и .dll-ами Кто-нибудь слыхал - появилось это чудо в реале-то? Или так и затухло? |
| Автор: Тутанхамец 3.10.2007, 11:18 |
| Еще под VB4 были такие упаковщики. ЗЫ В смысле, которые упаковывают все dll и ocx в один exe. |
| Автор: JusTalionis 3.10.2007, 11:25 |
| Да нет, ты понял в чем дело? Прога не только упаковывает, а устраняет необходимость инсталляции. Просто запускаешь экзешник, возможно прямо на флешке. А после тех упаковщиков надо же было инсталлировать, в процессе чего всё это снова распаковывалось. |