Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19

Обзор папок, вспомнить прежную открытую папку

08.01.2014, 12:00. Показов 6531. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сейчас делаю отдельный компонент который бы при нажатии кнопки
показывал папки в отдельном окне

часть информации собрал на англо-язычных сайтах

там в архиве некоторые коментарии переведены
и читаются ужасно, но понять можно

сам то я вот что хочу выяснить
куда записать значение пути чтоб при повторном вызове окна обзора

эта папка была уже открыта, а корневая папка так-же оставалась бы
рабочим столом
ниже текст + архив прилагаю:

код в архиве
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Option Explicit
'При нажатии на кнопку вы получите доступ ко всем папкам и файлам
'компьютера. Вы можете ограничить возможность выбирать только папки.
'Наличие BIF-констант в вызываемой функции и определяет такие возможности
'по выбору.
 
Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
 
Private Enum WhatBrowse
    BIF_RETURNONLYFSDIRS = 1 'Только вернуться каталоги файловой системы.  Если пользователь выбирает папки, которые не являются частью файловой системы, кнопка ОК будет недоступна. // Примечание Кнопка ОК остается включенным для "\ \ сервер" предметов, а также "\ \ сервер \ акцию" и предметов каталога.  Однако, если пользователь выбирает пункт "\ \ сервер", попутный PIDL возвращаемый SHBrowseForFolder , чтобы SHGetPathFromIDList не удается.
    BIF_DONTGOBELOWDOMAIN = 2 'Не включайте сетевые папки ниже уровня домена в управления иерархического диалогового окна.
    BIF_STATUSTEXT = 4 'Включите область состояния в диалоговом окне.  Функция обратного вызова можно установить текст состояния, посылая сообщения в диалоговое окно.  Этот флаг не поддерживается, если BIF_NEWDIALOGSTYLE указан.
    BIF_RETURNFSANCESTORS = 8 'Только вернуться файловой системы предков.  Предком является вложенной, что это под корневой папке в иерархии пространства имен.  Если пользователь выбирает предка корневой папке, что не является частью файловой системы, кнопка ОК будет недоступна.
    BIF_EDITBOX = 16 'Включите элемент управления редактирования в диалоговом окне просмотра, что позволяет пользователю ввести имя элемента.
    BIF_VALIDATE = 32 'Если пользователь недопустимое имя в поле редактирования, диалоговое окно просмотра называет приложения BrowseCallbackProc с сообщением BFFM_VALIDATEFAILED.  Этот флаг игнорируется, если BIF_EDITBOX не уточняется.
    BIF_NEWDIALOGSTYLE = 64 'Используйте новый пользовательский интерфейс.  Установка этого флага предоставляет пользователю с большим диалоговом окне может быть изменен.  Диалоговое окно имеет несколько новых возможностей, в том числе: возможность перетащить и падение в диалоговом окне, изменения порядка, контекстных меню, новые папки, удалять и других команд контекстного меню. // Примечание Если COM инициализируется через CoInitializeEx с COINIT_MULTITHREADED установленным флагом, SHBrowseForFolder терпит неудачу, если BIF_NEWDIALOGSTYLE передается.
    BIF_USENEWUI = 80 'Используйте новый пользовательский интерфейс, в том числе в поле ввода.  Этот флаг эквивалентен BIF_EDITBOX | BIF_NEWDIALOGSTYLE. // Примечание Если COM инициализируется через CoInitializeEx с COINIT_MULTITHREADED установленным флагом, SHBrowseForFolder терпит неудачу, если BIF_USENEWUI передается.
    BIF_BROWSEINCLUDEURLS = 128 'Диалоговое окно просмотра может отображать URL.  Флаги BIF_USENEWUI и BIF_BROWSEINCLUDEFILES также должен быть установлен.  Если любой из этих трех флагов не установлен, то в диалоговом окне Браузер отвергает URL.  Даже когда эти флаги установлены, диалоговое окно обзора отображает URL-адреса, только если папка, которая содержит выбранный элемент поддерживает URL.  Когда папка в IShellFolder :: GetAttributesOf метод называется запросить атрибуты выбранного элемента, папка должна установить флаг атрибута SFGAO_FOLDER.  В противном случае, диалоговое окно просмотра не будет отображать URL.
    BIF_UAHINT = 256 'В сочетании с BIF_NEWDIALOGSTYLE, добавляет намек использования в диалоговое окно, вместо окне редактирования.  BIF_EDITBOX отменяет этот флаг.
    BIF_NONEWFOLDERBUTTON = 512 'Не включайте кнопку New Folder в диалоговом окне просмотра
    BIF_NOTRANSLATETARGETS = 1024 'Если выбранный элемент является сокращением, вернуть PIDL самого ярлыка, а не его цель.
    BIF_BROWSEFORCOMPUTER = 2048 'Только вернуть компьютеры.  Если пользователь выбирает ничего, кроме компьютера, кнопка ОК будет недоступна.
    BIF_BROWSEFORPRINTER = 4096 'Только позвольте выбор принтеров.  Если пользователь выбирает ничего, кроме принтера, кнопка ОК будет недоступна.
    BIF_BROWSEINCLUDEFILES = 8192 'Диалоговое окно просмотра отображает файлы, а также папки.
    BIF_SHAREABLE = 16384 'Диалоговое окно просмотра может отображать совместно используемых ресурсов на удаленных системах.  Это предназначено для приложений, которые хотят выставить удаленных акций на локальной системе.  Флаг BIF_NEWDIALOGSTYLE также должен быть установлен.
    BIF_BROWSEFILEJUNCTIONS = 32768 'Windows 7 и выше.  Разрешить папки переходов, таких как библиотеки или сжатый файл с расширением. Имя архива, чтобы можно просматривать.
End Enum
 
Private Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
 
Public Function fBrowseForFolder(hWndOwner As Long, sPrompt As String, WhatBr) As String
    Dim iNull As Integer
    Dim lpIDList As Long
    Dim lResult As Long
    Dim sPath As String
    Dim udtBI As BrowseInfo
 
    With udtBI
        .hWndOwner = hWndOwner
        .lpszTitle = lstrcat(sPrompt, "")
        .ulFlags = WhatBr
    End With
    lpIDList = SHBrowseForFolder(udtBI)
 
    If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        lResult = SHGetPathFromIDList(lpIDList, sPath)
        Call CoTaskMemFree(lpIDList)
        iNull = InStr(sPath, vbNullChar)
        If iNull Then sPath = Left$(sPath, iNull - 1)
    End If
 
    fBrowseForFolder = sPath
End Function
 
Private Sub Command1_Click()
    Dim sStr As String
    'вместо входящего параметра BIF_BROWSEINCLUDEFILES вы можете использовать одну из
    'BIF-констант, описанных строчкой Private Enum WhatBrowse (смотри в разделе General_Declarations)
    sStr = fBrowseForFolder(hWnd, "Выберите папку, файл, принтер или компьютер", 1 + BIF_EDITBOX)
    Text1.Text = sStr
End Sub
Вложения
Тип файла: rar Обзор папок.rar (3.7 Кб, 47 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2014, 12:00
Ответы с готовыми решениями:

Закрыть папку открытую в проводнике
Подскажите, кто может, как программно закрыть папку открытую в проводнике

Обзор папок
Всем доброго времени суток. Решил установить себе тему на свой Windows, но разочаровавшись результатом, вернул все обратно. Но уже после...

Обзор папок(в формах)
Нужно добавить в форму обзор папок, на примере. Как это организовать?

55
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
10.01.2014, 10:38
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от FelixMacintosh Посмотреть сообщение
The trick Здравствуйте !
Привет


Сделай в своих контролах возможность добавлять пользовательские окна в диалог, тогда он получит большую практичекую пользу. Сделай множество событий, при выборе файла (папки) и т.п. Хотя я думаю, что такой уже есть контрол где-нибудь.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
10.01.2014, 10:59  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Сделай множество событий, при выборе файла (папки)
там событий, по пальцам пересчитать можно

события клика на файл // папку

событие клика на цвет // шрифт

+ стандртные, которые я пока не ставлю из за чрезмерной громоздкости
события от мыши и от клавы

Цитата Сообщение от The trick Посмотреть сообщение
Хотя я думаю, что такой уже есть контрол где-нибудь.
не встречал...
сделаю для себя опубликую здесь и ещё в нескольких местах )
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
10.01.2014, 11:05
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
там событий, по пальцам пересчитать можно
Там очень много событий можно сделать, посмотри список уведомлений от диалоговых окон
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
10.01.2014, 11:39  [ТС]
Жаль что контролы мало обсуждаются...

модераторам бы надо бы сделать ссылку, на главных страницах
по VB Контролы для VisualBasic
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
10.01.2014, 23:53  [ТС]
а как сделать разграничение на категории ?
на примере того, как это реализованно в стандартных контролах
Изображения
 
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
10.01.2014, 23:57
Tool -> ProcedureAttributes -> Advanced -> PropertyCategory. Также там можно сделать чтобы обновлялись данные непосредственно при вводе, как в Label'е, и еще кучу разных возможностей.
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 00:01  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
и еще кучу разных возможностей.
да, кстате...
у некоторых фирменных контролов там целые окна вылазиют в настройках
спасибо
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
11.01.2014, 00:04
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
у некоторых фирменных контролов там целые окна вылазиют в настройках
Это называется PropertyPage (Project -> AddPropertyPage), а в ProcedureAttributes можно выбрать нужную PropertyPage для любого свойства + для стандартных свойств уже готовые есть.
2
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 00:33  [ТС]
Сделаю свой фирменный )
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 11:23  [ТС]
Отлично стало получатся
ниже рисунок как я разделяю на категории )
чему я очень рад
Миниатюры
Обзор папок, вспомнить прежную открытую папку  
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 13:32  [ТС]
А как правильно поменять константы

чтоб в одном случае возникал диалог открыть
а в другом случае сохранить как

меня интересует чтоб в самом диалоге тоже название кнопки было сохранить
а не открыть при сохранении



Модуль компонента
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
Option Explicit
'
'   OpenFile
'
Dim fso As FileSystemObject
Dim myDic As Dictionary
'Event Declarations:
Event SelectFile(Filename As String) 'MappingInfo=Combo1,Combo1,-1,Click
'Default Property Values:
Const m_def_DialogStyle = 0
'------------------------------
 
'-------------  Вот они !
 
Const m_def_OFNFlags0 = OFNexplorer Or OFNNoChangeDir Or OFNEnableHook Or OFNEnableIncludeNotify Or OFNFILEMUSTEXIST
Const m_def_OFNFlags1 = OFNexplorer Or OFNNoChangeDir Or OFNEnableHook Or OFNEnableIncludeNotify Or OFNHIDEREADONLY Or OFNCreatePrompt
'------------------------
 
 
Const m_def_Title0 = "Открыть"
Const m_def_Title1 = "Сохранить как.."
Public Enum dlgStyle
    [Открыть] = 0
    [Сохранить как..] = 1
End Enum
'------------------------------------
Const m_def_FilterIndex = 0
Const m_def_Filter = "Любой файл|*.*|Мультимедиа wav/mp3/mp4/avi|*.wav*;*.mp3*;*.mp4*;*.avi*|"
'Property Variables:
Dim m_DialogStyle As Long
Dim m_Title As String
Dim m_OFNFlags As Long
Dim m_FilterIndex As Long
Dim m_Filter As String
 
Private Sub Combo1_Click()
    RaiseEvent SelectFile(Combo1.Text)
    Combo1.ToolTipText = Combo1.Text
End Sub
 
Private Sub Command1_Click()
    Dim f&, Filename$
    With OFN
 
        .lpstrFilter = Replace(Filter, "|", Chr$(0))
        .lpstrTitle = Title
        .nFilterIndex = FilterIndex
        Filename = mGetOpen.GetOpen(OFNFlags)
        
        If fso.FileExists(Filename) And Not myDic.Exists(Filename) Then
            myDic.Add Filename, ""
            For f = Combo1.ListCount - 1 To 0 Step -1
                Combo1.List(f + 1) = Combo1.List(f)
            Next
            Combo1.List(0) = Filename
            GoTo setFileName: 'Чтоб избежать повторных файлов
        ElseIf myDic.Exists(Filename) Then
setFileName:
            Combo1.Text = Filename
            Combo1.ToolTipText = Combo1.Text
            Combo1.SelStart = Len(Filename)
            RaiseEvent SelectFile(Filename)
        End If
    End With
End Sub
 
Private Sub UserControl_Initialize()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set myDic = CreateObject("Scripting.Dictionary"): myDic.CompareMode = TextCompare
    '-----------------------------
    Picture1.BorderStyle = 0
    Combo1.Text = ""
End Sub
 
Private Sub UserControl_Resize()
    Const q = 45
    On Error Resume Next
    With UserControl
        .Height = Combo1.Height + q * 7
        Frame1.Move 0, 0, .Width, .Height
        Picture1.Move q * 2, q * 5, .Width - q * 4, .Height - q * 6
    End With
    With Picture1
        Command1.Move .Width - Command1.Width - 0, 0, Command1.Width - 0, Combo1.Height
        Combo1.Move 0, 0, .Width - Command1.Width - q * 2
    End With
    
End Sub
 
 
'Load property values from storage
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
 
    Frame1.Caption = PropBag.ReadProperty("FrameCaption", "Выбор файла")
    Command1.Caption = PropBag.ReadProperty("ButtonCaption", "Обзор")
    m_Filter = PropBag.ReadProperty("Filter", m_def_Filter)
    m_FilterIndex = PropBag.ReadProperty("FilterIndex", m_def_FilterIndex)
    m_OFNFlags = PropBag.ReadProperty("OFNFlags", m_def_OFNFlags0)
    m_Title = PropBag.ReadProperty("Title", m_def_Title0)
    m_DialogStyle = PropBag.ReadProperty("DialogStyle", m_def_DialogStyle)
End Sub
 
'Write property values to storage
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
 
    Call PropBag.WriteProperty("FrameCaption", Frame1.Caption, "Выбор файла")
    Call PropBag.WriteProperty("ButtonCaption", Command1.Caption, "Обзор")
    Call PropBag.WriteProperty("Filter", m_Filter, m_def_Filter)
    Call PropBag.WriteProperty("FilterIndex", m_FilterIndex, m_def_FilterIndex)
    Call PropBag.WriteProperty("OFNFlags", m_OFNFlags, m_def_OFNFlags0)
    Call PropBag.WriteProperty("Title", m_Title, m_def_Title0)
    Call PropBag.WriteProperty("DialogStyle", m_DialogStyle, m_def_DialogStyle)
End Sub
 
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MappingInfo=Frame1,Frame1,-1,Caption
Public Property Get FrameCaption() As String
    FrameCaption = Frame1.Caption
End Property
 
Public Property Let FrameCaption(ByVal New_FrameCaption As String)
    Frame1.Caption() = New_FrameCaption
    PropertyChanged "FrameCaption"
End Property
 
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MappingInfo=Command1,Command1,-1,Caption
Public Property Get ButtonCaption() As String
    ButtonCaption = Command1.Caption
End Property
 
Public Property Let ButtonCaption(ByVal New_ButtonCaption As String)
    Command1.Caption() = New_ButtonCaption
    PropertyChanged "ButtonCaption"
End Property
 
 
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MemberInfo=13,0,0,Любой файл|*.*|
Public Property Get Filter() As String
    Filter = m_Filter
End Property
 
Public Property Let Filter(ByVal New_Filter As String)
    m_Filter = New_Filter
    PropertyChanged "Filter"
End Property
 
'Initialize Properties for User Control
Private Sub UserControl_InitProperties()
    m_Filter = m_def_Filter
    m_FilterIndex = m_def_FilterIndex
    m_OFNFlags = m_def_OFNFlags0
    m_Title = m_def_Title0
    m_DialogStyle = m_def_DialogStyle
End Sub
 
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MemberInfo=8,0,0,0
Public Property Get FilterIndex() As Long
    FilterIndex = m_FilterIndex
End Property
 
Public Property Let FilterIndex(ByVal New_FilterIndex As Long)
    m_FilterIndex = New_FilterIndex
    PropertyChanged "FilterIndex"
End Property
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MemberInfo=8,0,2,0
Public Property Get OFNFlags() As CdlgExt_Flags
    OFNFlags = m_OFNFlags
End Property
 
Public Property Let OFNFlags(ByVal New_OFNFlags As CdlgExt_Flags)
    m_OFNFlags = New_OFNFlags
    PropertyChanged "OFNFlags"
End Property
 
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MemberInfo=13,0,0,Открыть
Public Property Get Title() As String
    Title = m_Title
End Property
 
Public Property Let Title(ByVal New_Title As String)
    m_Title = New_Title
    PropertyChanged "Title"
End Property
 
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MemberInfo=8,0,0,0
Public Property Get DialogStyle() As dlgStyle
    DialogStyle = m_DialogStyle
End Property
 
Public Property Let DialogStyle(ByVal New_DialogStyle As dlgStyle)
    m_DialogStyle = New_DialogStyle
    Title = IIf(New_DialogStyle = Открыть, m_def_Title0, m_def_Title1)
    OFNFlags = IIf(New_DialogStyle = Открыть, m_def_OFNFlags0, m_def_OFNFlags1)
    PropertyChanged "DialogStyle"
End Property



ниже целиком групповой проект:
Вложения
Тип файла: rar Файловые контролы.rar (27.0 Кб, 9 просмотров)
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
11.01.2014, 13:34
GetOpenFileName, GetSaveFileName
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 18:55  [ТС]
Спасибо мне пора очки покупать )

Добавлено через 5 часов 16 минут
Теперь я сделал отдельные контролы для
сохранения и Open
почти уже всё готово, есть дополнительные фишки
вопрос ! как задать имя файла
в окно сохранения так, чтоб оно высвечивалось
внизу синим в окне диалога (как Default в InputBox)

вот код в модуле

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function ShowSave$(OFNFlags, FileName$)
    With OFN
        .lStructSize = Len(OFN)
        .hInstance = App.hInstance
        .flags = OFNFlags
        .lpstrFile = String$(MAX_PATH, 0)
        .nMaxFile = MAX_PATH
        .lpstrFileTitle = String$(MAX_PATH, 0)
        .nMaxFileTitle = MAX_PATH
        If GetSaveFileName(OFN) Then
            ShowSave = Left$(.lpstrFile, InStr(.lpstrFile, vbNullChar) - 1)
        End If
    End With
End Function
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 19:00  [ТС]
Теперь и размер кнопок автоматически меняется
если изменить надпись...
Миниатюры
Обзор папок, вспомнить прежную открытую папку  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 19:03  [ТС]
а в выпадающее меню для операции сохранения записываются
только те значения которые удачно сохранились
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 19:10  [ТС]
вот моя "Информационная технология"
Вложения
Тип файла: rar Файловые контролы.rar (29.2 Кб, 11 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 19:22  [ТС]
тоесть к какому параметру из набора OFN, пристроить FileName

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function ShowSave$(OFNFlags, FileName$)
    With OFN
        .lStructSize = Len(OFN)
        .hInstance = App.hInstance
        .flags = OFNFlags
        .lpstrFile = String$(MAX_PATH, 0)
        .nMaxFile = MAX_PATH
        .lpstrFileTitle = String$(MAX_PATH, 0)
        .nMaxFileTitle = MAX_PATH
        If GetSaveFileName(OFN) Then
            ShowSave = Left$(.lpstrFile, InStr(.lpstrFile, vbNullChar) - 1)
        End If
    End With
End Function
Добавлено через 1 минуту
всё перепробывал, поле ввода в диалоге пустует
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
11.01.2014, 20:12
lpstrFileName - задавай существующий путь, а имя файла будет в текстовом поле
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
11.01.2014, 21:22  [ТС]
1 lpstrFileName - она в структуре не указанна

2 стоит ли для неё задавать размер nMax... = 260 ?

Добавлено через 3 минуты
вот структура там такой переменной нет

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
    pvReserved As Long
    dwReserved As Long
    FlagsEx As Long
End Type
Добавлено через 1 минуту
может структура не полная у меня ?

Добавлено через 5 минут
я попробую найти эту структуру в своём API мененжере

Добавлено через 3 минуты
в моём API их почемуто ещё менше что за аномалия ?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
End Type
Добавлено через 7 минут
Пытался дописать в первую структуру имя lpstrFileName
но тогда диалог вовсе не запускаеться

Добавлено через 25 минут
Получилось вывести имя !

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function ShowSave$(OFNFlags, FileName$)
    With OFN
    ' FileName$ - полный путь
        .lStructSize = Len(OFN)
 
        .hInstance = App.hInstance
        .flags = OFNFlags
        .lpstrFile = FileName$ & String$(MAX_PATH, 0)
        
        .nMaxFile = MAX_PATH
        .lpstrFileTitle = String$(MAX_PATH, 0)
        
        .nMaxFileTitle = MAX_PATH
        If GetSaveFileName(OFN) Then
            ShowSave = Left$(.lpstrFile, InStr(.lpstrFile, vbNullChar) - 1)
        End If
    End With
End Function
.lpstrFile = FileName$ & String$(MAX_PATH, 0)

вот как надо было сделать

тоесть заканчиваться должно было нулевым значением

Добавлено через 9 минут
Осталось только красоту навести
и завтра можно выложить свою информационную технологию
сделать Релиз так сказать )
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
11.01.2014, 23:10
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
.lpstrFile = FileName$ & String$(MAX_PATH, 0)
У тебя весь буфер должен быть MAX_PATH символов. Делать правильно надо так например
Visual Basic
1
2
3
4
    Dim Z As String
    
    Z = String$(MAX_PATH, vbNullChar)
    LSet Z = "D:\Temp\Script3.txt"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2014, 23:10

Кнопка обзор папок
У меня в окне текстовое поле и кнорка обзор. При нажатии мне нужно реализовать обзор всех папок и файлов и после выбора выбранный файл...

Как можно создать древесный обзор папок в своём окне?
Как можно создать древесный обзор папок в своём окне, на подобию того из Windows Explorer или AcdSee ?

Убрать появление окна "Обзор папок" при запуске Лазаруса
Уважаемые форумчане, вопрос такой, при запуске Лазарус вылетает окно "Обзор папок", сильно это не напрягает, но подскажите как его...

Открыть диалог "обзор папок"
Вопрос не совсем имеет отношение к cmd\bat, но все же спрошу здесь: как через rundll32 открыть диалог "Обзор папок"? Знаю...

Найти папку с наибольшим числом папок
Помогите, пожалуйста, в универе задали следующее: "Найти папку с наибольшим числом папок непосредственно в ней и вывести её...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru