|
Programmes testés pour fonctionner avec AutoCAD, en principe toutes versions récentes.
Ces exemples sont conçus en Visual Basic (VB5 ou VB6, non testé en VB4).
Dans la partie Le b. a. ba du VBA vous trouverez les exemples équivalents pour VBA,
quand celà est possible.
Pour tester ces programmes, procédez de la même manière que pour les Exemples de base,
en ouvrant une forme avec un bouton de commande.
1 - Résolution de l'écran
|
Comment faire pour connaître la résolution de l'écran ?
Les propriétés Width et Height de Screen
donnent les dimensions de l'écran en twips.
On utilise les propriétés TwipsPerPixelX et TwipsPerPixelYde Screen
pour transformer ces dimensions en pixels.
|
' Code de Form1
Private Sub Command1_Click()
Lg = Screen.Width / Screen.TwipsPerPixelX
Ht = Screen.Height / Screen.TwipsPerPixelY
MsgBox "Résolution de l'écran :" & vbCrLf & vbCrLf & Lg & " * " & Ht
End Sub
|
2 - Dimensions de la fenêtre active
|
Comment faire pour connaître les dimensions (en pixel) de la fenêtre active ?
Le programme utilise la fonction API GetWindowRect pour
obtenir les dimensions de la fenêtre.
Le handle de la fenêtre est obtenu, tout simplement par la propriété hWnd.
La 1ère partie, les déclarations, doit être copiée dans (General) de Module1,
la seconde partie est le code de Form1.
|
' ****** 1ère Partie : Déclarations dans Module1
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, _
lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' fin 1ère partie
'*****************************************************************
' 2éme partie : Code de UserForm1
Private Sub Command1_Click()
Dim FenRect As RECT
Dim Retour As Long
Retour = GetWindowRect(hwnd, FenRect)
wLargeur = FenRect.Right
wHauteur = FenRect.Bottom
MsgBox "Dimension de la fenêtre :" & vbCrLf & wLargeur & " * " & wHauteur
End Sub
|
3 - Dimensions de la fenêtre AutoCAD
|
Comment faire pour connaître les dimensions (en pixel) de la fenêtre AutoCAD ?
Comme pour le programmes précédent on utilisera la fonction API GetWindowRect.
Pour préciser le handle de la fenêtre AutoCAD, il nous faudra utiliser la propriété AcadHwnd
de la DLL ACVBEXT.
Pour l'utilisation de ACVBEXT voir le chapitre Des Extensions pour AutoCAD ActiveX
Automation
La 1ère partie, les déclarations, doit être copiée dans (General) de Module1,
la seconde partie est le code de Form1.
Bien entendu, il faudra créer une référence à l'objet AutoCAD.Application. Pour plus de détail,
voir le chapître Automation ActiveX.
|
' ****** 1ère Partie : Déclarations dans Module1
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, _
lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' fin 1ère partie
'*****************************************************************
' 2éme partie : Code de Form1
Private Sub Command1_Click()
Dim FenRect As RECT
Dim Retour As Long
Dim BaCadObj As Object
Dim ObjDessin As Object
On Error Resume Next
Set BaCadObj = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set BaCadObj = CreateObject("AutoCAD.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Set ObjDessin = BaCadObj.ActiveDocument
Set objAcvb = ObjDessin.Application.GetInterfaceObject _
("ActiveXExtension.Application.1")
hwnd2& = objAcvb.AcadHwnd
Retour = GetWindowRect(hwnd2&, FenRect)
wLargeur = FenRect.Right
wHauteur = FenRect.Bottom
MsgBox "Résolution de la fenêtre AutoCAD : " & wLargeur & " * " & wHauteur
End Sub
|
4 - Nouveau dessin sans sauvegarde du dessin courant
|
Comment faire pour ouvrir un nouveau dessin sans sauvegarder le dessin en cours et
sans afficher la boîte de dialogue correspondante ?
La variable système dbmod indique l'état de modification du dessin.
Si cette variable est égale à 0 (zéro), celà indique que le dessin
n'a pas été modifié, qu'il n'est pas nécessaire de sauvegarder et la boîte de dialogue
'Enregistrer les modifications ?' ne sera pas affichée.
Cette variable est déclarée en lecture seule et n'est pas modifiable en AutoLISP.
En VBA ou VB on peut néammoins donner la valeur zéro à cette variable pour empêcher la venue
de la boîte de dialogue.
Pour celà, on utilisera la méthode SetDBmod
de l'application AcadUnsupp.arx.
Pour plus de détails sur l'utilisation de AcadUnsupp.arx voir le chapitre Des Extensions pour AutoCAD ActiveX
Automation
Une seconde possibilité, expliquée dans la même section en VBA, est d'utiliser une fonction exportée directement de acad.exe
Mais,j'ignore pourquoi, elle ne semble pas fonctionner en VB.
Voici l'exemple de code de UserForm1 utilisant AcadUnsupp.arx
|
Private Sub Command1_Click()
On Error Resume Next
Set BaCadObj = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set BaCadObj = CreateObject("AutoCAD.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Set ObjDessin = BaCadObj.ActiveDocument
Set ObjUnsup = BaCadObj.GetInterfaceObject("AcadUnsupp.Application.1")
ObjUnsup.SetDBMod (0)
BaCadObj.ActiveDocument.Open ("C:\acadr14\trv\plan1.dwg")
End Sub
|
|