![]() ![]() |
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 |