Comment faire pour qu'un "Icon" change à chaque clic "OnSelect" avec 3 états differents minimum

  • Comment faire pour qu'un "Icon" change à chaque clic "OnSelect" avec 3 états differents minimum

    Posté par Deleted User sur 31 mai 2023 at 8h14

    Hello la commu, 👋

    Pour une interface utilisateur, en mode modification, j’ai un icône représentant un statut de la donnée concernée.

    Pour faire un parallèle plus classique, c’est un peu le fonctionnement d’un “DropDown”.

    Chaque valeur de la liste est un icône, au lieu d’ouvrir un menu déroulant et pour rendre plus graphique l’ UI l’utilisateur clic sur l’icône et on lui propose le suivant.

    Avec 2 icônes seulement je vois bien comment faire, mais au delà je ne sais pas d’autant qu’il faut que sa boucle et c’est bien le cas de figure que je tente de résoudre. 🤔

    • Pour être clair, admettons que j’ai 4 icônes représentés ici par un nombre de 1 à 4

    • Si l’icône actuel est 4 à l’affichage et que je clique dessus une fois de plus alors je m’attends logiquement à avoir 1.

    Si vous avez des ressources ou pistes je prends j’ai déjà écumés les pistes MS, PPFC 😁 , Matthew Devanney, et Shane Young.

    🙏 Merci de votre aide 😉

    PostID=Azpu8gtwOJZAVRt

    R3dKap a répondu 11 months, 3 weeks ago 1 Membre · 7 Réponses
  • 7 Réponses
  • DavidZed

    Member
    31 mai 2023 at 10h41

    Hello Nels ,

    J’ai fait ça avec une image SVG, qui changeait en fonction du statut d’une tâche : ” à faire, en cours, terminé”

    Il suffit de faire un Switch(), et pour chaque valeur, possible, on renseigne la suivante :

    (Dans cet exemple c’est sur un patch, mais on peut utiliser une variable)

    Cela fait une boucle : “Non démarré” ► “En cours” ► “Terminé” ► “Non démarré” ► …

    Ensuite pour la source de l’image ou l’icone, on met un autre switch() sur la valeur actuelle

    CommentID=BcpgbkNYL01JIgE, PostID=Azpu8gtwOJZAVRt

  • Deleted User

    Member
    31 mai 2023 at 11h22

    Je tourne en boucle avec le Switch depuis quelques temps… je vais reprendre avec ton explication merci.

    Bon j’ai pas tout compris avec ” l’autre switch() sur la valeur actuelle) mais je creuse 😉

    CommentID=fSZpLEHA9FmjfEw, PostID=Azpu8gtwOJZAVRt

  • R3dKap

    Member
    31 mai 2023 at 12h29

    Nels voici comment faire :

    Il te faut d’abord une collection avec les icônes concernés :

    Set(n    colIcons;n    Table(n        {n            Id: 1;n            Icon: Icon.Addn        };n        {n            Id: 2;n            Icon: Icon.Newspapern        };n        {n            Id: 3;n            Icon: Icon.Redon        };n        {n            Id: 4;n            Icon: Icon.ChevronDownn        }n    )n)

    Ensuite il te faut initialiser une variable avec l’index de l’icône en cours (à faire par ex. dans le OnVisible de ton écran ou le OnStart de ton app) :

    Set(colIconsIndex; 1)

    Ensuite, tu places un icône sur ton écran et tu le paramètre comme ceci :

    MyIcon.OnSelect = Set(colIconsIndex; colIconsIndex * (Mod(colIconsIndex; CountRows(colIcons)) <> 0) + 1)nMyIcon.Icon = Index(colIcons; colIconsIndex).Icon

    Et voilà… 😊

    CommentID=Tp2sVcUTtr0mi9O, PostID=Azpu8gtwOJZAVRt

  • Deleted User

    Member
    1 juin 2023 at 9h36

    Merci de la piste 😄

    J’obtiens des erreurs “division par zéro“.

    Le premier Set de colIconsIndex ne doit pas être au bon endroit.. StartScreen de l’App n’accepte pas cette déclaration.

    Je l’ai donc positionné dans la propriété OnVisible de l’écran (tout comme la déclaration de la table).

    La propriété Icon de l’icône renvoi l’erreur car je suspecte que le moteur n’a pas encore la valeur colIconsIndex défini celle défini dans OnVisible

    Index(colIcons; colIconsIndex).Icon

    Bref il y une tambouille, en forçant l’index, j’ai le comportement attendu mais du coup ça ne fonctionne pas totalement.

    Je creuse.

    CommentID=ZdPhJSm09luqdXi, PostID=Azpu8gtwOJZAVRt

  • Deleted User

    Member
    1 juin 2023 at 11h30

    J’ai ajouté un IfError sur la propriété Icon de l’icône comme suit et ça semble fonctionner, je dis ça semble parce que j’ai Powerapps qui est dans le sac en ce moment.

    IfError(Index(colIcons; colIconsIndex).Icon; Icon.Error)

    Donc je vérifierai demain 😉

    CommentID=T4u1OPETHgdLpXp, PostID=Azpu8gtwOJZAVRt

    • Deleted User

      Member
      1 juin 2023 at 12h07

      Vérifié ça fonctionne mieux, je vais maintenant tenter de l’intégrer, l’adapter à mon contexte… Merci R3dKap 🙏

      SubCommentID=52K3hycpkqwgEqO, CommentID=T4u1OPETHgdLpXp, PostID=Azpu8gtwOJZAVRt

  • R3dKap

    Member
    1 juin 2023 at 12h39

    Normal que tu aies eu une erreur dans StartScreen. Cette propriété de l’objet App permet de définir l’écran de démarrage de l’application en fonction de conditions. Elle attends donc un nom d’écran.

    Les bouts de codes qui doivent être exécuté au moment du lancement de l’application doivent être placés dans la propriété OnStart de App. Si tu ne la vois pas, il faut l’activer dans les paramètres.

    Et oui, c’est l’inconvénient de la fonction Index() qui est une des rares fonctions à afficher un message d’erreur si tu es hors éléments de la collection. Le IfError() peut marcher, mais sinon, j’ai l’habitude de la remplacer par un Last(FirstN(…)) qui lui n’affiche pas d’erreur s’il ne trouve rien.

    CommentID=mXoi4yNM1mMJ7F7, PostID=Azpu8gtwOJZAVRt

Connectez-vous pour répondre.