Страница: 1 |
Здравствуйте, товарищи! Вот хочу сделать такую штуку: Есть у меня на форме кнопка (CommandButton1) и ListBox (List1).У этого листбокса в параметре Style я поставил CheckBox. Вопрос: Как сделать так, чтобы при нажатии на кнопку, открывался диалог открытия файла (с расширением только MP3) и чтобы можно было выбрать ни один, а НЕСКОЛЬКО файлов. И еще, чтобы после выбора файлов, их названия отображались в ListBox'е??? БОЛЬШОЕ СПАСИБО!
Тут стоит определиться хотим ли мы использовать сторонние ocx'ы... Если хотим (а по вопросу оно видно , не в обиду сказано, то подключаем Microsoft CommonDilog, или чо-то в этом роде, т.к. никогда не пользовался и не собираюсь... А дальше, полазаем по свойствам, поставим флажок Multiselect (или что подобное), после выбора вернется строка с именами всех файлов, в ocx'ном не знаю, а в API'шном все имена разделены то-ли vbCrLf, то-ли vbNullChar... Далее функцией Split() разбиваешь эту строку на массив и циклом добавляешь в листбокс... Пример из API-Guide: Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long 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 End Type Private Sub Form_Load() 'KPD-Team 1998 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net Dim OFName As OPENFILENAME OFName.lStructSize = Len(OFName) 'Set the parent window OFName.hwndOwner = Me.hWnd 'Set the application's instance OFName.hInstance = App.hInstance 'Select a filter OFName.lpstrFilter = "Text Files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0) 'create a buffer for the file OFName.lpstrFile = Space$(254) 'set the maximum length of a returned file OFName.nMaxFile = 255 'Create a buffer for the file title OFName.lpstrFileTitle = Space$(254) 'Set the maximum length of a returned file title OFName.nMaxFileTitle = 255 'Set the initial directory OFName.lpstrInitialDir = "C:\" 'Set the title OFName.lpstrTitle = "Open File - KPD-Team 1998" 'No flags OFName.flags = 0 'Show the 'Open File'-dialog If GetOpenFileName(OFName) Then MsgBox "File to Open: " + Trim$(OFName.lpstrFile) Else MsgBox "Cancel was pressed" End If End Sub Для мультиселекта используй флаг Const OFN_ALLOWMULTISELECT As Long = &H200 Только замечу, что для выделения множества файлов, это лучше не использовать, т.к. придется изменять: OFName.lpstrFileTitle OFName.nMaxFile = 255 OFName.nMaxFileTitle = 255 Я не уверен, но кажется при недостаточном размере буфера функция возвращает ERROR_MORE_DATA и помещает в структуру OPENFILENAME требуемый размер строки... Страница: 1 |
Вопрос: Как сделать диалог открытия файла?
Добавлено: 17.03.04 20:23
Автор вопроса: SunDevil
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 17.03.04 21:33
Если же ты не хочешь использовать MS CommonDilog, то поищи модуль/класс DlgEx (обычно cDlgEx), там почти все то же самое, но на API, если туда не залезать, то все получится просто
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 17.03.04 21:36
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 17.03.04 21:46
При этом неизвестна длинна получаемого буфера а следовательно мы не можем точно определить его размер и в нужном кол-ве выделить память
Я когда-то дня три с этим бился, решения так и не нашел
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 17.03.04 21:56