Глюк CommonDialoga вида Save\Save As

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nicht Shiessen
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 02.09.2004 (Чт) 23:17
Откуда: Москва

Глюк CommonDialoga вида Save\Save As

Сообщение Nicht Shiessen » 02.09.2004 (Чт) 23:25

В общем такая у меня получается фигня: Нужно сохранить файл подаю на свойство FileName предполагаемое имя файла (для удобства) и он потом должен записаться с расширением .rtf, но если это предполагаемое имя содержит одну или несколько точек (.), то имя обкусывается по последней точке, а хвост при сохранении считается расширением.

Вот можно это как-нибудь адекватно обойти? Я обошел, но, мне кажется, как-то не интеллигентно...
Ein, Zwei, потом этот... как его - Drei, а дальше все и так наверняка знают...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 03.09.2004 (Пт) 7:30

Сначала через Replace заменить все точки на "" и после этого уже цеплять расширение с точкой к имени файла.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.09.2004 (Пт) 11:16

Ruslan Demidow писал(а):заменить все точки на ""

BTW, умные люди говорят, что работа с vbNullString быстрее, чем с "", и что он занимает втрое меньше места в памяти.
Про скорость не проверял, но звучит правдоподобно.
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 03.09.2004 (Пт) 14:23

tyomitch писал(а):
Ruslan Demidow писал(а):заменить все точки на ""

BTW, умные люди говорят, что работа с vbNullString быстрее, чем с "", и что он занимает втрое меньше места в памяти.
Про скорость не проверял, но звучит правдоподобно.

Не знал... :oops:
Учту на будущее. :)

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 03.09.2004 (Пт) 16:35

2 tyomitch: ты просил меня объяснить, чем BitBlt лучше PaintPicture, теперь я прошу тебя объяснить разницу между vbNullString и "" :) Я не говорю, что ее нет (например, в FindWindow "" не пропашет, а vbNullString - пожалуйста), я просто не пойму, в чем она (на " ?vbnullstring="" " отвечает True) :?: :?: :?:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.09.2004 (Пт) 17:17

"" - это нормальный ненулевой указатель. Он указывает на стоку нулевой длины.
vbNullString - это нулевой указатель. Он не указывает никуда.
А True отвечает потому что это VB :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.09.2004 (Пт) 18:53

Добавлю: vbNullString занимает 4 байта, а "" - 12 (BSTR + длина + завершающий 0 + выравнивание до 4 байт).
Соответственно, функции приходится прочитать и обработать втрое меньше при работе с vbNullString.

А то, что они равны, это действительно, такая особая фишка в VB. В VB их много: например, напиши Debug.Print DateDiff("s", 0.5, -0.5)
Изображение

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 03.09.2004 (Пт) 20:26

Nicht Shiessen писал(а):если это предполагаемое имя содержит одну или несколько точек (.), то имя обкусывается по последней точке, а хвост при сохранении считается расширением

Поставь свойство DefaultExt:
Код: Выделить всё
CommonDialog1.DefaultExt=".ext"
Моду создают модоки, а распространяют модозвоны.

Nicht Shiessen
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 02.09.2004 (Чт) 23:17
Откуда: Москва

Сообщение Nicht Shiessen » 04.09.2004 (Сб) 1:00

hCORe писал(а):Поставь свойство DefaultExt:
Код: Выделить всё
CommonDialog1.DefaultExt=".ext"


Ну в общем-то у меня дефольт екстеншн и раньше стоял - .rtf и если делать это во время выполнения программы то разницы нету

Ruslan Demidow писал(а):Сначала через Replace заменить все точки на "" и после этого уже цеплять расширение с точкой к имени файла.


Дык если ж точки заменить на что либо (хоть даже и на vbNullString) то и имя сохраненного файла будет без точек, а весь фиг в том что мне надо с точками.

Причем, что интересно, если имя файла: например "01-Лявоны (В.Мулявин - В.Яшкин)", то .Яшкин) считается за расширение, а если так: "01-Лявоны (В. Мулявин - В. Яшкин)", то почему-то нет.
Ведь это же дурь какая-то???
Ein, Zwei, потом этот... как его - Drei, а дальше все и так наверняка знают...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 04.09.2004 (Сб) 7:23

Nicht Shiessen писал(а):
Ruslan Demidow писал(а):Сначала через Replace заменить все точки на "" и после этого уже цеплять расширение с точкой к имени файла.


Дык если ж точки заменить на что либо (хоть даже и на vbNullString) то и имя сохраненного файла будет без точек, а весь фиг в том что мне надо с точками.

Ну тут уж ты сам решай, что тебе нужно: имя файла с несколькими точками или нормальная работа твоей программы.
Можно открыть по F1 хелп виндовый и почитать о допустимых именах файлов.

Код: Выделить всё
Чтобы изменить имя файла или папки
Откройте папку Мои документы.
Если в папке «Мои документы» или ее подпапках нет файла или папки, которые требуется переименовать, найдите этот файл или папку, нажав кнопку «Поиск». Чтобы запустить средство поиска, нажмите кнопку Пуск, выберите команду Поиск, а затем выберите команду Файлы и папки.

Выберите файл или папку, которые следует переименовать.
В группе Типичные задачи для файлов и папок щелкните ссылку Переименовать этот файл или Переименовать эту папку.
Введите новое имя и нажмите клавишу ВВОД.
Примечания

Чтобы открыть папку «Мои документы», дважды щелкните значок Мои документы на рабочем столе.
Некоторые программы не распознают длинные имена файлов. Предельная длина имени файла для таких программ составляет восемь символов. Не допускается использование в именах файлов следующих символов:
\ / : * ? " < > |.
Файл и папку также можно переименовать, щелкнув правой кнопкой мыши и выбрав команду Переименовать.
Имена системных папок, такие как «Documents and Settings», «Windows» или «System32», изменять нельзя. Они необходимы для нормальной работы Windows.


Причем, что интересно, если имя файла: например "01-Лявоны (В.Мулявин - В.Яшкин)", то .Яшкин) считается за расширение, а если так: "01-Лявоны (В. Мулявин - В. Яшкин)", то почему-то нет.
Ведь это же дурь какая-то???

Так что я бы не советовал использовать несколько точек в имени файлов - кто его знает, как он обработается виндой при стечении обстоятельств.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 24

    TopList  
cron