Aller au contenu

Comment faire un bouton avec une image dans un DCL ?


DenisHen

Messages recommandés

Salut,

Je prends le train en route, mais, personnellement, je commencerais par faire "au plus simple".

Test : dialog{
  label = "Titre";
  :row{
    :edit_box{ label="Test à aligner : Départ ="; key = "DimChapDep"; edit_width=4; }
    :edit_box{ label="Arrivée ="; key = "DimChapArr"; edit_width=4; }
  }
  spacer;
  ok_cancel;
}

image.png.0f59d4c17d1e72d6afcc53f1bda88f7d.png

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut @(gile), et merci pour ta remarque qui vient de me donner une gentille claque...
Effectivement, c'est beaucoup plus simple.
Mais ça ne fonctionne par partout, qu'en est-il pour ça ?
image.png.7e73017d70093c0280f95ca20075e7cf.png
Qui donne
image.png.a1ef25e2a0e88d64e2ca4a36b771170e.png

C'est dans des cas où les "tiles" sont mélangés que je galère...

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)

Lien vers le commentaire
Partager sur d’autres sites

Peut-être comme ça :

Test : dialog{
  label = "Titre";
  :row{
    :text{ label= "Ouvrant principal :"; alignment=centered; }
    :radio_row{
      :radio_button{ label="Départ"; key = "CharDep"; }
      :radio_button{ label="Arrivée"; key = "CharArr"; }
    }
    :toggle{ label = "Poignée int."; key = "PoiInt"; }
    :toggle{ label = "Poignée ext."; key = "PoiExt"; }
    :column{ ok_button; cancel_button; }
  }
}

image.png.e391df2536a4a19485d34b6919f2af88.png

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci @(gile), c'est beaucoup mieux que ce que j'arrivais à faire...
Ce n'est pas vraiment aligner, mais ça me va...
Par contre, avec ça, j'ai essayé plusieurs méthodes.
On voit une différence selon que le fixed_height attribut le column général ou le edit_box...
image.thumb.png.a34e2a25760e85ca8d58d4fba51b3873.png
 

Ce qui donne des alignements biscornus...
image.png.9e72755ad0fe4128ed38afc389477e26.png

Bon, demain est un autre jour...
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)

Lien vers le commentaire
Partager sur d’autres sites

Encore une fois, commence toujours par faire au plus simple. Le DCL ne permet pas toujours un contrôle précis de la position des éléments. Comme dit par d'autres, si l'apparence des boites de dialogues est primordiale, il faut passer à Open/Object DCL, VBA ou .NET.

En groupant les contrôles dans des boxed_row ou boxed_column, on peut plus facilement arriver à des résultats acceptables.

Test :dialog{
  label = "Titre";
  :boxed_radio_row{
    label="Présence d'un cadre";
    spacer_1;
    :radio_button{ label="Avec cadre"; key="AvecCad"; }
    :radio_button{ label="Sans cadre"; key="SansCad"; }
  }
  :row{
    :boxed_column{
      label="Dimensions";
      :edit_box{ label="Long. cadre ="; key="LongCad"; edit_width=4; }
      :edit_box{ label="Larg. cadre ="; key="LargCad"; edit_width=4; }
    }
    :boxed_column{
      label="Epaisseurs";
      :edit_box{ label="Epais. long ="; key="EpaisLong"; edit_width=4; }
      :edit_box{ label="Epais. larg ="; key="EpaisLarg"; edit_width=4; }
    }
  }
  spacer;
  ok_cancel;
}

image.png.898e9dd858f78d3760b180603bb55a8f.png

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci @(gile) pour ton aide.
Je ne peut pas faire ça, car la fenêtre et le code que j'ai posté sont juste un teste, ça fait parti d'une autre fenêtre beaucoup plus grande, et c'est organisé comme ça.
Ma méthode (qu'on m'a conseillée plusieurs fois) est d'isoler le problème puis le résoudre en faisant des testes.
Donc, je n'ai pas trop le choix, ça doit tenir en une ligne.
Et faire des boxed_* augmente la taille de la fenêtre, et je voudrait éviter de faire des pancartes 😉.

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)

Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, DenisHen a dit :

ça fait parti d'une autre fenêtre beaucoup plus grande, et c'est organisé comme ça.
[...]
Et faire des boxed_* augmente la taille de la fenêtre, et je voudrait éviter de faire des pancartes

Si ta boite de dialogue est trop grande pour pouvoir l'organiser clairement avec des cadres (boxed_*), c'est, à mon avis, qu'il est temps de reconsidérer la question dans sa globalité. Une boite de dialogue trop grande, c'est ce que j'appelle le syndrome du couteau suisse : quand il a trop de lames, on n'arrive plus à trouver facilement celle qu'on cherche... On utilise des boites dialogue quand on estime que les saisies en ligne de commande serait trop confuses, faire des boites de dialogues qui ne seraient pas plus claires n'est pas une solution.

Essaye de voir si tu ne peux pas la séparer en plusieurs boites plus petites qui seraient appelées en cascade et uniquement si nécessaire. Dans ton dernier exemple, on peut supposer que si on choisit l'options "Sans cadre", il n'est pas nécessaire de spécifier les longueur, largeur et épaisseurs.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @DenisHen

Je me sens obligé de plussoyer @(gile)

Trop de choix est contre-productif.
Faire le "m'as-tu-vu" est sympa pour se faire plaisir (et encore ça se discute !), mais les utilisateurs se perdent dans les choix, sachant que certaines combinaisons n'existent pas.
Une autre proposition :
il est possible de griser un choix s'il n'est pas accessible, par exemple griser les tailles de cadres si le bouton de choix est "sans cadre".

Penser aux caractères mnémotechniques est un plus remarqué par les utilisateurs habitués au clavier.

Le mieux est l'ennemi du bien...

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Pour afficher une IMAGE dans un DCL, ce je fais :

   1. J'insère l'image dans un dessin VIERGE

   2. Je fais un ZOOM ETENDU

   3. Comme l'image n'est pas proportionnel à la fenêtre je recadre la fenêtre sur l'image

   4. Je fais un MCLICHE

Et j'obtiens bien mon image dans la fenêtre DCL...

 

Christian

 

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous, et merci pour votre aide.


 @(gile) : effectivement, si "Avec cadre" est sélectionné, certaines cases s'activent ou s'inactivent selon les besoins. J'y ai passé du temps (déjà à comprendre), mais j'y suis arrivé 👍.
Faire plusieurs fenêtres qui s'affichent successivement ne montre pas la somme des variables en un coup d'œil, il faut sans cesse cliquer pour bien connaitre les saisies. je ne trouve pas ça très "convivial" ou "efficace", mais c'est probablement juste une question personnelle, ou de gout.


 @didier : plussoie l'ami 😉, c'est cadeau. Ma fenêtre n'est pas énorme (12 / 15 cm sur l'écran) et il n'y a pas trop de variables (beaucoup moins que dans d'autres fenêtres que j'ai déjà croisées), elles sont toutes essentielles.
Je préfère créer des fenêtres "modestes" car je pense à ceux qui sont sur un ordinateur portable avec un "petit" écran et/ou une définition "faible".
De plus, je n'ai rien trouvé pour mettre en gras ou italique le contenu des fenêtres, et je pense que ça n'existe pas, car jamais vu une fenêtre DCL formaté.
Est-ce une raison de plus pour passer à Visual Studio ?


 @rebcao : merci pour ton rappel, qui me vieilli de 30 années (qui se souvient d'AutoCAD 11 sous DOS ?) ! ! !

Pour préciser mon but : voici 4 exemples qui dessinent une ouverture (fenêtre ou porte) en seulement deux cliques. Je dessine des maisons individuelles et des immeubles et c'est crevant de dessiner les ouvertures, et tout aussi crevant de le faire avec des blocs (car il faut les faire et je n'en ai pas "besoin", car aucune ouverture ressemble à une autre).
image.png.98083ca87903f36fc090109c9b846174.png
On peut voir vite fait quelques options : avec poignée, l'angle d'ouverture, oscillo-battant ou pas...
Mais d'autres options existent : châssis fixes (à gauche et/ou à droite), dessin des montants (exemple 1), dessin des poignées (intérieurs et/ou extérieurs), ouverture à battants, sur rails, à galandage, fixes, de 1 à 4 vantaux... Je m'arrête-là.
Tous ça car, mon voisin de droite ne travaille pas comme moi, ni comme celui de gauche, et ces deux-là ne travaillent pas comme moi... Et ceux d'en face ? ? ? 😉 

Ca à l'air d'un casse-tête, mais après 2 ou 3 utilisations (testé sur des collègues), c'est on ne peut plus simple et rapide. Mon but n'est pas de faire rapidement du code mais de faire rapidement du dessin...

Bref, j'espère que ce sera plus clair quand je partagerais tous ça...

Encore un grand merci à tous.
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)

Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, DenisHen a dit :

Ma fenêtre n'est pas énorme (12 / 15 cm sur l'écran)

Alors je me permet d'insister à propos de l'utilisation de clusters (boxed_*) qui clarifieront l'affichage et permettront un code LISP plus simple.
Un boxed_radio_* permet de récupérer directement la clé de l'option choisie et il est possible de griser/dégriser l'ensemble du contenu d'un cluster.

En reprenant l'exemple précédent,

DCL

Test :dialog{
  label = "Titre";
  :row{
    :boxed_radio_column{
      label="Présence d'un cadre";
      key="Cadre";
      :radio_button{ label="Avec cadre"; key="AvecCad"; }
      :radio_button{ label="Sans cadre"; key="SansCad"; }
    }
    :boxed_column{
      label="Dimensions";
      key="Dim";
      :edit_box{ label="Long. cadre ="; key="LongCad"; edit_width=4; }
      :edit_box{ label="Larg. cadre ="; key="LargCad"; edit_width=4; }
    }
    :boxed_column{
      label="Epaisseurs";
      key="Epais";
      :edit_box{ label="Epais. long ="; key="EpaisLong"; edit_width=4; }
      :edit_box{ label="Epais. larg ="; key="EpaisLarg"; edit_width=4; }
    }
  }
  spacer;
  ok_cancel;
}

LISP

(defun c:test (/ dcl_id)
  (setq dcl_id (load_dialog "B:\\Desktop\\Test.dcl"))
  (new_dialog "Test" dcl_id)
  (set_tile "Cadre" "AvecCad")
  (action_tile
    "Cadre"
    (vl-prin1-to-string
      '(if (= $value "AvecCad")
	(progn
	  (mode_tile "Dim" 0)
	  (mode_tile "Epais" 0)
	)
	(progn
	  (mode_tile "Dim" 1)
	  (mode_tile "Epais" 1)
	)
      )
    )
  )
  (start_dialog)
  (unload_dialog dcl_id)
  (princ)
)

 

test_dialogue.gif

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut @(gile), je l'avais bien compris, et mis en œuvre.

Citation

J'y ai passé du temps (déjà à comprendre), mais j'y suis arrivé 👍.

par contre, je ne passais pas par un (vl-prin1-to-string mais via un (action_tile tout simple :
  (action_tile
    "NbVt1"
    "(if (= \"1\" $value)
    (progn (setq NbVt \"1\")
    (mode_tile \"DimChaDep\" 1)
    (mode_tile \"DimChaArr\" 1))
     )"
  ) ;_ Fin de action_tile

 

  (action_tile
      "AvecCad"
      "(if (= \"1\" $value)
	(progn (setq CadreON \"AvecCad\")
	(mode_tile \"LongCad\" 0)
	(mode_tile \"EpaisLong\" 0)
	(mode_tile \"LargCad\" 0)
	(mode_tile \"EpaisLarg\" 0)
	(mode_tile \"EpaisOuv\" 1))
	)"
    )
(action_tile
      "SansCad"
      "(if (= \"1\" $value)
	(progn (setq CadreON \"SansCad\")
	(mode_tile \"LongCad\" 1)
	(mode_tile \"EpaisLong\" 1)
	(mode_tile \"LargCad\" 1)
	(mode_tile \"EpaisLarg\" 1)
	(mode_tile \"EpaisOuv\" 0))
	)"
    )

Le plus difficile, c'est que l'IDE ne gère que les couleurs et pas l'indentation dans ce qu'il y a entre guillements... 
Donc, ce qui est entre guillemets n'est pas toujours évident à comprendre, mais ça ce fait après un petit entrainement...

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)

Lien vers le commentaire
Partager sur d’autres sites

Regarde bien ce que j'ai écrit. Avec les clusters, pas besoin d'un action_tile pour chaque radio_button, juste un seul pour le boxed_radio_column, idem pour les appels à mode_tile, on grise ou dégrise tout le cluster d'une seule ligne au lieu de le faire pour chaque edit_box.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Wouaouw, je n'avais pas tout compris (même après relecture)...
C'est vachement plus puissant que ce que je faisais...
En gros, il n'y a plus qu'un seul (action_tile au lieu de la multitude qu'il peut il y avoir selon le nombre de "tile"...
Très judicieux, et comme à ton habitude, bien plus efficient, direct et très simple (en fait)...
Un merci énorme pour ce raccourcis de pensée...

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)

Lien vers le commentaire
Partager sur d’autres sites

@didier Tu obtiens un alignement sur leurs bases malgré la ligne et les colonnes, je te fournis en pièce jointe un extrait de mon code (entre les ligne 242 et 567), en espérant que cela t'aide.Extrait_DCL.lsp

@DenisHen

Citation

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...

Super t'as trouvaille, je pense que top et bottom doivent aussi fonctionner, à tester.

Pour ma part si je change mes "vertical_margin=none;" en "vertical_margin=centered;" cela me donne le même resultat que si je n'avais pas mis de "vertical_margin=none;".

vertical_margincentered.PNG.3d55b32f99f37082263b64aa7b70667d.PNG

et avec "vertical_margin=none;" en colonne dans une ligne j'ai un bon résultat :

vertical_marginnone.PNG.59af456aca1fc2eed90765fee65ea007.PNG

J'espère que mon code peut vous aidez à aligner différentes tuiles, dans mon cas : toggle, edit_box, text et image_button sont alignées.

  • Upvote 1

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Flobott

Je te remercie pour tes efforts, mais mauvaise nouvelle, je n'ai pas réussi à faire tourner ton exemple.
C'est un extrait et il doit y avoir des manques que j'ignore.

Je continue à chercher, mais j'ai d'autres choses sur le feu, et en plus le DCL est vraiment peu en usage, donc peu d'envie de travailler à fond dessus.

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

@didier Pas de soucis, je t'ai fait un extrait fonctionnel en vitesse, commande TL. Tuile_alignees.lsp

Tuilesalignes.PNG.d1d92c6e5eaec5f45c60a48bea92792e.PNG

Citation

Je continue à chercher, mais j'ai d'autres choses sur le feu, et en plus le DCL est vraiment peu en usage, donc peu d'envie de travailler à fond dessus.

Ne le laisse pas trop de côté, ton site m'a bien aidé à mes débuts (et pas que à mes début) dans le DCL et je ne dois pas être le seul mais un temps pour tous c'est mieux ^^

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

Lien vers le commentaire
Partager sur d’autres sites

@Flobott : non, tu n'es pas le seul pour qui le site de @didier est un véritable couteau suisse ! ! !
Encore merci à lui...

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)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Flobott

Je te remercie pour tes efforts, en particulier le dépôt du fichier DCL.
En fait de fichier DCL, c'est un fichier LSP qui crée un fichier DCL temporaire et ce n'est pas simple à lire, a minima : moins simple qu'un pur fichier DCL avec la possibilité d'aperçu dans l'éditeur sans avoir à enregistrer les modifications.

J'ai donc été "obligé" de créer un DCL pour les tests.
Toutefois, sans arriver à réaliser parfaitement la demande de @DenisHen.

Je continue à chercher, mais ce langage manque quelque peu de retours d'expériences, ce que je me propose de faire sur mon site.

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

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é