Le Coin des AutoCADiens

Le site de langue française des utilisateurs & développeurs pour AutoCAD

VBA Trucs en VB et en vrac VBA



Liste des trucs en VB :       
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


Fasoft

Google
 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------