Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2012, 02:05   #1
vlkr
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 41
По умолчанию Открытие диалового окна выбора файлов в win64

Для открытия диалогового окна в win 32 я использую метод GetOpenFileName

Код:
Private Sub Browse_Click()
Dim NewName As String
On Error GoTo Err_Browse_Click
Dim i As Integer
    i = GetDBFileNameDlg(0, NewName)
If i = -1 Then
    Me.Pname.Value = NewName
    Pname = NewName
End If
Exit_Browse_Click:
    Exit Sub

Err_Browse_Click:
    MsgBox Err.Description
    Resume Exit_Browse_Click
End Sub
Код:
Function GetDBFileNameDlg(HWn As Long, fName As String) As Integer
On Error GoTo Err_
Dim l As Long
Dim pOpenfilename As OPENFILENAME
   fName = ""
   GetDBFileNameDlg = False
pOpenfilename.lStructSize = Len(pOpenfilename)
pOpenfilename.lpstrFilter = "*.accdb" + Chr(0) + "*.accdb" + Chr(0) + Chr(0)
pOpenfilename.lpstrFile = String(255, Chr(0))
pOpenfilename.nMaxFile = 255
pOpenfilename.lpstrTitle = "Choose the file with table of database"
pOpenfilename.hwndOwner = HWn
pOpenfilename.lpstrInitialDir = "C:\"

l = GetOpenFileName(pOpenfilename)
If l = 1 Then
   fName = pOpenfilename.lpstrFile
   GetDBFileNameDlg = True
End If

Exit_:
   Exit Function

Err_:
    MsgBox Err.Description
    Resume Exit_
End Function
Код:
Option Compare Database
Option Explicit
Dim DATADbName As Variant

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

Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Этот код работает в win32, а win 64 нет. Диалоговое окно не вызывается,
что-бы вы долго не разбирались в коде обратите внимание на этот код


Код:
Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Везде пишут что для 64 необходимо PtrSafe и это так без этого 64 выдает ошибку. 32 рабодает как с PtrSafe так и без PtrSafe. В 64 у меня окно не вызывается. Поиск в интернете результатов не дал.

Помогите кто чем сможет.
vlkr вне форума Ответить с цитированием
Старый 09.09.2012, 09:46   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте vlkr.
Для выбора имени файла достаточно подключить к проекту библиотеку Microsoft Office XX.0 Object Library
и использовать стандартный диалог (без применения API как в Вашем примере)
диалоги у Office такие:
1 - msoFileDialogOpen
2 - msoFileDialogSaveAs
3 - msoFileDialogFilePicker
4 - msoFileDialogFolderPicker

а использовать можно например так:
Код:
Function getOpenFileDialog$(Optional sInitFolder$)
    With Application.FileDialog(msoFileDialogOpen)
        .Title = "Открыть файл"
        .Filters.Clear
        .Filters.Add "MS Access 2007", "*.accdb"
        .AllowMultiSelect = False
        .InitialFileName = sInitFolder
        If Not .Show = 0 Then getOpenFileDialog = Trim(.SelectedItems.Item(1))
    End With
End Function
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 09.09.2012, 15:56   #3
vlkr
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 41
По умолчанию

Спасибо! Буду пробовать.
vlkr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие окна в новом потоке. JEF WPF, UWP, WinRT, XAML 1 18.10.2011 08:35
Получить дескриптор окна для выбора цвета Тоба Win Api 10 21.08.2011 13:19
CppWEbBrowser. Запрет на открытие нового окна, и открытие его в том же окне Askar_g Общие вопросы C/C++ 4 25.06.2011 20:00
открытие окна в Delphi R11 Помощь студентам 3 14.02.2008 16:23
открытие окна в delphi dima00 Общие вопросы Delphi 14 27.06.2007 23:25