Aller au contenu

Serge

Membres
  • Compteur de contenus

    397
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Serge

  1. Et même que la 2000i ne sera plus acceptée à compter du 15 janvier 2005. Serge
  2. Serge

    burst dans tout les onglets

    Bruno, Je n'avais pas vérifié que (getvar "ctab") retourne "Model", même en français. Je croyais que cela retournait "Objet", d'où la vla-précaution. Pako, Pas de mise à jour pour 2005, ni " Riz aux ". Tramber, 1) L'idée originale de Bruno d'utiliser sssmachin est de contourner un problème si Burst n'est pas encore chargé via le Autoload. 2) Selon la version d'AutoCAD, il est parfois requis d'inscrire (vl-loa-com), parfois non. Mais puisqu'on peut appeler 1000 fois cette commande sans gruger de mémoire, il est plus prudent de l'inscrire dans chaque entête de fichier. Serge
  3. Serge

    Excel toujours actif

    Au plaisir, Suggestion: (if (not getExcelPath) (load "getExcelPath.fas")) (setq Excel_Info (getExcelPath)) (setq Excel_Path (cdr (assoc "path" Excel_Info))) (setq Excel_OlbFile (cdr (assoc "olb" Excel_Info))) (setq Excel_ExecFile (cdr (assoc "exe" Excel_Info))) (if (not excm-open) (progn (vlax-import-type-library :tlb-filename Excel_OlbFile ; olb file :methods-prefix "excm-" :properties-prefix "excp-" :constants-prefix "excc-" ) Serge
  4. Serge

    burst dans tout les onglets

    1) sssmachin retourne (nil nil) si la sélection est vide, d'où l'intérêt de ne pas appeler burst 2) À quand le cours? J'ai déjà demandé s'il y avait des adeptes pour un manuel et je n'ai rec¸u qu'une réponse. Je peux siganler tout de même un livre que j'avais publié en 1999 et qui contient un long chapitre sur le sujet. Ce livre est encore disponible en France. Voir la table des matières à l'adresse suivante: http://www.univers.qc.ca/eui/r15maj/tdm15maj.htm Serge
  5. Ahryman40k Hier, je t'avais dit que je n'avais pas testé. J'avoue avoir donné une réponse rapide. Cela venait d'une bout de code où j'avais dérivé une classe à partir de AcmSymbolStd et que cette fonction devenait accessible depuis l'objet même. Sinon, effectivement, cela veut dire appeler une méthode statique. Il doit y avoir autre chose dans ton dessin qui cause l'erreur. Serge
  6. Serge

    burst dans tout les onglets

    bonuscad, Dans ton code, que je trouve très bien, il y a 2 lacunes: 1) Ça ne tient pas compte de l'onglet Objet (model space) 2) Ça applique Burst même si la sélection est vide. Voici un correctif. On peut copier le code dans le fichier BurstAll.lsp puis le charger sur demande. On tape ensuite la comande BURSTALL (defun c:burstall ( / firstLayout layouts model modelName ssf) (setq model (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))) (setq modelName (vla-get-name (vla-get-layout model))) (setq layouts (cons modelName (layoutlist))) (setq firstLayout (getvar "ctab")) (foreach layout layouts (setvar "ctab" layout) (setq ssf (sssetfirst nil (ssget "_x" (list (cons 410 layout) (cons 0 "insert"))))) (if (not (equal '(nil nil) ssf)) (c:burst)) ) (setvar "ctab" firstLayout) (princ) ) (princ "\nTapez BURSTALL pour appliquer BURST dans toutes les présentations.") (princ) Serge
  7. Serge

    CDDR

    Salut, On peut en effet se passer de la routine vl-list* et se servir dee combinaison car-cdr. L'idée est: pourquoi créer des listes non conventionnelles. Cela déroge du Lisp pur et rend le code et le débogage plus complexe à comprendre inutilement. Par exemple: (setq z (vl-list* 1 2 3)) retourne (1 2 . 3) À première vue, on se serait sentit légitimé de puiser le 3ième élément comme suit: (nth 2 z) Ce n'est pas permit et on peu chercher longtemps pourquoi. Il faut utiliser (cddr z) Faire (setq z (list 1 2 3)) permet à (nth 2 z) et à (caddr z) d'obtenir un résultat prévisible. Serge
  8. Patrick, Il y a 2 choses: 1) Quel est le vrai besoin? 2) La configuration 1) Le vrai besoin: Avec le clic droit, on peut tout faire. Les icônes d'AutoCAD sont assez disctinctes pour ne pas faire d'erreur ou de mauvais choix. On peut toujours y faire Parcourir. À défaut, on peut ouvrir le bon AutoCAD au préalable. Est-ce que le vrai besoin vient de vouloir choisir le AutoCAD le plus compatible en version? Si oui, j'aurais quelque chose d'autre à proposer (un programme en VB qui affiche une icône et sur laquelle on dépose un dessin) 2) La configuration J'ai hativement cru que que la clé suivante suffirait: HKEY_CURRENT_USER\Software\Autodesk\AutoCAD Ce qui donnerait un fichier .reg avec ceci: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Autodesk\AutoCAD] "CurVer"="R16.1" Or, cette clé n'est pas contrôlante. Il existe des répertoires cachés qui interviennent. Notament, j'ai trouvé C:\Documents and Settings\xxx\Local Settings\Application Data\ApplicationHistory. Je soupçonne qu'il y ait bien d'autre informations cachés Serge
  9. Serge

    Excel toujours actif

    Hum ! Scène 1, prise 2: Le fichier est disponible a http://www.cadnovation.com/getExcelPath.fas Je le laisse là jusqu'à vendredi. Serge
  10. Serge

    Excel toujours actif

    Salut, hLe fichier est disponible a ttp://www.cadnovation.com/getExcelPath.fas Je le laisse là jusqu'à vendredi. Serge
  11. Salut, En fait je ne cherche pas à caster l'objet mais a appeler la méthode de la classe parente en espérant contourner l'erreur (setSymbolDefaults est une méthode virtuelle qui existe dans la classe de base). Mais de toute façon, c'est inutile (et peut-être dangeureux). J'ai regardé dans le code de 6 projets différents qui fonctionnent bien et je n'ai pas d'erreur. Il doit y avoir autre chose. Bonne chance. Serge
  12. Salut, Sans avoir testé, essaie plutôt ceci: Acm::ErrorStatus as = AcmSymbol::setSymbolDefaults(); if (as != Acm::eOk) return as; en remplacement de as = pPartRef->setSymbolDefaults(); Serge
  13. Salut, Le simple appel de MonDoc(2) retourne la propriété par défaut. Il te faut décortiquer l'objet. Voici une ébauche Dim CD1 As ComponentDefinition Dim CDS1 As ComponentDefinitions Set CDS1 = ThisDocument.ComponentDefinitions ' ou MonDoc(2).ComponentDefinitions For Each CD In CDS1 Debug.Print "Hello World" ' Continuer à développer Next CD Serge
  14. C'est plutôt le dernier AutoCAD ouvert. Même que si tu avais ouvert une R14, c'est lui qui sera par défaut. Il existe plusieurs manières de définir le 'bon' AutoCAD par défaut, outre démarrer l'exécutable avant d'ouvrir le dessin: 1) On peut utiliser le clic-droit -> Ouvrir avec -> Choisir le programme -> Cocher "Toujours utiliser le programme sélectionné pour ouvrir ce type de fichier" 2) Utiliser un fichier .reg judicieusement conçu à cet effet. Serge
  15. Gawel, Tu peux généralement utiliser cette forme: MaForme1.ComboBox1.Add ... , MaForme2.ComboBox2.Add ... plutôt que simplement écrire ComboBox1.Add ... Alternativement, au lieu d'utiliser des userforms, tu peut envisager l'utilisation d'un PictureBox qui peuvent être le conteneur d'objets et pour lequel tu passe 5 Frames. Il y a une astuce assez longue pour y arriver et il faut user de dll win32 Par exemple: ' User32.dll Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Ceci est une psite que je ne détaillerai pas plus longuement. Ça semble compliqué mais ça vaut la chandelle car tout est drôlement simplifié par la suite. L'idée est de faire que chaque UserForm devienne l'enfant du PictureBox à tour de rôle. Serge
  16. Serge

    gif animé dans un userform

    Gawel, Ça va te prendre un Ocx. Voici un lien qui peut t'aider: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=1&txtCodeId=8224 Serge
  17. Serge

    CDDR

    Bru, L'exemple que tu donnes: (cadr '(8 . "string")), revient à dire: (car (cdr '(8 . "string")), c'est-à-dire: (car "string"), ce qui est une erreur (les fonctions c****r ne s'applique qu'à des listes. Il y a 2 méprises que les AutoLispien commettent face au cons et au list 1) le cons n'est pas un cas particulier d'une liste. La différence est plus évidente si l'on connaît l'origine d'AutoLISP, soit le Common Lisp (datant des années 50). La méprise vient de la facilité qu'AutoLISP a de traiter les 2 comme s'il s'agissait d'une seule et même chose. Dans l'exemple ci-après, on voit la différence: Commande: (setq test1 (assoc 8 (list (list 8 "a") (list 10 "b")))) (8 "a") Commande: (setq test2 (assoc 8 (list (cons 8 "a") (cons 10 "b")))) (8 . "a") Si on veut extraire le "a", il faudra dans le premier cas inscrire (cadr test1) mais dans le deuxième cas (cdr test2) La structure du cons est très efficace lorsqu'on sait qu'on a une relation en paire (dotted pair). Le cas classique est la liste des codes dxf retournés par (entget) 2) L'apostrophe ne construit pas de liste mais demande à l'interpréteur Lisp d'ignorer ce qui suit: soit un mot ou une expression ou même une variable échangée à une fonction ActiveX Exemple 1: (if (= (type MyVar) 'STR) (princ "\nCeci est une chaine")) Exemple 2: (entmake '((0 . "CIRCLE") (62 . 1) (10 4.0 4.0 0.0) (40 . 1.0))) Exemple 3: (mapcar 'strcase '("aaa" "bbb" "ccc")) Exemple 4: (apply '(lambda (x y z) (* x (- y z))) '(5 20 14)) Exemple 5: (vla-GetBoundingBox MyVlaVariable 'minExt 'maxExt) Le fait de comprendre cette nuance permet de comprendre la portée des instructions SET vs SETQ. Cela permet de savoir quand utiliser l'apostrophe vs les expressions LIST ou CONS Exemple 1: (setq flexListe (liste a b c)) ; permet d'adapter n'importe situation Exemple 2: (setq constListe '("aaa" "bbb" "ccc")) ; Cas d'une constante Exemple 3: (setq monErreur '(a b c)) ; Retourne (A B C), ce qui ne veut rien dire Il y a un piège supplémentaire en vue qui me déplait en tant que 'puriste' du Common Lisp est la nouvelle expression vl-list*, comme dans l'expression (vl-list* 1 2 3) qui retourne (1 2 . 3). Que fait-on de cette structure? On risque de patiner avec les fonctions car, cdr, etc. Serge
  18. Salut, Malheureusement, cela ne se fait pas car cela enlèverait le sens du point. Par contre, quel est le besoin qui ne pourrait être comblé par un autre moyen. Est-ce pour ouvrir une boite de dialogue et permettre le choix d'une imprimante? Serge
  19. Patrick, Ou encore, on fait un clic droit sur le dessin puis on choisit "Ouvrir avec". Serge
  20. Salut, Malheureusement, il faudrait que je m'installe Inventor pour te donner une solution mais il appert que tu devra boucler et faire l'impression des sous-éléments les plus petits, soit des chaines ou des nombres, et non des objets. Serge
  21. Serge

    Autocad et Excel

    Salut, Avec VBA, tu essaie de te connecter à Excel. S'il n'est pas ouvert, tu reçoit une erreur pardonnable donc tu sais que tu pourras le fermer une fois tout complété. Excel est-il disponible (suite à une boite de dialogue ouverte, impression en cours, etc.) ?Tu essaie ensuite d'ouvrir ton document existant. Était-il chargé? L'onglet courant était-il le bon? Il y a tant d'événements imprévisibles que VBA peut gérer. Ceci est impossible à faire en Visual Lisp (ou de façon hyper-compliqué), même avec des (vl-catch-all-error-p ...) Serge
  22. Salut, La version 2002 (AM6) ne permettait que de créer de PartRef ordinaire tandis que maintenant, un PartRef peut être copié et cela nous donne soit une nouvelle instance (pour accompagner une vue) ou soit une copie. La façon de programmer à donc changé. Le Mechanical Browser permet de créer des vues et des assemblages, ce qui nous demande en plus de savoir à quel niveau hiérarchique placer le PartRef. Pour ce qui est du besoin de fermer l'objet, je présume que le programmeur de la fonction setPartData fait l'ouverture et la fermeture de l'objet afin d'être sur du contexte, mais aussi parce que quand on y regarde de près, il existe un méchant dédale de dictionnaires tous inter-reliés et que pour les mettre à jour, il doit effectuer une transaction. Serge
  23. Serge

    Excel toujours actif

    Salut, Pour le nom à fournir, je peux t'envoyer un fichier fas contenant la fonction (GETEXCELPATH) et qui te retournera l'information voulue, pour Windows95 à Windows XP et de Excel 5 à Excel 2003. Tu seras certains d'être compatible, peu importe la situation. Pour ce qui est de vla-put-visible vs excp-put-visible, la première est liée tardivement (ligature tardive ou late binding) tandis que la seconde est liée tôt (early binding). Tu y gagne sen performance et, dans ce cas-ci, en résultat. Serge Note: Y a-t-il moyen de joindre des fichiers ou des images dans ce forum?
  24. Dom, Je n'avais pas vu le forum dans lequel était le message. Si tu est en VBA, pourquoi ne pas essayer le debug.print. Tu peux utiliser l'instruction With ou For Each. Serge
  25. Dom, Est-ce que tu peux être un peu plus explicite? Est-ce que tu est en VB.Net, en C++6 ou en C++7. Par PartDocument, est-ce un objet PartRef, un document ou un autre objet? Serge
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité