Что-то с флагами в CommonDialog...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Что-то с флагами в CommonDialog...

Сообщение BV » 26.01.2005 (Ср) 15:37

Всем доброго времени суток!
У меня время от времени возникают, возможно, глупые вопросы, потому прошу не особо сильно смеятся над ними.
Дело вот в чём:

Код: Выделить всё
Public Const OFN_NOREADONLYRETURN As Long = &H8000
...

Public Function GetSaveDialog(ByVal hwndMain As Long, ByVal strTitle As String, ByVal strFilter As String, Optional ByVal strInitDirectory As String = "C:\") As String
    Dim CommonDialogSave As OPENFILENAME
    Dim x As Long
    With CommonDialogSave
        .lStructSize = Len(CommonDialogSave)
        .hwndOwner = hwndMain
        .lpstrTitle = strTitle
        .lpstrFilter = strFilter
        .lpstrInitialDir = strInitDirectory
        .lpstrFile = LPBuff(512)
        .nMaxFile = 511
        .lpstrFileTitle = LPBuff(512)
        .nMaxFileTitle = 511
        .flags = OFN_HIDEREADONLY Or OFN_LONGNAMES Or _
   OFN_OVERWRITEPROMPT '>> Or OFN_NOREADONLYRETURN (НЕ РАБОТАЕТ)
    End With
    x = GetSaveFileName(CommonDialogSave)
    If x <> API_TRUE Then
        GetSaveDialog = vbNullString
        Exit Function
    Else
        GetSaveDialog = StripTerminator(CommonDialogSave.lpstrFile)
    End If
End Function

Public Function LPBuff(ByVal lNumber As Integer) As String
    LPBuff = String$(lNumber, vbNullChar)
End Function


Я уже все варианты расположения флагов перепробовал - не помогает :( .
Как же мне заставить работать флаг OFN_NOREADONLYRETURN?

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

Сообщение tyomitch » 26.01.2005 (Ср) 16:42

Ещё раз, в чём проблема-то?
Что именно не работает?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.01.2005 (Ср) 19:00

2 tyomitch

BV писал(а):Как же мне заставить работать флаг OFN_NOREADONLYRETURN?


По моему всё понятно. Ещё могу добавить, что все остальные флаги работают нормально.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.01.2005 (Ср) 20:50

Ну неужели никто не знает?
Все используют Cdlg32.ocx что-ли?...

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

Сообщение tyomitch » 27.01.2005 (Чт) 9:30

Попробуй переобъявить "Const OFN_NOREADONLYRETURN = &H8000&"
(с амперсендом на конце)
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 27.01.2005 (Чт) 22:50

2 tyomitch

Точно! Работает!
Спасибо!

Одного не пойму - почему во встроенном в VB6 API viewer'е и даже в APIViewer 2004 эта константа указана неправильно?... Что же теперь даже им нельзя доверять :?

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

Сообщение A.A.Z. » 28.01.2005 (Пт) 0:18

Правильное объявление - Const OFN_NOREADONLYRETURN As Long = &H8000. В API-Viewer'е можно указать, в каком формате выводить константы. :roll:

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 28.01.2005 (Пт) 1:28

2 A.A.Z.

Видимо ты даже не смотрел на код, который я вписал в вопрос:

BV писал(а):Дело вот в чём:

Код: Выделить всё
Public Const OFN_NOREADONLYRETURN As Long = &H8000
...

Public Function GetSaveDialog(ByVal hwndMain As Long, ByVal strTitle As String, ByVal...


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

Сообщение tyomitch » 28.01.2005 (Пт) 7:34

BV писал(а):Одного не пойму - почему во встроенном в VB6 API viewer'е и даже в APIViewer 2004 эта константа указана неправильно?... Что же теперь даже им нельзя доверять :?

Им никогда нельзя было доверять :-)
Для полноценного машинного перевода нужен искуственный интеллект, который пока ещё не изобрели. Придётся пользоваться естественным ;-)


2AAZ: правильное объявление - "Const BrownFox = &HF00D&". "As Long" влияет на тип константы, но не на интерпретацию его значения (в данном случае, &HF00D без амперсенда рассматривалось бы как Integer). С другой стороны, константа с амперсендом на конце автоматически приобретает тип Long. Резюме:
Код: Выделить всё
Const BrownFox = &HF00D ' неправильно: тип Integer, значение &HF00D%
Const BrownFox As Long = &HF00D ' неправильно: тип Long, значение &HFFFFF00D&
Const BrownFox = &HF00D& ' правильно: тип Long, значение &HF00D&
Const BrownFox As Long = &HF00D& ' правильно: тип Long, значение &HF00D&

Третий и четвёртый синтаксис отличаются только длиной (по смыслу - одно и то же). Сам я использую третий, чего всем и рекоммендую :-)
Изображение

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 28.01.2005 (Пт) 12:30

tyomitch писал(а):
Код: Выделить всё
Const BrownFox As Long = &HF00D ' неправильно: тип Long, значение &HFFFFF00D&

Да :) я сколько раз попадался с этими константами по невнимательности:
&HF00D - это integer. с минусом. И в рез-те приведения к типу Long - значение не меняется
Есть ли у меня вопрос? У меня всегда есть вопрос

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 28.01.2005 (Пт) 18:47

tyomitch писал(а):Им никогда нельзя было доверять :)
Для полноценного машинного перевода нужен искуственный интеллект, который пока ещё не изобрели. Придётся пользоваться естественным :wink:


Как же тогда проверять и исправлять такие ошибки? На MSDN к мелкософту ходить, что-ли :?
Последний раз редактировалось BV 28.01.2005 (Пт) 19:12, всего редактировалось 1 раз.

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

Сообщение tyomitch » 28.01.2005 (Пт) 18:55

BV писал(а):
tyomitch писал(а):Им никогда нельзя было доверять
Для полноценного машинного перевода нужен искуственный интеллект, который пока ещё не изобрели. Придётся пользоваться естественным


Как же тогда проверять и исправлять такие ошибки? На MSDN к мелкософту ходить, что-ли :?
Зачем, можно поставить себе локальный... Неужто под такое дело гиг на диске жалко?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 28.01.2005 (Пт) 18:59

2 tyomitch

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

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

Сообщение A.A.Z. » 28.01.2005 (Пт) 19:28

Эх... Опять я лажанулся... :( :oops:

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

Сообщение tyomitch » 29.01.2005 (Сб) 22:18

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

Ну откуда же софтина может знать, как правильно? Может, софтине ещё и всю прогу за тебя написать? ;-)
Т.е. я вполне тебя понимаю, но "если хочешь, чтобы что-то было сделано хорошо - сделай это сам" (с)
Изображение

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 30.01.2005 (Вс) 18:18

tyomitch писал(а):"если хочешь, чтобы что-то было сделано хорошо - сделай это сам" (с)

Даже вот так это звучало, на самом деле :) :
Если хочешь что-нибудь сделать - сделай это сам
Есть ли у меня вопрос? У меня всегда есть вопрос

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 30.01.2005 (Вс) 22:06

tyomitch писал(а):Т.е. я вполне тебя понимаю, но "если хочешь, чтобы что-то было сделано хорошо - сделай это сам" (с)


Вот уж верно!...
Но не в этом случае.


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

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

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

    TopList  
cron