Автор вопроса: Wolf4D | Web-сайт:www.madnesstudio.ru
Когда-то не очень давно я задавал вопрос слудующего содержания:
Возник вопрос:
Наверное, практически все видели Adobe Photoshop. Наверное, многие замечали, что при выделении нескольких файлов в диалоге открытия, Photoshop, собственно, несколько файлов и открывает. Как такое можно реализовать на VB 6 - чтобы через одно открытие диалога захватывать несколько файлов?
В общем, нашлась ссылка в примерах:
http://www.vbnet.ru/faq/showtopic.asp?id=333
Опробовал. Работает. Вот только результат выдаёт в таком виде:
Если пробую выделить, например, 2 файла, 1.TXT и 2.TXT, лежащие на диске D:
D:\ 1.txt 2.txt
Вот в чём вопрос (может, я спрашиваю что-то ужасно простое): как получить названия и пути отдельных файлов (обычное разделение по местонахождению пробела или точки не подходит (я могу создать папку "Просто папка.для прикола" и программа выйдет из строя).
+ вопрос №2: в диалоге открытия почему-то видны досовские имена директорий и файлов. Как бы это можно было бы исправить?
Ты наверно какой - то кривой пример нашел.
Вот смотри:
Private Const OFN_EXPLORER = &H80000
Private Const OFN_ALLOWMULTISELECT = &H200
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 Declare Function GetOpenFileNamePreview Lib "msvfw32.dll" (ByRef lpofn As OPENFILENAME) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim OFN As OPENFILENAME, Ret As Long, t As String
With OFN
.lStructSize = Len(OFN)
.hInstance = App.hInstance
.hwndOwner = Me.hWnd
.lpstrTitle = "Open a file"
.lpstrFilter = "TXT file (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*"
.lpstrFile = String(255, 0)
.nMaxFile = 255
.flags = OFN_EXPLORER Or OFN_ALLOWMULTISELECT
End With
Ret = GetOpenFileNamePreview(OFN)
If Ret <> 0 Then
CloseHandle Ret
t = Replace(OFN.lpstrFile, Chr(0), vbCrLf)
Text1.Text = t
End If
End Sub
поставь Text1.MultiLine = True
Грубо говоря, в конце концов в OFN.lpstrFile у нас будет следующее:
1 - адрес папки, в которой ты выбрал файлы
2,3...n - имена файлов
а в качестве разделителя используется не пробел, а chr(0), так что проблем с отделением папки от файлов нет
Спасибо! Теперь действительно работает.
Вот только в конце строки программа мне выводит с четверть тысячи вот таких вот chr(0). Но это дело поправимое.
Надеюсь, темы "Открытие нескольких файлов - Phase 3" не появится