| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как открыть диалог Open или Save на VBA под AutoCAD

Как открыть диалог Open или Save на VBA под AutoCAD

Ответ
Поиск в этой теме
Непрочитано 26.12.2009, 11:31 #1
Как открыть диалог Open или Save на VBA под AutoCAD
Linetzev
 
Регистрация: 05.08.2009
Сообщений: 7

Я уже много мелочей написал на VBA для себя под AutoCAD. Это в основном простые программки. Только недавно начал программировать формы и в них желательно бы иметь кнопки OPEN и SAVE для работы с файлами. Подскажите как мне реализовать на форме эти кнопки и соответственно работать с текстовыми файлами?
Просмотров: 12423
 
Непрочитано 26.12.2009, 14:41
1 | #2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Linetzev Посмотреть сообщение
Я уже много мелочей написал на VBA для себя под AutoCAD. Это в основном простые программки. Только недавно начал программировать формы и в них желательно бы иметь кнопки OPEN и SAVE для работы с файлами. Подскажите как мне реализовать на форме эти кнопки и соответственно работать с текстовыми файлами?
Можно так (проверено только для Windows XP):

Код:
[Выделить все]
Option Explicit
'' Fatty T.O.H () 2006 * all rights removed
Function BrowseForFile(pstrPath, pstrFilter)
Dim objDialog As Object
Dim intResult As Integer
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = pstrFilter
objDialog.InitialDir = pstrPath
objDialog.flags = &H4 + &H8 + &H4000
intResult = objDialog.ShowOpen()
BrowseForFile = objDialog.FileName
End Function



Sub test()
Dim p, f, s
p = ThisDrawing.GetVariable("DWGPREFIX")
f = "AutoCAD Files| *.dwg"
s = BrowseForFile(p, f)
MsgBox s
Application.Documents.Open s, False
MsgBox "end open file " & s
'' --> здесь работаешь с файлом
Application.ActiveDocument.SaveAs ("C:\SaveTest.dwg") <--для примера сохраняем здесь
MsgBox "saved as C:\SaveTest.dwg"
Application.ActiveDocument.Close
End Sub
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 27.12.2009, 06:33
#3
Linetzev


 
Регистрация: 05.08.2009
Сообщений: 7


Спасибо. Попробую Ваш алгоритм.
Linetzev вне форума  
 
Непрочитано 29.03.2011, 01:43
#4
rass

Конструктор
 
Регистрация: 22.03.2007
Киев
Сообщений: 94
<phrase 1=


Спасибо! алгоритм работает, но к сожалению только на Win XP, а как его оживить на Win 7? почемуто на "семерке" CommonDialog не работает (((
rass вне форума  
 
Непрочитано 29.03.2011, 05:13
1 | #5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Код:
[Выделить все]
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

Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
(pOpenfilename As OpenFileName) As Long

Public Function OpenFile(Filter As String, Extention As String, Optional Directory As String) As String
Dim strTemp As String
Dim OpenFileName As OpenFileName
With OpenFileName
.lStructSize = Len(OpenFileName)
.hwndOwner = ThisDrawing.HWND
.lpstrFilter = Filter & " (" & Extention & ")" & Chr$(0) & Extention & Chr$(0)
.lpstrFile = Space$(254)
.nMaxFile = 255
.lpstrFileTitle = Space$(254)
.nMaxFileTitle = 255
.lpstrInitialDir = Directory
.lpstrTitle = "Выбор Файла"
.flags = 0
If GetOpenFileName(OpenFileName) Then
strTemp = (Trim(.lpstrFile))
OpenFile = Mid(strTemp, 1, Len(strTemp) - 1)
End If
End With
End Function
Вызов как то так
Код:
[Выделить все]
TextBox1.Text = OpenFile("Чертёж", "*.dwg", "c:\")

Последний раз редактировалось Кулик Алексей aka kpblc, 04.05.2011 в 01:26.
trir вне форума  
 
Непрочитано 04.05.2011, 00:07
#6
rass

Конструктор
 
Регистрация: 22.03.2007
Киев
Сообщений: 94
<phrase 1=


trir спасибо, и ваш код наконец-то заработал у меня на Win7!
rass вне форума  
 
Непрочитано 12.05.2011, 16:56
#7
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


На x64
ThisDrawing.HWND
надо заменить на
ThisDrawing.HWND32
trir вне форума  
 
Непрочитано 02.09.2020, 14:23
#8
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Цитата:
Сообщение от trir Посмотреть сообщение
На x64
ThisDrawing.HWND
надо заменить на
ThisDrawing.HWND32
На вин 10 не работает, в чем причина?

----- добавлено через ~9 мин. -----
На 10 винде выдает на участке

Код:
[Выделить все]
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
(pOpenfilename As OpenFileName) As Long
ошибку "The code in this project must be updated for use on 64-bit systems. Please review and update Declare statements and then mark them with the PtrSafe attribute."
Mark_Shneider вне форума  
 
Непрочитано 02.09.2020, 14:38
#9
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


https://forums.autodesk.com/t5/inven...le.language=ru

Могли бы и сами поискать строчку ошибки и имя библиотеки в гугле.
Boxa вне форума  
 
Непрочитано 02.09.2020, 14:55
#10
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Цитата:
Сообщение от Boxa Посмотреть сообщение
https://forums.autodesk.com/t5/inven...le.language=ru

Могли бы и сами поискать строчку ошибки и имя библиотеки в гугле.
Спасибо, но теперь на строчке

Код:
[Выделить все]
.hwndOwner = ThisDrawing.HWND32
выдает method or data member not found.
Mark_Shneider вне форума  
 
Непрочитано 02.09.2020, 15:05
#11
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


да, была целая статья про это
HWND32 больше нет
trir вне форума  
 
Непрочитано 24.06.2021, 03:34
#12
A1111exiy


 
Регистрация: 24.06.2021
Сообщений: 1


Открыть диалог сохранения файла чертежа можно проще:
Код:
[Выделить все]
ThisDrawing.SendCommand "_saveas "
Аналогично для открытия чертежа посылаем команду "_open "
Следующий код сохраняет чертёж, если он уже однажды был сохранён, иначе открывает диалог "Сохранить как...":
Код:
[Выделить все]
    With ThisDrawing
        If .FullName = vbNullString Then
            Dim sss As String
            Dim rrr As Long
            sss = .Name
            rrr = MsgBox(sss & vbNewLine & "Ещё не был сохранён. Сохранить?", vbYesNo + vbQuestion)
            If rrr = vbYes Then
                .SendCommand "_saveas "
            End If
        Else
            .Save
        End If
    End With
Открыть диалог открытия/сохранения для абстрактного файла в autocad сложнее, чем в MSOffice - там есть объект Dialogs.
Код:
[Выделить все]
With Dialogs(wdDialogFileOpen)
    .Name = "*.*"
    .Show
End With

Последний раз редактировалось A1111exiy, 24.06.2021 в 03:53.
A1111exiy вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как открыть диалог Open или Save на VBA под AutoCAD

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Можно ли открыть 3D модель ACAD2006 в 2007(8) без потерь? Fil AutoCAD 1 13.09.2007 11:40
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46