Aller au contenu

Comment faire un bouton avec une image dans un DCL ?


Messages recommandés

Posté(e)

Bonjour à la communauté.
Je suis dans mes DCL, car je tente de faire du "tout Lisp" pour ne plus utiliser Lisp ET VBA en même temps, pour une seule macro.
Je cherche donc à faire des fenêtre DCL qui ressembles le plus possible à celles du VBA. 
J'essai donc de faire des boutons avec des images, mais sur le Net comme chez AutoDesk, l'aide est très très succincte ! 
J'ai donc deux question :
 - quelle sont les syntaxes (Lisp et DCL) pour placer une image dans un bouton ?
 - quel est le format de l'image (BMP, GIF, PNG, ICO) ?
Si quelqu'un a un site, un conseil... Je suis preneur.
Bien à toi la communauté.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Bonjour,

 

ici : https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/dcl-button-images/td-p/9863170 il y a une discussion intéressante, mais c'est un "subterfuge" compliqué pour simuler quelque chose non prévue, donc c'est compliqué à mettre en œuvre.

 

Soit l'interface permet juste d'obtenir des infos, et quand tu cliques OK, ça fait le boulot. Dans ce cas tu fais le dialogue dans le langage que tu souhaites (VBA) puis tu lances la commande lisp avec tous les paramètres issus du dialogue.

Soit tu dois interagir avec AutoCAD pendant ton dialogue, et là, soit tu fais tout en VBA soit tu passes à quelque chose de plus robuste DotNet (C# de préférence, éventuellement VB.Net si tu es allergique aux points virgules🙂 ) et tu fais tout avec 1 seul langage.

 

Faire du DCL pour avoir de joli interface, ça ne fonctionne pas ou bien au prix d'effort "quasi insurmontable"

 

Olivier

Posté(e)

Bonjour,

J'ai cela, de Terry Miller. Pas sur que cela puisse t'aider

Olivier à raison, c'est une torture le DCL

; c:MyImageButton
; These images were created using GetVectors.lsp on AutoLISP Exchange
; (URL: http://web2.airmail.net/terrycad)
;-------------------------------------------------------------------------------
(defun c:MyImageButton (/ Dcl_Id% Show_Image:)
  (princ "\nMyImageButton")(princ)
  ; Show_Image: ----------------------------------------------------------------
  (defun Show_Image: (/ Ang CenPt Dist~ PickPt X# Y#)
    (start_image "Image1")(setq X# (dimx_tile "Image1"))
    (setq Y# (dimy_tile "Image1"))(end_image)
    (setq CenPt (list (/ X# 2)(/ Y# 2))
          PickPt (list $x $y)
          Ang (angle CenPt PickPt)
          Dist~ (distance CenPt PickPt)
    );setq
    (cond
      ((< Dist~ (/ Y# 4))(Front_View));*Included
      ((< Ang (* pi 0.25))(Right_View));*Included
      ((< Ang (* pi 0.75))(Bottom_View));*Included
      ((< Ang (* pi 1.25))(Left_View));*Included
      ((< Ang (* pi 1.75))(Top_View));*Included
      (t (Right_View))
    );cond
  );defun Show_Image:
  ;-----------------------------------------------------------------------------
  ; Load Dialog
  (setq Dcl_Id% (load_dialog "MyDialogs.dcl"))
  (new_dialog "MyImageButton" Dcl_Id%)
  ; Set Dialog Initial Settings
  (set_tile "Title" " My Image Button")
  (set_tile "Text1" "Pick arrows to change views.")
  (Front_View);*Included
  ; Dialog Actions
  (action_tile "Image1" "(Show_Image:)")
  (start_dialog)
  ; Unload Dialog
  (unload_dialog Dcl_Id%)
  (princ)
);defun c:MyImageButton

 

Posté(e)

Coucou,

Je ne pourrais malheureusement pas t'aider sur ce sujet précis car je n'ai jamais eu le temps d'étudier la gestion des images dans les DCL. Cependant, d'un point de vue purement logique, je dirais que ce n'est pas "placer une image dans un bouton" mais plutôt "faire d'une image un bouton". Le type de tile est différent selon le sens 🙂

Pour m'aider dans mes pérégrinations DCL, j'utilise ce site et ses exemples https://autolisp-exchange.com/Tutorials/MyDialogs.htm

Même si le design fait un peu viellot, c'est pas mal pour apprendre les notions ;]

Bisous, Luna

Posté(e)

Salut Denis,

Pour les image boutons le DCL est de ce type :

image_bouton.PNG.a3bbf5a36a2090eb38f2992e6f1a188b.PNG

Pour ma part je génère le DCL dans mon lisp, mais le principe en fichier DCL externe est le même.

Pour ce qui est du lisp, je vectorise mes images pour cela tu peut utilisé des lisp existant comme : "GetVectors" ou "Pixel Extractor" (une petite recherche sur CADxp)

Je ne me souviens pas le quel j'avais utiliser pour celui là mais l'un des deux cité.

Tu lance ton image de cette façons:

image_bouton_lisp.PNG.946b7e0b9d1f1671aaf8dbedc09a6d4d.PNG

Et tu peux récupérer l'action de la tuile de cette façon :

image_bouton_lisp_action.thumb.PNG.72c08db485e86ab23f2d4d8e38309d96.PNG

image_bouton_lisp_action2.PNG.9db780ee83fb7483ac77e15d9f3be348.PNG

Bonne découverte a toi 🙂

AutoCad c'est comme mon cerveau, je ne l'utilise qu'à 10% Oo

Posté(e)

Bonjour à vous, et un grand merci pour votre aide.
Effectivement, j'ai trouvé beaucoup de réponse sur AutoLISP Exchange, mais pas ça 😪.
@Olivier Eckmann : Merci pour ce lien.
@Fraid : J'ai découvert ce site hier, très intéressant.
@Luna: j'avais déjà fais ce choix, mais j'attendais de savoir s'il y avait une solution plus "propre" 😉,
@Flobott: merci pour ces codes, j'ai déjà GetVectors et SetVectors, je vais regarder Pixel Extractor maintenant.

Donc, cela va être un fardeau (en plus du DCL) pour insérer une image type "Windows" (BMP, ICO, GIF, PNG...) dans un bouton. Je pensais la chose plus "simple".
Si j'ai bien compris, seule une image SLD ferais l'affaire, si non, utiliser une image comme bouton.

Après quelques recherches sur la toile, le peu de site qui propose la conversion d'une image vers le SLD ne fonctionne pas.

Encore merci à toi la communauté.

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Alors je me souviens d'un poste de LEEMAC avec l'utilisation des Bitmaps en image, un lisp"DisplayBitmap.lspet bitmapgenerator.lspetImageTiles.dcl

Je n'ai pas eu le temps de creuser a l'époque pour crée des bibliothèque d'image.

Si tu te dirige dans cette solution, un retour serais agréable.

textwrap.png

textwrap.dcl textwrap.lsp

Edit : j'ai retrouvé le liens suivant : http://www.theswamp.org/index.php?topic=41938.msg470521#msg470521

AutoCad c'est comme mon cerveau, je ne l'utilise qu'à 10% Oo

Posté(e)

Je tente un truc, mais je ne sais pas où j'ai mal fais :
Extrait de mon Lisp :

  (set_tile "ImgGetFiled" (findfile "Ok.gif"))

Extrait de mon DCL :

				    : image {
    					action = "GetFile";
						key = "ImgGetFile";
						width = 5.42;
						height = 2.51;
					    fixed_width = true;
					    fixed_height = true;
						aspect_ratio=1.0;
						}

En lieu et place de l'image, j'ai le début du FindFile en texte.

Je pense que je vais devoir oublier les jolis boutons à la faveur de boutons textes... Snif...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Mille mercis @Flobott, c'est vrai que le résultat est sympas.
Ca me convient très bien...
Je m'en vais regarder ça de très près ! ! !

  • Like 1

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

J'ai trouvé des macros pour convertir des BMP en SLD, je les ai testé (y compris celle de notre regretté Patrick_35) mais aucune ne fonctionne.
Mais je viens de remarquer que dans toutes les macros avec des DCL que j'ai, aucune contient des images pour des boutons.
Tampis, j'utiliserais des boutons "simples", avec uniquement du texte...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Ce qui est dommage, avec le DCL, c'est qu'on ne maitrise pas "finement" la disposition des élément dans la fenêtre.
Ici, le edit_box n'est pas à la même hauteur que le button.

62692929_CheminExcel.png.160815f74f1fae14a3e652850c6dab7f.png

Je n'arrive pas à faire une sorte de "mise en page", comme les caractères gras ou italique...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)
Citation

Mais je viens de remarquer que dans toutes les macros avec des DCL que j'ai, aucune contient des images pour des boutons.

C'est aussi mon cas, je ne voulais pas avoir de fichier en plus de mon lisp alors les image en vectoriel me conviennent bien.

Petit exemple que j'avais fait en exercice a l'époque si cela peu t'aider : EDCL7 .lsp

Citation

Je n'arrive pas à faire une sorte de "mise en page", comme les caractères gras ou italique...

Il ne faut pas être trop exigent avec les DCL, c'est une interface basique 😉

AutoCad c'est comme mon cerveau, je ne l'utilise qu'à 10% Oo

Posté(e)

Un super grand merci à toi @Flobott.
Je ne comprends pas pourquoi, les DCL des autres sont bien "paginées" et pas les miennes 😢. Mais c'est vrai que c'est "basique".
Deux petites choses :
 - t
on EDCL7.lsp a des images magnifiques, mais elles prennent du temps à s'afficher et, quand je parcours le LSP (1.7Mo) dans l'IDE, AutoCAD plante systématiquement ! ! !
 - ton Vectorize.lsp est carrément magique, mais cela signifie que la vectorisation se fait depuis les entités d'un DWG et non depuis un fichier PNG, GIF...
Encore merci, je vais voir tout ça.
Mais je pense finir sans images.
Encore merci.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)
Citation

ton EDCL7.lsp a des images magnifiques, mais elles prennent du temps à s'afficher et, quand je parcours le LSP (1.7Mo) dans l'IDE, AutoCAD plante systématiquement ! ! !

Je n'ai pas de plantage sur mes machines, c'est un exemple que j'ai utilisé comme base pour mon menu d'un gros lisp perso, je viens de tester dans l'IDE que je n'utilise que rarement mais il ne plante pas sur ma machine. L'image met quelque dixième de second pour se placer correctement mais cela ne me dérange pas du moment que l'image est compréhensible.

Citation

- ton Vectorize.lsp est carrément magique, mais cela signifie que la vectorisation se fait depuis les entités d'un DWG et non depuis un fichier PNG, GIF...
Encore merci, je vais voir tout ça.

Oui je convertis mes images en vecteur et les retravaille au propre sur un dwg et je l'ai convertie en vecteur pour le lisp.Logo_Outils.dwg

En faisant des images plus simples, je pense que le chargement serait plus instantané à tester 🙂

AutoCad c'est comme mon cerveau, je ne l'utilise qu'à 10% Oo

Posté(e)

Wouaouw ! ! !
Je comprends maintenant pourquoi il y a un petit temps de chargement des images vectorisées dans le DCL...
Très jolies pictogrammes d'ailleurs.
Je verrais plus tard pour convertir mes PNG en DWG.
Encore merci à toi.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

  • 1 mois après...
Posté(e)
Le 10/02/2023 à 11:23, DenisHen a dit :

Ce qui est dommage, avec le DCL, c'est qu'on ne maitrise pas "finement" la disposition des élément dans la fenêtre.
Ici, le edit_box n'est pas à la même hauteur que le button.

62692929_CheminExcel.png.160815f74f1fae14a3e652850c6dab7f.png

Je n'arrive pas à faire une sorte de "mise en page", comme les caractères gras ou italique...

J'ai trouvé une solution pour aligner les edit_box et les boutons il suffit de rajouter : vertical_margin=none; dans l'edit_box voire le lien suivant : https://www.cadtutor.net/forum/topic/70013-vertical-alignment-dcl/

AutoCad c'est comme mon cerveau, je ne l'utilise qu'à 10% Oo

Posté(e)

Salut @Flobott et merci pour ton aide.
Effectivement, il n'y a presque pas d'aide en ligne là-dessus. Mais il me semble que "vertical_margin" ne fonctionne pas partout.
Comme dans ce genre de cas, par exemple :

        : radio_row {
          : text {label = "Style d'ouvrant :";vertical_margin = none;alignment = left;}
          : radio_button {label = "Fenêtre";key = "OuvFen";width = 13;}
          : radio_button {label = "Porte";key = "OuvPor";width = 13;}
        }

Merci encore.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut @DenisHen pas de soucis pour le partage.

Pour le texte et les radios, tu peux faire l'inverse pour les alignées sur leur base, tu mets le "vertical_margin = none;" sur les boutons radios;

code_vertical_marginnone.PNG.4336865d22fae1bfbcc2cb9a7a519743.PNG

pour avoir un résultat plus propre ^^

vertical_marginnone.PNG.7f467dccf197cfcbba4ae71fad8597d9.PNG

J'avais dû aligner des images avec des boutons radio :

Cble.PNG.722b6070108d4aff23b7b0375dcbf7c0.PNG

  • Like 1

AutoCad c'est comme mon cerveau, je ne l'utilise qu'à 10% Oo

Posté(e)

Salut @Flobott et merci pour ton aide.
Ce que je n'arrive pas à faire, c'est aligner un text avec un edit_box :
Voici mon code :

image.png.2326f12ca65aa52736851b72ecb84dba.png
Et la fenêtre :
image.png.ec57dd8204c9b00234ac9adce74d20c0.png
Comme tu peux le constater.
J'ai essayé beaucoup de combinaisons, mais rien y fait.
Et je veux éviter un label avec les row, qui serait plus simple, mais le cadre prend trop de place, car ici, c'est un petit test, ma fenêtre d'origine est beaucoup plus grande.
J'ai l'impression que ça ne fonctionne pas avec tout.
Encore merci à toi.
Denis...

 

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Si ca peut aider, voici une fenêtre qui m'a bien pris la tête a aligner.

Il faut vraiment tous mettre dans des colonnes et des lignes, des colonnes dans les lignes, des lignes dans les colonnes (piouf), puis jouer sur les marges et alignements !


image.png.03446bcf5c28cfa1e2130a2176a9438b.png

Print.dcl

Posté(e)

Merci pour ton aide @SF.Designer.
Lignes, colonnes., lignes dans colonne et colonnes dans ligne, c'est ce que je pense avoir fais.
Mais je vais revoir ma copie, histoire de dire que j'aurais bien fouillé le bidule.
Encore merci.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)
Citation

Ce que je n'arrive pas à faire, c'est aligner un text avec un edit_box :

@DenisHen Pour aligner le texte à un edit_box il faut mettre ton texte dans une colonne, mettre ton édit box dans une autre colonne et mettre les deux colonnes dans une ligne. c'est ce que j'ai dans ma boîte de dialogue "données câble" :Cble2.PNG.a8571917da8749b4dfd7b927e4c79e99.PNG

AutoCad c'est comme mon cerveau, je ne l'utilise qu'à 10% Oo

Posté(e)

Salut @didier, je viens à l'instant de faire la triste et même observation.
J'ai tenté le coup avec des vertical_alignment que j'ai "inventé".
Car je ne l'ai trouvé nul part, c'est en tapant au pif qu'il s'est colorisé en bleu dans l'IDE, coup de bol...
Le code :
image.png.a73c8ab202cb652cc3233a147a462dde.png
La fenêtre :
image.png.87fff1d5e488fb8ba9ddc697f40f0f4c.png

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é