Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Luck Dragon: MárkaLánc
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Elektromos rásegítésű kerékpárok
- eBay-es kütyük kis pénzért
- Magga: PLEX: multimédia az egész lakásban
Új hozzászólás Aktív témák
-
válasz
Mzmatus
#3194
üzenetére
Claude szerint:
Method 1: Using AutoCAD's GetOpenFilenameSub OpenFileDialog()
Dim fileName As Variant
Dim filterString As String' Define file filter (format: "Description|*.ext")
filterString = "DWG Files (*.dwg)|*.dwg|All Files (*.*)|*.*"' Show open file dialog
fileName = ThisDrawing.Application.GetOpenFilename( _
"Select a file", _
filterString, _
"dwg", _
0)' Check if user cancelled
If VarType(fileName) <> vbBoolean Then
MsgBox "Selected file: " & fileName
' Do something with the file path
Else
MsgBox "No file selected"
End If
End SubUgy tunik ez se letezik. Ezzel lehet esetleg beprobalkozni?
Sub OpenFileUsingCommand()
Dim fileName As String
ThisDrawing.SendCommand "(setq myfile (getfiled " & Chr(34) & "Select File" & Chr(34) & " " & Chr(34) & Chr(34) & " " & Chr(34) & "dwg" & Chr(34) & " 0))" & vbCr
' Then retrieve the variable value
End SubMethod 2 - ugyanaz mint a WinApi, amit korabban Fire/SOUL/CD irt...
Method 3 - .NET-ben van OpenFile Dialog, csak ahoz a kodot at kell irni .NET-re
https://help.autodesk.com/view/OARX/2025/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Windows_OpenFileDialog -
válasz
Mzmatus
#3198
üzenetére
Annyira el voltam havazva melóval, hogy teljesen kiment a fejemből, hogy hosszúhétvége lesz...

Szóval felpattintottam az AutoCAd 2026-t és megnéztem, mit és hogy lehet VB .NET-l mókolni vele, mert az itt elérhető infók a VB .NET-hez vannak "kitalálva" (lehetne C# nyelven is dolgozni amúgy, csak azt egyrészt nem ismerem annyira ill. a VB .NET nagyon hasonlít a VBA-hoz nyelvezetében, felépítésében stb, nyilván nem véletlen)A VB .NET kód megírásához Visual Studio 2022 Community Edition-t használtam (ingyenes)
1. VB .NET Library Class-t (DLL lesz belőle) így kell létrehozni Visual Studio-val
2. Hogy a megfelelő függvények/osztályok stb rendelkezésre álljanak, ahhoz az AutoCAD-ből 3 referenciát kell hozzáadni, a rendszerből meg egyet. A VB .NET project-t befordítva (build) kapjuk meg majd a DLL-t, ami kell az AutoCAD-nek
3. AutoCAD megnyit, betöltünk egy létező vagy létrehozunk egy üres project-t kiadjuk a NETLOAD parancsot, majd a megjelenő fájlablakban betöltjük a korábban létrehozott DLL-t
4. Most futtatjuk a DLL-ben található függvényünket (ez esetben a FireOpenFileDialog nevet viseli)
5. ha minden rendben, akkor meg kell nyitnia a fájlablakot és amennyiben kiválasztasz egy fájlt (példaprogiban csak DWG/DVB állítottam a szűrőt), akkor egy ablakban kiírja a fájl nevét, teljes útvonalával
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Public Class FireAutoCADOpenFileDialogExample
<CommandMethod("FireOpenFileDialog")>
Public Sub FireOpenFileDialog()
Dim MyOpenFileDialog As New Autodesk.AutoCAD.Windows.OpenFileDialog("FIRE/SOUL/CD - VB.NET FileOpenDialog Class",
"",
"DWG;DVB",
"AutoCAD Drawing/Project Files",
0 'Autodesk.AutoCAD.Windows.OpenFileDialog.OpenFileDialogFlags
)
If MyOpenFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
System.Windows.Forms.MessageBox.Show(MyOpenFileDialog.Filename)
Else
System.Windows.Forms.MessageBox.Show("Nem választottál ki fájlt.")
End If
End Sub
End ClassEnnyit tudtam tenni az ügy érdekében, rajtad áll, hogy a korábbi WINAPI-s (az VBA kód ugye) avagy emellett döntesz.
![;]](//cdn.rios.hu/dl/s/v1.gif)
UI: Lehet, hogy érdemes lenne az AutoCAD topikban is érdeklődni, hátha van egyéb (és ami fontos, egyszerűbb) megoldás is.
UUI: a #3200-ben lévő megoldás nem működik, felejtős, viszont a #3199 kifogástalanul megy AutoCAD-ben is (mondjuk, mint írtam meg lettem volna lepve, ha nem)...
-
válasz
Mzmatus
#3198
üzenetére
Közben eszembe jutott egy egyszerű (remélhetőleg AutoCAD VBA-ban is működő) megoldás. Szóval mi lenne, ha egy Excel objektumot hoznánk létre és annak használnánk a függvényeit, pl. a GetOpenFilename függvényt.

Próbáld ki, hátha műxik...Sub FireAutoCADFileOpenDialog()
Dim MyExcelApp As Object
Dim MyFilePath As String
Set MyExcelApp = CreateObject("Excel.Application")
MyFilePath = MyExcelApp.GetOpenFilename(Title:="Válassz egy fájlt", _
FileFilter:="AutoCAD DVB Files (*.dvb),*.dvb")
If MyFilePath <> "False" Then MsgBox "A kiválasztott fájl: " & MyFilePath
Set MyExcelApp = Nothing
End Sub -
válasz
Mzmatus
#3198
üzenetére
Bocs, nincs sok időm jelenleg (még mindig) PH-ra...
Utánaolvastam, olybá tűnik, hogy 2 megoldás lehet
1. .NET plugin írásával, akkor beépített funkciók érhetőek el
(Ez sem okoz gondot (mármint .NET plugin-t írnom, csak ahhoz viszont fel kell pattintanom mindenképp egy AutoCAD-t, talán hétvégén megsasolom)2. Hagyományos Winapi függvények használatával, sajna ez összetettebb mutatvány, több infó szükségeltetik hozzá (csomó paramétert és változót kell ismerni stb)
Ez utóbbit megmutatom hogyan kell elkövetni (x64-re/hez van deklarálva a fileopendialog import stb), ez univerzális kód -bár nem próbáltam AutoCAD-ben, mert nincs fent- ezért mennie kell 100%-ban, bármely VBA-ban is legyen.
A kód megnyitja a fájlablakot, szűrőt használ (DVB fájlokat listázza csak(rákerestem a neten, az újabb CAD-k ilyen kiterjesztéssel mentik a VBA kódot, ha meg esetleg mégsem, akkor a forrásban írd át a *.DVB-t *.*-ra, akkor minden fájl látszódni fog), ha egy ilyen fájlt kijelölsz, akkor kiírja a teljes útvonalával együtt, ha meg bezárod az ablakot, akkor meg, hogy nem jelöltél ki semmit... Szóval most ennyi fért az időmbe, ha lesz időm hétvégén folyt. köv.Option Explicit
Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (MYOPENFILENAME As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As LongPtr
hInstance As LongPtr
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 LongPtr
lpfnHook As LongPtr
lpTemplateName As String
End Type
Sub GetFileWithFullPath()
Dim MyOpenFile As OPENFILENAME
Dim MyResult As Long
With MyOpenFile
'kezdő drive/folder
.lpstrInitialDir = "D:\"
'fájlablak fejléce
.lpstrTitle = "Fire/SOUL/CD"
'fájlablak szűrő
.lpstrFilter = "AutoCAD VBA" & Chr$(0) & "*.dvb" & Chr$(0)
'default flag beállítás
.flags = 0
.nFilterIndex = 1
.hwndOwner = 0
.lpstrFile = String(257, 0)
.nMaxFile = LenB(.lpstrFile) - 1
.lStructSize = LenB(MyOpenFile)
.lpstrFileTitle = .lpstrFile
.nMaxFileTitle = .nMaxFile
End With
MyResult = GetOpenFileName(MyOpenFile)
If MyResult = 0 Then
MsgBox ("Nem választottál ki fájlt!")
Else
MsgBox (Trim(Left(MyOpenFile.lpstrFile, InStr(1, MyOpenFile.lpstrFile, vbNullChar) - 1)))
End If
End Sub -
válasz
Mzmatus
#3194
üzenetére
Nem tudom, hogy az AutoCAd VBA mennyire tér el úgy általában a "sima" VBA-tól, de ezzel tehetsz egy próbát (itt egy commandbutton kattintásra lefutó VBA kódot adok, de nem az a lényeg, hanem ami a SUB-n belül van)
Private Sub CommandButton1_Click()
Dim MyFileDialog As Object
'Itt 4 paraméter lehet (msoFileDialogFilePicker, msoFileDialogFolderPicker, msoFileDialogOpen, msoFileDialogSaveAs)
Set MyFileDialog = Application.FileDialog(msoFileDialogOpen)
MyFileDialog.Show
End Sub
Új hozzászólás Aktív témák
- Allegro vélemények - tapasztalatok
- LEGO klub
- A fociról könnyedén, egy baráti társaságban
- Samsung Galaxy Watch7 - kötelező kör
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- sziku69: Fűzzük össze a szavakat :)
- Törölte az idei asztali csúcsprocesszorát az Intel
- Váratlanul ledobta asztali csúcs-Ryzenjét az AMD
- Futás, futópályák
- Tőzsde és gazdaság
- További aktív témák...
- Lenovo ThinkPad W541,15.6,FHD,i7-4810MQ,32GB DDR3,256GB SSD,K1100 2GB VGA,WIN10
- Samsung Galaxy Tab S10 Ultra 5G 12/256 2028.09.03-ig garancia
- iPad Pro M1 11 512GB wifi + Magic Keyboard + Apple Pencil
- 3TB Seagate Barracuda 3,5-es HDD-k
- Ryzen 7 5800X / AIO / NITRO+ RX 9060 XT 16GB / B550M WIFI / 32GB RAM / 1TB NVMe SSD / 650W GOLD
- Telefon felvásárlás!! Samsung Galaxy S25, Samsung Galaxy S25 Plus, Samsung Galaxy S25 Ultra
- Raktáron levő AM4 garanciás alaplapok!!!
- Eladó Nokia 5.4 4/64GB kék / 12 hónap jótállás
- LG 34GS95UE - 34" Ívelt OLED / QHD 2K / 240Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
- AKCIÓ! KÉSZLETRŐL! Intel Core i5 14600K 64GB 6000MHz RAM 2TB Gen4 SSD RTX 5060 8GB FSP 750W
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

![;]](http://cdn.rios.hu/dl/s/v1.gif)
