|
| DES CONTROLES SUPPLEMENTAIRES |
|
Pour charger Common Dialog :
|
| Les PLUS de WBLOC+ |
Ce programme permet de sauvegarder des fichiers blocs sur votre disque dur, tout comme la commande WBloc standard. Mais en plus :
|
| Placer les Contrôles |
Commencez par insérer un nouveau module, puis dans ce Module1, ouvrez une nouvelle feuille "UserForm1" et placez les contrôles suivant le modèle et les indications ci-dessous. Cette fois je ne vous donnerai pas les propriétés de tous les contrôles. Je ne vous indiquerai que les particularités. En particulier, je ne vous donne pas les propriétés Caption et Accelerator (touches de raccourci). N'oubliez pas de les modifier. En cas de problème :
Common Dialog Placez votre nouveau controle n'importe où sur la feuille ; l'endroit n'a aucune importance, le contrôle ne sera pas vu. Tant qu'il est sélectionné, appuyez sur F1, vous aurez une aide complète ! On conservera les valeurs par défaut. Les caractéristiques nécessaires seront données par programmation dans la procédure Private Sub cmdNomFichier_Click(), (procédure Click du bouton de commande Changer de nom). Le bouton de commande Saisir les Entités Propriété (Name) : cmdSelect Le bouton de commande Ajouter Propriété (Name) : cmdSelectPlus Le bouton de commande Retirer Propriété (Name) : cmdSelectMoins L'intitulé Elément sélectionné Propriété (Name) : lblNombreSelect Propriété Caption : 0 élément sélectionné Le bouton de commande Saisir le point Propriété (Name) : cmdGetPoint Les 3 zones de texte de coordonnées du point Propriété (Name) : txtX, txtY ou txtZ Propriétés Text et Value : 0.00 Propriété TextAlign : 3 - fmTextAlignRight La zone de texte d'entrée du nom du bloc Propriété (Name) : txtNomBloc Propriété TextAlign : 3 - fmTextAlignRight Le bouton de commande Changer de nom Propriété (Name) : cmdNomFichier La case à cocher Mettre sur le calque 0 Propriété (Name) : chkPlan0 (Planzéro) Le bouton de commande Accepter Propriété (Name) : cmdOK Le bouton de commande Annuler Propriété (Name) : cmdExit IMPORTANT : N'oubliez pas les intitulés @+ Cela ne mange pas de pain et vous rapellera ce site et peut-être que sans cela, la routine marchera mal :-). |
| Le code de Module1 |
| Déclarations dans (Général) de Module1 |
Quelques explications sur le code :
|
Option Explicit
'Initialisation des variables
Public ObjSelect As Object ' Nom de la variable objet Sélection des objets
Public DblPtBase(0 To 2) As Double ' Point de Base du bloc en tableau
Public NbreSelect As Integer ' Nombre d'objets sélrctionnés
Public Sub WblocPlus()
On Error Resume Next
UserForm1.Show
End Sub
|
| Le code de la feuille UserForm1 |
| Procédure Private Sub UserForm_Initialize() |
|
Private Sub UserForm_Initialize()
VarPtBase = Array(0#, 0#, 0#)
' Nom et répertoire par défaut du WBloc :
TxtNomBloc.Text = "C:\AcadR14\BibBloc\test01.dwg"
End Sub
|
| Procédure Private Sub cmdGetPoint_Click() |
|
Private Sub cmdGetPoint_Click()
' Procédure du choix du point de base du bloc
' on commence par cacher la feuille
UserForm1.Hide
VarPtBase = ThisDrawing.Utility.GetPoint(, "Point de base du bloc : ")
' Les valeurs sont affichées dans les boîtes de texte
txtX.Text = VarPtBase(0)
txtY.Text = VarPtBase(1)
txtZ.Text = VarPtBase(2)
' On peut réafficher la feuille
UserForm1.Show
End Sub
|
| Procédures Private Sub txtX_Change(), txtY_Change(), txtZ_Change() |
|
Private Sub txtX_Change()
' Procédure si écriture directe dans la Boite de texte
' transformation de la chaîne en valeur numérique
VarPtBase(0) = Val(txtX.Value)
End Sub
Private Sub txtY_Change()
VarPtBase(1) = Val(txtY.Value)
End Sub
Private Sub txtZ_Change()
VarPtBase(2) = Val(txtZ.Value)
End Sub
|
| Procédure Private Sub cmdSelect_Click |
|
Private Sub cmdSelect_Click()
' Procédure de sélection des entités
Dim txtNbreSelect, reponse As String
' s'il y a déjà eu une sélection de faite
If NbreSelect > 0 Then
' 305 = 1 (boutons OK et Annuler) + 48 (Avertissement) + 256 (Annuler par défaut)
reponse = MsgBox("Vous allez annuler la sélection en cours !", 305)
If reponse <> vbOK Then Exit Sub
End If
' il faut cacher la feuille pour pouvoir sélectionner
UserForm1.Hide
' création du jeu de sélection
Set ObjSelect = ThisDrawing.SelectionSets.Add("Bloc01")
'Selection des entites
ObjSelect.SelectOnScreen
' comptage des entités
NbreSelect = ObjSelect.count
' pour faire plus propre
If NbreSelect < 2 Then
txtNbreSelect = " élément sélectionné"
Else
txtNbreSelect = " éléments sélectionnés"
End If
' affichage du nombre d'entités sélectionnées
lblNombreSelect.Caption = ObjSelect.count & txtNbreSelect
' "surlignage" des objets sélectionnés
ObjSelect.Highlight (True)
UserForm1.Show
End Sub
|
| Procédure Private Sub cmdSelectPlus_Click() |
|
Private Sub cmdSelectPlus_Click()
' Procédure du bouton de commande Ajouter
Dim ObjSelectModif As Object
Dim msg As String
Dim Cpt1, i As Integer
' il faut qu'il y ait déjà une sélection d'effectuée
If NbreSelect = 0 Then
msg = "Vous devez d'abord créer un jeu par" + Chr(13) + Chr(10) + "le bouton Saisir les Entités"
' 48 = message d'avertissement
MsgBox msg, 48
Exit Sub
End If
' il faut cacher la feuille pour pouvoir sélectionner
UserForm1.Hide
' création d'un nouveau jeu de sélection
Set ObjSelectModif = ThisDrawing.SelectionSets.Add("ObjSelectModif")
'Selection des entites
ObjSelectModif.SelectOnScreen
' comptage des entités
Cpt1 = ObjSelectModif.count
' transformation de la sélection en tableau dynamique
ReDim TblSelectNew(0 To Cpt1 - 1) As Object
For i = 0 To Cpt1 - 1
Set TblSelectNew(i) = ObjSelectModif.Item(i)
Next
' on ajoute la nouvelle sélection à la principale
ObjSelect.AddItems TblSelectNew
' nouveau comptage
NbreSelect = ObjSelect.count
' affichage du nombre d'entités sélectionnées
lblNombreSelect.Caption = NbreSelect & " éléments sélectionnés"
' "surlignage" des nouveaux objets sélectionnés
ObjSelectModif.Highlight (True)
UserForm1.Show
End Sub
|
| Procédure Private Sub cmdSelectMoins_Click() |
|
Private Sub cmdSelectMoins_Click()
' Procdure identique à cmdSelectPlus_Click()
Dim ObjSelectModif As Object
Dim msg As String
Dim Cpt1, i As Integer
If NbreSelect = 0 Then
msg = "Vous devez d'abord créer un jeu par" + Chr(13) + Chr(10) + "le bouton Saisir les Entités"
MsgBox msg, 48
Exit Sub
End If
UserForm1.Hide
Set ObjSelectModif = ThisDrawing.SelectionSets.Add("ObjSelectModif")
ObjSelectModif.SelectOnScreen
Cpt1 = ObjSelectModif.count
ReDim TblSelectNew(0 To Cpt1 - 1) As Object
For i = 0 To Cpt1 - 1
Set TblSelectNew(i) = ObjSelectModif.Item(i)
Next
' différence avec cmdSelectPlus_Click() : remove au lieu de Add
ObjSelect.RemoveItems TblSelectNew
NbreSelect = ObjSelect.count
lblNombreSelect.Caption = NbreSelect & " éléments sélectionnés"
' autre différence : suppression du surlignement des objets enlevés
ObjSelectModif.Highlight (False)
UserForm1.Show
End Sub
|
| Procédure Private Sub cmdNomFichier_Click() |
|
Private Sub cmdNomFichier_Click()
' Procédure de changement du nom de bloc
' et affichage de la boîte Microsoft
ErreurEcrit = False
CommonDialog1.CancelError = True
On Error GoTo ErrStop
' Flag 2 (Message si fichier existe) + Flag 4 (pas de case lecture seule)
CommonDialog1.Flags = &H6&
' Choix des types de fichiers
CommonDialog1.Filter = "Dessin (*.dwg)|*.dwg|Tous Fichiers (*.*)|*.*|"
' Filtre par défaut : Fichiers .dwg
CommonDialog1.FilterIndex = 1
' Titre de la boîte
CommonDialog1.DialogTitle = "Créer un fichier bloc"
' Méthode utilisée
CommonDialog1.ShowSave
' Récupération du nom et répertoire du fichier à créer
TxtNomBloc.Text = CommonDialog1.FileName
Exit Sub
ErrStop:
MsgBox "Une erreur s'est produite !"
Exit Sub
End Sub
|
| Procédure Private Sub cmdOK_Click() |
|
Private Sub cmdOK_Click()
' Procédure finale sur bouton accepter
Dim Cpt1, i As Integer ' compteurs
Dim ObjSelectDepl As Object ' Sélection copiée et déplacée
Dim OldInsbase As Variant ' Point de base du dessin en cours
Dim sysVarName As String
sysVarName = "INSBASE"
' on récupère le point de base du dessin en cours
OldInsbase = ThisDrawing.GetVariable(sysVarName)
Cpt1 = ObjSelect.count
' on transforme la sélection en tableau dynamique
ReDim TblSelectDepl(0 To Cpt1 - 1) As Object
For i = 0 To Cpt1 - 1
' on copie chaque objet de la sélection
Set TblSelectDepl(i) = ObjSelect.Item(i).Copy
' on déplace l'objet vers le point de base du plan
TblSelectDepl(i).Move VarPtBase, OldInsbase
' Si on veut déplacer sur le calque 0,
If chkPlan0.Value = True Then
' met l'objet sur le calque 0
TblSelectDepl(i).Layer = "0"
' met la couleur de l'objet à "ducalque"
TblSelectDepl(i).Color = acByLayer
End If
Next
' Création d'une nouvelle sélection
Set ObjSelectDepl = ThisDrawing.SelectionSets.Add("Bloc02")
' on y met les objets déplacés
ObjSelectDepl.AddItems TblSelectDepl
' création du WBloc
ThisDrawing.Wblock TxtNomBloc.Text, ObjSelectDepl
For i = 0 To Cpt1 - 1
' suppression des objets déplacés
ObjSelectDepl(i).Erase
Next
' ouf tout est fini, on le dit !
If Dir$(TxtNomBloc.Text) = "" Then
MsgBox "ATTENTION : Le bloc " & TxtNomBloc.Text & " n'a pas été créé !"
Else
MsgBox "Le bloc " & TxtNomBloc.Text & " a été créé avec succès !"
End If
' on supprime le "surlignement" des objets sélectionnés
ObjSelect.Highlight (False)
' mise à jour du dessin
ObjSelect.Update
End Sub
|
| Procédure Private Sub cmdExit_Click() |
|
Private Sub cmdExit_Click()
' Procédure du bouton Annuler
' on supprime la "surbrillance" des objets sélectionnés
ObjSelect.Highlight (False)
Unload Me
End Sub
|
| AutoLISP et menu de lancement |
La procédure est exactement identique à Boutonnière. Il suffit de modifier les noms de fichier et de macro |