Тема: Как из VBA вызвать стандартное окно диалога AutoCAD?

В VBA для MS Word можно вызывать встроенные окна диалога и вытаскивать из них параметры. Есть такая возможность и в LISP. А как это сделать в VBA для Autocad.
Нужно вызвать диалоговое окно выбора каталога.

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Это нужно делать через API функции Windows.

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Например...

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Выкрутился так.
1. Написал лисп процедуру по вызову окна диолога выбора файла
2. Сохранил результат в переменную users1
3. В этой же процедурке вызываю VBA макрос
4. Макрос считывает имя файла из users1...

(setvar "filedia" 1)
(setq fn (getfiled "Выбор файла" "" "txf" 4))
(setvar "users1" fn)
(vl-vbarun "importTXF")

Добавляю пункт меню
ID_LoadTXF    [Импорт TXF](LOAD"C:/data/openfile.lsp")
и можно работать

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

https://www.caduser.ru/forum/topic16135.html

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

> ХуМа
Вот на лиспе...
Где-то на форуме уже выкладывал, но как-то сразу не нашел.
http://discussion.autodesk.com/thread.j … ID=4218606
Посмотри в самом низу.

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

> JS

> Евгений Елпанов
Вообще-то XyMa не совсем об этом спрашивал. Ему нужен не каталог, а имя файла. Тут понадобится импортировать одну из двух функций: GetOpenFileNameA или GetSaveFileNameA из comdlg32.dll
Но так как я не специалист в VBA, то позорится не буду. smile Может есть и более простой способ.

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Тогда может так?

Public Sub ad_OpenDialog()
Dim adApp As AsdkUNSUPP2000Lib.Application
Dim adFileOpen As String
Set adApp = Application.GetInterfaceObject("Asdkunsupp2000.Application.1")
adFileOpen = adApp.ShowOpenDialog("File Open Dialog", "c:\_jobs\", "dwg")
MsgBox adFileOpen
End Sub 

Нашел у себя в закромах...

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

> Евгений Елпанов
Это очень далекие закрома (под AutoCAD 2000), да еще и (если мне не изменят память) нужен Asdkunsupp2000.arx
А вот это кажется в самую точку:
https://www.caduser.ru/forum/topic1941.html
Поиск рулит!!!

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Можно и такой штукой пользоватся: AutoCAD.AcadUtility.LaunchBrowserDialog

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

> Александр Ривилис
Когда копал в эту сторону - собирал все и отовсюду...

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Прошу прощения за AutoCAD.AcadUtility.LaunchBrowserDialog это я напутал.

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Очень удобная штука MSComDlg.

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

Если хотите сделать всё с помощью своих рук, то код будет немного побольше, но зато не придется прибегать к массивным инструментам OCX и DLL библиотекам, а уж тем более к средствам AutoLisp.
Вот что такое Windows API:

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 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
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Dim FolderDialogTitle As String
Dim ShowDirsOnly As Boolean
Dim hwndOwner As Long
Sub ВыбратьДиректорию()
hwndOwner = Me.hWnd
FolderDialogTitle = "Select Directory"
ShowDirsOnly = True
MsgBox ShowFolder
End Sub
Function ShowFolder() As String
Dim lRes As Long
Dim sTemp As String
Dim iPos As Integer
Dim bi As BrowseInfo
With bi
    .hwndOwner = hwndOwner
    .lpszTitle = lstrcat(FolderDialogTitle, "")
    .ulFlags = Abs(ShowDirsOnly)
End With
lRes = SHBrowseForFolder(bi)
If lRes Then
    sTemp = String(MAX_PATH, vbNullChar)
    SHGetPathFromIDList lRes, sTemp
    CoTaskMemFree lRes
    iPos = InStr(sTemp, vbNullChar)
    If iPos Then sTemp = Left(sTemp, iPos - 1)
End If
ShowFolder = sTemp
End Function

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

> bender

Re: Как из VBA вызвать стандартное окно диалога AutoCAD?

http://www.cad.dp.ua/stats/a_vba/acobject.html#API OPENFILENAME