Le Coin des AutoCADiens
Le site français des développeurs pour AutoCAD
Vous pourrez ici apprendre à programmer en Visual Basic pour AutoCAD.
|
ExplorAcad - Partie 4
|
|
|
Nota :
Par souci de simplification, les explications de ce programme ont été sectionnées en quatre parties.
Les sections correspondent aux différentes versions :
- La partie 1, le code de la version 1, explique
- Comment choisir un fichier en VB.
- Comment créer les aperçus.
- Comment implémenter les protocoles pour Internet.
- La partie 2 explique comment mettre le programme en petite icône,
et comment y attacher un menu.
- La partie 3, le code de la version 2.2, explique comment avoir des informations
sur un fichier et comment mettre un fichier dans la poubelle.
- Cette dernière partie, le code de la version 3, explique comment afficher les
clichés (ou slides) AutoCAD, y compris ceux qui sont dans des bibliothèques.
Le code ci-dessous est à rajouter au code des versions 1, 2 et 2,2.
|
La version 3
|
Cette partie va permettre de choisir entre 3 types de fichiers :
- Les fichiers .dwg (rien de changé).
- Les fichiers .sld : cliché simple.
- Les fichiers .slb : bibliothèque de clichés .
Pour visionner les clichés on utilisera un ocx spécialisé.
On décodera la première ligne des fichiers bibliothèques pour lire la liste des
clichés y figurant.
VB5 ou VB6 - Non testé en VB4.
|
Le contrôle AutoCAD Slide
|
Pour afficher les clichés AutoCAD vous aurez besoin du contrôle
AutoCAD Slide.
C'est un shareware dont j'ignore complètement les conditions d'utilisation. Je l'ai
trouvé sur le newsgroup d'Autodesk :
news://adesknews.autodesk.com/autodesk.autocad.customer-files
en date du 07/02/99, titre de l'article Slide viewer. C'est un autre visualiseur
de slides qui vous est proposé et vous pourrez ainsi comparer les deux styles de programmation.
Si vous avez déjà installé la version 3 d'ExplorAcad, vous avez le contrôle qui est
déjà installé dans le répertoire System de Windows.
Sinon, pour registrer Slide vous devrez lancer la commande :
regsvr32 <c:\votre_Répertoire_ou_est_placé_l'OCX>\slide.ocx
Vous devrez avoir un message du genre "AutoCAD Slide registered successfully".
Cette opération n'est à faire qu'une seule fois.
A chaque nouvelle création d'une application avec ce contrôle, il faudra cocher la case AutoCAD Slide OLE Control Module
de la boîte Composants du menu Projet.
|
Du nouveau sur la feuille ExplorAcad
|
Le contrôle Slide
Propriété (Name) : Cliche1
Les autres propriétés : valeurs par défaut.
Si vous voulez rester identique au modèle, placer ce contrôle sur le DwgThumbnail avec
les mêmes dimensions.
A noter : L'apperçu DwgThumbnail étant un bitmap, s'il est trop grand, on
perdra en qualité. On n'a pas cette restriction pour les clichés qui peuvent être
très grands parce que dessinés. J'ai choisi de les visualiser en petite taille,
ce n'est pas une obligation.
La zone de liste (ListBox)
Propriété (Name) : lstSld1
Propriété Sorted : True ou False selon que vous désiriez
une liste triée ou au contraire dans l'ordre original.
Ce contrôle sert à afficher la liste des clichés insérés dans une bibliothèque.
Je l'ai placé sur les indications de caractéristiques de fichier puisqu'elles
ne servent pas au moment où la liste est affichée.
Liste des Fichiers filFich1 - Modification
Propriété Pattern : *.dwg;*.sld;*.slb
A modifier pour pouvoir sélectionner également les clichés et les bibliothèques de clichés.
|
Le code du module ExplorAcad.bas
|
Le Module1 (ExplorAcad.bas) reste inchangé |
Le code à modifier dans Form1
|
Modification de la Procédure filFich1_Click() |
Selon la dernière lettre de l'extension du fichier sélectionné,
- Affichage du contrôle cliche1 ou du contrôle DwgVignette1
- Affichage ou non de la liste de clichés en bibliothèque lstSld1
- Affichage d'un message différent.
- Appel de la fonction de lecture des noms de clichés si 'b' ou 'B'.
- Affichage du cliché ou de l'apperçu du dessin.
|
Public Sub filFich1_Click()
lblMessage.Caption = " "
Chemin = dirDisc1.Path
If Right$(Chemin, 1) <> "\" Then
Chemin = Chemin + "\"
End If
Fichier = filFich1.FileName
FichVi$ = Chemin + filFich1.FileName
FichInfo (FichVi$)
strTaille = Str(FileLen(FichVi$))
lblTaille.Caption = Format(strTaille, " ### ### ###") + " octets"
If UCase(Right(FichVi$, 1)) = "B" Then
BibCliche
DwgVignette1.Visible = False
Cliche1.Visible = True
Cliche1.FileName = FichVi$ + "(" + lstSld1.List(lstSld1.ListIndex) + ")"
lblMessage.Caption = "Cliché AutoCAD dans une bibliothèque"
End If
If UCase(Right(FichVi$, 1)) = "D" Then
lstSld1.Visible = False
DwgVignette1.Visible = False
Cliche1.Visible = True
Cliche1.FileName = FichVi$
lblMessage.Caption = "Cliché AutoCAD indépendant"
End If
On Error GoTo Erreur1
If UCase(Right(FichVi$, 1)) = "G" Then
lstSld1.Visible = False
DwgVignette1.Visible = True
Cliche1.Visible = False
DwgVignette1.DwgFileName = FichVi$
lblMessage.Caption = "Cliquez sur l'image pour lancer le dessin"
DwgVignette1.Refresh
End If
Exit Sub
Erreur1:
DwgVignette1.Refresh
lblMessage.Caption = "Ce fichier n'est pas au format R13 ou R14"
End Sub
|
Modification de la Procédure Sub Form_Load() |
- Ajout des deux dernières lignes pour ne pas afficher les contrôles pour les clichés.
|
Private Sub Form_Load()
'Préparation de la variable IconeT
IconeT.cbSize = Len(IconeT) 'Taille de l'icône en octet
IconeT.hwnd = Me.hwnd 'Handle de ExplorAcad (pour qu'elle reçoive les messages
'envoyés lors d'un clic, double-clic...
IconeT.uID = 1& 'Identificateur de l'icône
IconeT.uFlags = Icone Or TIP Or MESSAGE
IconeT.uCallbackMessage = MOUSEMOVE 'Renvoie les messages concernant l'action de la souris
IconeT.hIcon = Form1.Icon 'Met en icône l'image qui est dans le contrôle "Image1"
IconeT.szTip = "ExplorAcad" & Chr$(0) 'Texte de la bulle d'aide
Me.Hide
Shell_NotifyIcon AJOUT, IconeT
lstSld1.Visible = False ' << nouveau
Cliche1.Visible = False ' << nouveau
End Sub
|
Procédure Sub BibCliche |
Procédure de lecture de la liste des clichés d'une bibliothèque.
- Lecture du fichier bibliothèque en mode binary, octet par octet
- Les noms des clichés sont inscrits dans la 1ère ligne du fichier.
- Le premier nom commence au 33ème octet.
- Chaque définition de cliché se fait sur 36 octets
- On lit les 10 premiers caractères.
- Si le nom du cliché est AutoCAD Sl, la liste est terminée
|
Public Sub BibCliche()
Dim strDef(0 To 200) As String
Dim Octet As Byte
Dim Caract As String
Dim Chaine1 As String
Dim NomCli(0 To 200) As String
Dim X As Integer
Dim Y As Integer
Dim A As Integer
Dim NumCli As Integer
Dim Z As Integer
' On rend visible le contrôle de la liste des clichés
lstSld1.Visible = True
lstSld1.Clear
NumCli = 1
Open FichVi$ For Binary As #1
' Lecture des noms de slide sur la première ligne
For A = 0 To 10000 Step 36
For X = A + 33 To A + 68
Get #1, X, Octet
Caract = Str$(Octet)
Caract = Right(Str$(Octet), Len(Caract) - 1)
Caract = Right("000000" + Caract, 4)
strDef(NumCli) = strDef(NumCli) + Caract + " "
Next X
'exemple de résultat : 0067 0065 0051 0048 0055 0000 0000 0000 ... pour CA307
'traduction du résultat précédent en chaîne
For Y = 1 To 50 Step 5 ' 1O fois 4 octets + un espace
' s'il y a 4 zéros, cliché suivant
If Mid(strDef(NumCli), Y, 4) = "0000" Then GoTo Suivant
Chaine1 = Chr$(Val(Mid(strDef(NumCli), Y, 4)))
NomCli(NumCli) = NomCli(NumCli) + Chaine1
If NomCli(NumCli) = "AutoCAD Sl" Then GoTo FinListe
Next Y
Suivant:
NumCli = NumCli + 1
Next A
FinListe:
Close #1
For Z = 1 To NumCli - 2
lstSld1.AddItem NomCli(Z)
Next Z
End Sub
|
Procédure Sub lstSld1_Click() |
- Action sur un élément de la liste des clichés de la bibliothèque.
|
Private Sub lstSld1_Click()
Cliche1.FileName = FichVi$ + "(" + lstSld1.List(lstSld1.ListIndex) + ")"
End Sub
|
Récapitulatif du code
|
La partie 1 - Comment choisir un fichier en VB, comment créer les aperçus,
comment implémenter les protocoles pour Internet.
La partie 2 - Comment placer le programme en 'tite icône', comment attacher un menu à la 'tite icône'.
La partie 3 - Comment récupérer les informations sur un fichier, comment placer un fichier dans la corbeille.
La partie 4 - Comment afficher les clichés AutoCAD en VB, comment lire la liste des clichés d'une bibliothèque.
|
© 1998 - 2009 FASOFT - Roger Rosec Tous droits réservés.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|