![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
Уже писал про это (и не только я) но никак не могу получить окончательного удовлетворения!
Для открытия файлов использую CommonDialog (а как еще?) CommonDialog сидит в cmdlg32.dll которого на многих машинах нет (кстати кто его ставит -Windows или VB?). В результате чего юзеры теряются! Уже давно смирился. Но тут попал на машину где cmdlg нет и вдруг IE на команду "открыть файл" выдает то самое окошко! Вопрос -КАААК? Спасибо |
|||
|
||||
Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: 4 Всего: 6 |
cmdlg.ocx - это просто объектная оболочка для APIшных функций GetOpenFileName, GetSaveFileName и пр.
Это сообщение отредактировал(а) Тутанхамец - 14.10.2006, 15:00 |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Вместо Common Dialog пользуйся для этого API.
Как воспользоваться, я подробно объяснял в своем ответе вот на этот топик: http://www.forum.vingrad.ru/index.php?showtopic=104868 В этом методе будет использован файл comdlg32.dll, входящий в состав Виндов, им и пользуются остальные проги. |
|||
|
||||
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
Hi, JusTalionis! Весьма спасибо! Твой код работает. Но возник странный такой трабл - если перед вызовом GetOpenFileName загнать в FileBox.lpstrfile некоторый файл предлагаемый юзеру "по умолчанию", а он его не захочет и выберет более длинный, то она, собака, режет его до длины предложенного! Несмотря на filebox.nmaxfile=255! Не наступал ли ты на это ?
|
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
FileBox.lpstrfile - это и есть буфер для ввода имени файла: оно вводится конкретно в тело заданной строки. Если данные длиннее ее, конечно усекутся. У меня написано: space(255) - это строка из 255 пробелов. А ты ее заменил просто своим именем? надо было дополнить пробелами в конце до 255 знаков.
Это сообщение отредактировал(а) JusTalionis - 17.10.2006, 14:39 |
|||
|
||||
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
ХА-ХА! Вы конечно будете смеяться, но под Windows XP код не работает !!!! Пишет RunTime Error 5 -неправильный вызов функции !!! За что боролись ??? А под 98 работает! Короче поставил я простой InputBox и прошу юзера набирать ручками !!! Хотя фонарею при этом - такая элементарная вещь -выбор файла - и никак не сделать что бы везде работало !!
|
|||
|
||||
mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 11 Всего: 109 |
Ты здесь читал - http://forum.vingrad.ru/s/f21d0a7d04b29129...pic-118488.html ?
|
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
||||
|
||||
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
Mihanik-y. Что ты имеешь в виду ? По моему твой код аналогичен коду JusTalionis-a Я на основе него сделал ппростенький код
он нормально пашет на 98 а на XP Run Time Error !!! Invalid function call !!! Я думаю в 98 и в ХП эта GetOPenFileName разная ! Или я чего не понял в твоем коде ? |
|||
|
||||
mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 11 Всего: 109 |
Странно...
У меня и на XP, и на XP SP1, и на XP SP2 этот код пашет нормально... Даже на 2000 SP4 пашет... ![]() |
|||
|
||||
Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: 4 Всего: 6 |
Нечего хаять Билла.
Имхо, в этом коде ты не правильно (не полностью) заполняешь структуру. Поэтому у тебя не срабатывает GetOpenFileName и возвращает FALSE. И не отображает диалоговое окно. А ран-тайм еррор 5 возникает, когда ты пытаешь отрезать Left'ом часть строки, в которой нет ни одного символа. Откуда там сивмолы, если GetOpenFileName запоролась? Ты бы поставил брекпойнт на процедуру и посмотрел, где возникает ошибка. |
|||
|
||||
mihanik |
|
||||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 11 Всего: 109 |
Заметил маленькую ошибку в своём коде...
Вместо
надо писать
|
||||
|
|||||
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
Тутанхамцу
- Спасибо, понял, исправлюсь ! - Ну посмотреть то я не мог поскольку у меня ХП нет, мне просто юзер с ХП сообщил что там происходит. - А всеж таки выходит что ХП тупее 98 ! |
|||
|
||||
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
Тутанхамцу: Так вот же нет !!!
Взял я полный код Механика с учетом его поправки, но за минусом маски
И он вроде как работает (под 98) но приплюснутое "L" не печатает !!! То есть в GetFile меня не строка а черт те что! Что потом индуцирует ошибки А что уж там в ХП получится .... Модератору (если увидит) -какого... мне стали каждый раз писать что я не имею права добавлять реплики в мой собственный топик и прогонять через вход? Раньше вроде как автоматом входил ? |
|||
|
||||
Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: 4 Всего: 6 |
Со входом на форум - у тебя на компе небось кукисы не срабатывают.
А что касается диалога, то смотри:
GetOpenFileName возвращает в выделенный буфер строку, оканчивающуюся нулем, то есть chr(0). Этот ноль воспринимается как конец строки. Можно прибавить после него хоть "L", хоть что и сколько угодно, но строка всё равно будет оканчиваться там, где ноль. Если хочешь что-то прибавить к строке, то сначала отрежь ноль. ![]() Добавлено @ 14:20 А в остальном твоя функция нормально работает под ХР. |
|||
|
||||
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
Да, точняк, у JusTalionisa это предусмотрено!
|
|||
|
||||
Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: 4 Всего: 6 |
Не забудь предусмотреть ситуацию, когда юзер не выберет файл. Нажмет "Отмена" или крестик. Тогда у тебя опять же не будет строки, с которой ты оперируешь.
|
|||
|
||||
suvorr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 28.1.2006 Где: SPb Репутация: нет Всего: нет |
Спасибо!
Но возник еще вопрос - эта фигня насчет необходимости заполнения всех параметров и вообще насчет разницы претензий со стороны 98 и ХП -она для всех апишек актуальна или это только GetOpenFile так развлекается ? В частности чисто конкретно меня интересует семейство waveIn... Правда пока на них никто не жаловался, но с другой стороны они у меня в таком закоулочке, что наверно немногие и добираются. |
|||
|
||||
Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: 4 Всего: 6 |
Боюсь, что это тебе придется устанавливать исключительно чувственным опытом ![]() Имхо лучше строго следовать документации. Даже если что-то непредусмотренное документацией работает под 98 и ХР, нет гарантии, что будет работать под висту. Чел по имени Стефан Цвейг сказал, что "формальность - это гарантия". ![]() ![]() |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Поскольку переносимость - моя больная мозоль, вот раскопал какую инфу:
Вот был бы блеск - упаковывать сделанные Бейсиком проги со всеми прилагающимися .ocx-ами и .dll-ами ![]() Кто-нибудь слыхал - появилось это чудо в реале-то? Или так и затухло? |
|||
|
||||
Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: 4 Всего: 6 |
Еще под VB4 были такие упаковщики.
ЗЫ В смысле, которые упаковывают все dll и ocx в один exe. Это сообщение отредактировал(а) Тутанхамец - 3.10.2007, 11:20 |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Да нет, ты понял в чем дело? Прога не только упаковывает, а устраняет необходимость инсталляции. Просто запускаешь экзешник, возможно прямо на флешке.
А после тех упаковщиков надо же было инсталлировать, в процессе чего всё это снова распаковывалось. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |