Obligement - L'Amiga au maximum

Mercredi 24 avril 2024 - 10:32  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En pratique : CanDo - Construire un objet personnalisé
(Article écrit par Randy Finch et extrait du Randy Finch's Web Site - novembre 1993)


Bienvenue dans la troisième partie de ce qui sera désormais une série d'articles sur CanDo. Comme je l'ai promis, cet article traitera du développement d'un objet personnalisé en combinant plusieurs objets CanDo standard. Dans la précédente partie, j'ai parlé de l'utilisation de variables de tableau dynamique, de documents et d'objets de liste pour créer des listes hiérarchiques de noms dans le cadre d'un programme de budgétisation intitulé "SimpleBudget". Je vais maintenant parler d'un objet personnalisé que j'ai créé pour l'utiliser sur plusieurs cartes dans ce même programme.

L'amour de l'argent

Vous avez probablement vu de nombreux programmes qui permettent d'entrer un montant monétaire en dollars et en cents. Eh bien, j'avais évidemment besoin de cette possibilité dans mon programme de budgétisation. J'ai appelé l'objet que j'ai créé à cet effet "Monetary Input Object" (objet d'entrée monétaire). Cet objet a été conçu pour permettre une saisie facile au clavier et à la souris. Plusieurs objets CanDo standard ont été combinés pour créer le Monetary Input Object.

L'échelle du succès

Lors de la conception d'un objet personnalisé, un plan est nécessaire pour rendre le processus de développement aussi facile que possible. Voici mon plan en huit étapes de l'échelle du succès :
  1. Décider ce que l'objet personnalisé doit faire et comment il doit fonctionner.
  2. Déterminer quels objets CanDo standard sont nécessaires pour créer l'objet personnalisé.
  3. Décider de la manière dont les objets standard doivent être disposés sur une carte CanDo pour que l'objet personnalisé soit facile à utiliser.
  4. Créer une carte CanDo et disposer les objets standard conformément à l'étape 3.
  5. Écrire les routines d'événement d'objet pour donner à l'objet personnalisé la fonctionnalité appropriée selon l'étape 1.
  6. Test et débogage.
  7. Répéter l'étape 6 aussi souvent que nécessaire.
  8. Si l'objet personnalisé ne fonctionne pas comme prévu, recommencer à l'étape 1.
Vous pensez peut-être que je me défile avec cette dernière étape. Eh bien, je dois admettre que c'est le cas dans une certaine mesure ; cependant, tout plan qui ne permet pas de recommencer au cas où les choses ne vont pas bien est un plan qui échouera le plus souvent.

Monter l'échelle du Monetary Input Object

Étape 1

Je voulais que le Monetary Input Object soit facile à utiliser à la fois avec le clavier et la souris. Afin d'éviter l'erreur d'arrondi qui peut se produire lors de l'utilisation de nombres à virgule flottante pour les valeurs monétaires, et étant donné que CanDo n'a pas de gestion intégrée pour un type de données de devise, j'ai divisé les dollars et les cents en deux valeurs entières distinctes. Je voulais permettre à l'utilisateur d'incrémenter et de décrémenter les valeurs en dollars et en cents à l'aide de la souris. Cependant, contrairement à d'autres programmes que j'ai utilisés, je voulais que l'utilisateur puisse définir rapidement de grandes valeurs à l'aide de la souris sans avoir à attendre que les valeurs changent seulement d'une unité. J'ai donc décidé que la valeur de l'incrément devait augmenter à mesure que l'utilisateur maintenait le bouton de la souris enfoncé. Enfin, je voulais disposer d'un moyen rapide pour l'utilisateur de remettre le Monetary Input Object à 0,00 $.

Étape 2

Pour mettre en oeuvre les spécifications ci-dessus, j'avais besoin des objets CanDo standard suivants : deux objets TextField, un pour la valeur en dollars et un pour la valeur en cents ; quatre objets AreaButton, deux avec des flèches vers le haut et deux avec des flèches vers le bas pour permettre l'incrémentation et la décrémentation des valeurs en dollars et en cents à l'aide de la souris ; et un objet TextButton pour remettre rapidement le Monetary Input Object à 0,00 $.

Étape 3

La disposition des objets CanDo standard de manière conviviale a été plutôt facile puisqu'il ne semblait y avoir qu'une seule façon logique de procéder. J'ai décidé que le champ de texte dollar devait se trouver à gauche du champ de texte cent, avec un léger espace entre les deux pour montrer clairement qu'ils sont séparés l'un de l'autre. Un signe dollar ($) doit apparaître à gauche du champ dollar pour indiquer que l'entrée doit être une quantité monétaire. Les quatre objets AreaButton doivent être disposés dans une grille de deux par deux à droite du champ "cent", les deux premiers ayant des flèches vers le haut pour indiquer l'incrémentation et les deux derniers ayant des flèches vers le bas pour indiquer la décrémentation. Les deux boutons de gauche serviraient à modifier la valeur en dollars, tandis que les deux boutons de droite serviraient à modifier la valeur en cents. Enfin, le bouton TextField permettant d'effacer le Monetary Input Object devrait contenir le texte "$CLR" pour indiquer que la valeur monétaire sera effacée. Sa position doit être flexible afin qu'il puisse être placé en fonction de la mise en page de la carte à laquelle le Monetary Input Object sera ajouté.

Étape 4

La figure 1 illustre la disposition du Monetary Input Object sur une carte CanDo. Les détails de la carte se trouvent dans la section "Window" du Listing 1 tandis que les détails des objets composant le Monetary Input Object se trouvent dans les sections "Definition des objets" du même listing (voir la partie 2 de cet article pour plus de détails sur la lecture du code source de CanDo).

Listing 1.  Listing du Monetary Input Object

*************
* Deck "CanDo-Part3"
* Time 23:05:29
* Date 08/11/93
*************

*************
* Card(s) in deck.
*  Card "CanDo-Part3"
*************
* 1 Card(s), 1 were printed.
*************

*************
* Natural order of Cards
*  Card "CanDo-Part3"
*************

*************
* There are no Global routines in this deck.
*************

*************
* Card "CanDo-Part3"
 AfterAttachment ; used to be AfterStartup
   SetPrintFont "topaz",8
   SetPrintStyle BOLD ,2,3
   PrintText "$",208,91
   Transparent FALSE
   LoadBrush "RCF:CanDo/Brushes/SmallUpArrow.br","ClippedBrush"
   ShowBrush "ClippedBrush",315,89
   ShowBrush "ClippedBrush",331,89
   LoadBrush "RCF:CanDo/Brushes/SmallDownArrow.br","ClippedBrush"
   ShowBrush "ClippedBrush",315,97
   ShowBrush "ClippedBrush",331,97
 EndScript
 Window "UserWindow"
   Definition
    Origin 0,0
    Size 640,200
    Title "SimpleBudget v1.00  -1992 RKA Productions"
    NumberOfColors 4
    WindowColors 3,1,0 ; Detail, Block, Background
    WindowObjects CLOSEBUTTON 
    WindowFlags ACTIVATE SEPARATESCREEN TOFRONT 
   EndScript
   OnCloseButton
    Quit
   EndScript
 EndObject
 TextField "Dollars"
   Definition
    Origin 225,91
    Size 50,8
    Justification RIGHT 
    MaxFieldLength 6
    InitialText "0"
    Border EMBOSSED ,1,2 ; BorderStyle, MainPen, ExtraPen
   EndScript
   OnRelease
    Nop ; Eliminate the trailing space in box
    Let DollarText = TextFrom("Dollars")
    SetText "Dollars",""
    SetText "Dollars",DollarText
   EndScript
 EndObject
 TextField "Cents"
   Definition
    Origin 281,91
    Size 26,8
    Justification LEFT 
    MaxFieldLength 2
    InitialText "00"
    Border EMBOSSED ,1,2 ; BorderStyle, MainPen, ExtraPen
   EndScript
   OnRelease
    SetText "Cents",FormatValue(TextFrom("Cents"),"00")
   EndScript
 EndObject
 AreaButton "DollarsUp"
   Definition
    Origin 313,89
    Size 10,4
    Border EMBOSSED ,2,1 ; BorderStyle, MainPen, ExtraPen
    Highlight COMPLEMENT 
    ButtonFlags NONE 
   EndScript
   OnClick
    Let Incr = 1
    Loop
      Let DollarText = TextFrom("Dollars")
      Let CentText = TextFrom("Cents")
      If DollarText = "-1" AND CentText <> "00"
        SetText "Dollars","-0"
      ElseIf DollarText = "-0"
        SetText "Dollars","0"
      Else
        If DollarText = 99999
          Nop
        Else
          SetText "Dollars",DollarText+Incr
        EndIf
      EndIf
      Let DollarText = TextFrom("Dollars")
      If DollarText <> 0
        If DollarText MOD 10000 = 0
          If DollarText = 90000
            Let Incr = 1000
          Else
            Let Incr = 10000
          EndIf
        ElseIf DollarText MOD 1000 = 0
          If DollarText = 99000
            Let Incr = 100
          Else
            Let Incr = 1000
          EndIf
        ElseIf DollarText MOD 100 = 0
          If DollarText = 99900
            Let Incr = 10
          Else
            Let Incr = 100
          EndIf
        ElseIf DollarText MOD 10 = 0
          If DollarText = 99990
            Let Incr = 1
          Else
            Let Incr = 10
          EndIf
        Else
          Let Incr = 1
        EndIf
      Else
        Let Incr = 1
      EndIf
      Delay 0,0,5
    Until ObjectState("DollarsUp") = OFF
   EndScript
 EndObject
 AreaButton "DollarsDown"
   Definition
    Origin 313,97
    Size 10,4
    Border EMBOSSED ,2,1 ; BorderStyle, MainPen, ExtraPen
    Highlight COMPLEMENT 
    ButtonFlags NONE 
   EndScript
   OnClick
    Let Incr = 1
    Loop
      Let DollarText = TextFrom("Dollars")
      Let CentText = TextFrom("Cents")
      If DollarText = "0" AND CentText <> "00"
        SetText "Dollars","-0"
      Else
        If DollarText = -99999
          Nop
        Else
          SetText "Dollars",DollarText-Incr
        EndIf
      EndIf
      Let DollarText = TextFrom("Dollars")
      If Integer(DollarText) <> 0
        If DollarText MOD 10000 = 0
          If DollarText = -90000
            Let Incr = 1000
          Else
            Let Incr = 10000
          EndIf
        ElseIf DollarText MOD 1000 = 0
          If DollarText = -99000
            Let Incr = 100
          Else
            Let Incr = 1000
          EndIf
        ElseIf DollarText MOD 100 = 0
          If DollarText = -99900
            Let Incr = 10
          Else
            Let Incr = 100
          EndIf
        ElseIf DollarText MOD 10 = 0
          If DollarText = -99990
            Let Incr = 1
          Else
            Let Incr = 10
          EndIf
        Else
          Let Incr = 1
        EndIf
      Else
        Let Incr = 1
      EndIf
      Delay 0,0,5
    Until ObjectState("DollarsDown") = OFF
   EndScript
 EndObject
 AreaButton "CentsUp"
   Definition
    Origin 329,89
    Size 10,4
    Border EMBOSSED ,2,1 ; BorderStyle, MainPen, ExtraPen
    Highlight COMPLEMENT 
    ButtonFlags NONE 
   EndScript
   OnClick
    Let FirstLoop = TRUE
    Loop
      If Char(ASCII(TextFrom("Dollars"))) = "-"
        If TextFrom("Cents") = "00"
          If TextFrom("Dollars") = "-1"
            SetText "Dollars","-0"
          Else
            SetText "Dollars",TextFrom("Dollars")+1
          EndIf
          If FirstLoop = FALSE
            SetText "Cents","90"
          Else
            SetText "Cents","99"
          EndIf
        ElseIf TextFrom("Cents") MOD 10 = 0 And FirstLoop = FALSE
          If TextFrom("Cents") = "10" AND TextFrom("Dollars") = "-0"
            SetText "Dollars","0"
          EndIf
          SetText "Cents",FormatValue(TextFrom("Cents")-10,"00")
        Else
          If TextFrom("Cents") = "01" AND TextFrom("Dollars") = "-0"
            SetText "Dollars","0"
          EndIf
          SetText "Cents",FormatValue(TextFrom("Cents")-1,"00")
        EndIf
      Else
        If TextFrom("Cents") = "99"
          If TextFrom("Dollars") = "99999"
            Nop
          Else
            SetText "Cents","00"
            SetText "Dollars",TextFrom("Dollars")+1
          EndIf
        ElseIf TextFrom("Cents") MOD 10 = 0 And FirstLoop = FALSE
          If TextFrom("Cents") = "90"
            If TextFrom("Dollars") = "99999"
               SetText "Cents","99"
            Else
               SetText "Dollars",TextFrom("Dollars")+1
               SetText "Cents","00"
            EndIf
          Else
            SetText "Cents",FormatValue(TextFrom("Cents")+10,"00")
          EndIf
        Else
          SetText "Cents",FormatValue(TextFrom("Cents")+1,"00")
        EndIf
      EndIf
      Let FirstLoop = FALSE
      Delay 0,0,5
    Until ObjectState("CentsUp") = OFF
   EndScript
 EndObject
 AreaButton "CentsDown"
   Definition
    Origin 329,97
    Size 10,4
    Border EMBOSSED ,2,1 ; BorderStyle, MainPen, ExtraPen
    Highlight COMPLEMENT 
    ButtonFlags NONE 
   EndScript
   OnClick
    Let FirstLoop = TRUE
    Loop
      Let DollarText = TextFrom("Dollars")
      Let CentText = TextFrom("Cents")
      If Char(ASCII(DollarText)) = "-"
        If CentText MOD 10 = 0 And FirstLoop = FALSE
          If CentText = "90"
            If DollarText = "-99999"
               SetText "Cents","99"
            Else
               SetText "Cents","00"
               SetText "Dollars",DollarText-1
            EndIf
          Else
            SetText "Cents",FormatValue(CentText+10,"00")
          EndIf
        ElseIf CentText = "99"
          If DollarText = "-99999"
            Nop
          Else
            SetText "Cents","00"
            SetText "Dollars",DollarText-1
          EndIf
        Else
          SetText "Cents",FormatValue(CentText+1,"00")
        EndIf
      Else
        If CentText MOD 10 = 0 AND FirstLoop = FALSE
          If CentText = "00"
            If DollarText = "0"
               SetText "Cents","10"
               SetText "Dollars","-0"
            Else
               SetText "Cents","90"
               SetText "Dollars",DollarText-1
            EndIf
          Else
            SetText "Cents",FormatValue(CentText-10,"00")
          EndIf
        Else
          If CentText = "00"
            If DollarText = "0"
               SetText "Cents","01"
               SetText "Dollars","-0"
            Else
               SetText "Cents","99"
               SetText "Dollars",DollarText-1
            EndIf
          Else
            SetText "Cents",FormatValue(CentText-1,"00")
          EndIf
        EndIf
      EndIf
      Let FirstLoop = FALSE
      Delay 0,0,5
    Until ObjectState("CentsDown") = OFF
   EndScript
 EndObject
 TextButton "Amount_Clear"
   Definition
    Origin 356,90
    Font "topaz",8 ; FontName, PointSize
    PrintStyle SHADOW ,2,3 ; Style, Pen1, Pen2
    TextColors 1,0,NORMAL  ; PenA, PenB, DrawMode
    Text "$CLR"
    Border EMBOSSED ,2,1 ; BorderStyle, MainPen, ExtraPen
    Highlight OUTLINE 
    ButtonFlags NONE 
   EndScript
   OnRelease
    SetText "Dollars","0"
    SetText "Cents","00"
   EndScript
 EndObject
* End of Card "CanDo-Part3"
*************

Le symbole du dollar ($) à gauche du Monetary Input Object a été affiché à l'écran à l'aide de commandes CanDo dans la routine d'événement AfterAttachment, au début du Listing 1. Les trois premières lignes de code de cette routine définissent la police et le style d'impression, puis impriment le symbole du dollar. Vous pouvez demander à CanDo d'écrire ces lignes de code pour vous en sélectionnant l'outil d'édition de texte (le gros bouton A à droite de la fenêtre d'édition) et en sélectionnant la police, le style et le texte.

CanDo
Figure 1 - carte "Monetary Input Object"

Malheureusement, une image graphique ne peut pas être attachée directement à un objet AreaButton. L'image, qui doit être un pinceau IFF ILBM, doit être chargée avec la commande LoadBrush, puis affichée avec la commande ShowBrush à l'endroit approprié de l'écran. Un objet ImageButton pourrait être utilisé. Cet objet permet d'attacher une image directement à l'objet, mais aucune bordure ne peut être spécifiée. Cela signifie que l'image elle-même doit également inclure la bordure du bouton si elle est nécessaire. Cela ne pose pas de problème si la taille du bouton ne change pas au cours du développement. Si elle change, l'image doit être modifiée dans un programme de dessin. Comme les quatre boutons d'incrémentation et de décrémentation avaient besoin de bordures et que je n'étais pas sûr de la taille au moment de la conception, j'ai choisi d'utiliser les commandes AreaButtons et ShowBrush.

Les petites flèches vers le haut et vers le bas utilisées sur les quatre boutons AreaButtons sont des brosses que j'ai créées dans Deluxe Paint IV. Leurs noms de fichiers sont "SmallUpArrow.br" et "SmallDownArrow.br". La figure 2 montre un agrandissement des deux brosses afin que vous puissiez facilement créer ces brosses pour votre programme. Les six dernières lignes de la routine AfterAttachment chargent et affichent ces brosses dans les quatre AreaButtons. Si vous devez déplacer le Monetary Input Object à un autre endroit de la carte, il faudra modifier la position X,Y dans les commandes ShowBrush. Il en va de même pour la position X,Y du $ dans la commande "PrintText". La commande "Transparent False" indique à CanDo d'afficher toute couleur d'arrière-plan transparente qui aurait été enregistrée avec la brosse.

CanDo
Figure 2 - SmallUpArrow.br et SmallDownArrow.br

Étape 5

Les routines d'événements d'objets sont présentées dans le Listing 1. Chaque objet qui compose le Monetary Input Object n'est associé qu'à un seul événement. Les deux objets TextField ont chacun une routine d'événement OnRelease. "OnRelease" signifie que l'utilisateur a appuyé sur la touche "Entrée". Je discuterai de ces routines plus en détail plus tard.

Les quatre objets AreaButton ont chacun une routine OnClick. Normalement, une routine OnRelease est utilisée pour les boutons, car elle donne à l'utilisateur la possibilité de changer d'avis sur la sélection après avoir appuyé sur le bouton de la souris en déplaçant le pointeur hors de l'objet avant de le relâcher. Cependant, dans le cas des boutons d'incrémentation et de décrémentation, je voulais que la valeur en cents ou en dollars commence à changer lorsque le bouton de la souris est cliqué pour la première fois et continue à changer jusqu'à ce que le bouton de la souris soit relâché. J'ai donc utilisé la routine OnClick pour incrémenter ou décrémenter la valeur en dollars ou en cents jusqu'à ce que l'utilisateur relâche le bouton de la souris. Nous y reviendrons plus tard.

Enfin, l'objet TextButton permettant de vider le Monetary Input Object utilise la routine standard OnRelease. Elle réinitialise simplement les champs dollar et cent à 0 et 00, respectivement.

Étape 6

Il y avait quelques problèmes (j'ose dire des bogues) avec l'implémentation originale du Monetary Input Object. La version du Listing 1 est le résultat de l'étape 7 de mon plan de réussite en huit étapes.

Étape 7

Tout a été dit à l'étape 6.

Étape 8

Mon plan original a bien fonctionné, et je n'ai pas eu à suivre l'étape 8 (dit-il en soufflant sur ses doigts et en les caressant doucement sur sa poitrine). Chance ou compétence ? Je choisis la seconde.

La figure 3 montre le Monetary Input Object dans le cadre d'une carte plus étendue de mon programme SimpleBudget. Remarquez que j'ai modifié la position relative du bouton "$CLR" pour l'adapter à la conception de la carte.

CanDo
Figure 3 - Le Monetary Input Object utilisé dans une carte de SimpleBudget

Plus d'informations sur le code

L'un des premiers problèmes que j'ai rencontrés lors de l'écriture des routines d'événements pour le Monetary Input Object était lié au champ textuel "Dollars". Vous vous êtes peut-être déjà demandé pourquoi je n'en ai pas fait un champ entier. Eh bien, je l'ai fait à l'origine. Cependant, après avoir saisi une valeur dans le champ "Dollars", il y avait toujours un espace à la fin du champ, ce qui donnait un aspect peu naturel au Monetary Input Object. Quelques techniques astucieuses pouvaient être utilisées pour éliminer ce problème pour les valeurs en dollars contenant plus d'un chiffre, mais je n'ai pas trouvé de moyen d'éliminer le problème pour les valeurs à un chiffre. J'ai donc fait de ce champ un champ de texte, ce qui a créé un autre problème : n'importe quel caractère pouvait être saisi, et pas seulement des caractères numériques. La fonction "FormatValue" ne pouvait pas être utilisée, car elle transforme un "-0" (pour des valeurs telles que $-0,28) en un "0". Toutefois, comme il s'agit d'un champ texte, il existe un moyen de contourner ce problème. Le contenu du champ "Dollars" peut être stocké dans une variable temporaire, le champ est effacé et la variable temporaire est replacée dans le champ. Cette procédure permet d'éliminer l'espace de fin de ligne (cette technique n'a pas fonctionné sur un champ entier avec des valeurs à un chiffre). Cela fonctionne bien du point de vue de l'utilisateur, mais ce n'est pas une solution très glamour du point de vue du programmeur. INOVAtronics doit résoudre ce problème dans une prochaine version de CanDo.

Le champ "Cents" a été créé comme une entrée de texte plutôt qu'une entrée d'entier pour éviter, par exemple, qu'une valeur de cinq soit affichée comme "5" plutôt que "05" ou un zéro comme un "0" plutôt que "00". Pour les montants monétaires, le zéro initial est toujours nécessaire pour les valeurs en cents à un chiffre. La fonction "FormatValue" pourrait être appliquée au champ "Cents" puisqu'aucune valeur 0 n'est nécessaire dans ce champ. Une seule ligne de commande pourrait être utilisée pour réaliser le formatage approprié :

SetText "Cents",FormatValue(TextFrom("Cents"), "00")

Une méthode équivalente sans la fonction "FormatValue" n'a pas fonctionné avec le champ "Dollars" car il est justifié à droite et l'espace de fin n'a pas été éliminé.

Je ne vais pas vous donner une description ennuyeuse, ligne par ligne, du fonctionnement des boutons d'incrémentation et de décrémentation ; je vais plutôt décrire leur fonctionnement du point de vue de l'utilisateur, puis je vous laisserai suivre le code du Listing 1 pour voir comment il a été implémenté. J'ai décidé de limiter le Monetary Input Object à une valeur maximale de 9999,99 $ et à une valeur minimale de -9999,99 $. C'était plus que suffisant pour couvrir tous les montants que j'utiliserais dans mon programme budgétaire.

Lorsque l'utilisateur clique pour la première fois sur le bouton d'incrémentation des cents, la valeur du champ "Cents" commence à s'incrémenter de un. Lorsque la valeur en cents atteint un multiple de 10, la valeur d'incrémentation est portée à 10, ce qui permet à l'utilisateur d'atteindre plus rapidement la valeur nécessaire. Lorsque la valeur en cents atteint 100, le champ Cents est remis à "00" et la valeur en dollars est incrémentée d'une unité. Lorsque l'utilisateur relâche le bouton de la souris, ce processus se termine. Il peut être redémarré avec une valeur d'incrémentation de un en cliquant à nouveau sur le bouton. Le bouton de décrémentation des cents fonctionne de la même manière, sauf qu'il soustrait la valeur d'incrémentation. Notez que si la valeur en dollars est négative, le bouton d'incrémentation des cents doit décrémenter la valeur en cents et le bouton de décrémentation doit l'incrémenter. Je vous laisse le soin de déterminer pourquoi cela est vrai.

Lorsque l'utilisateur clique pour la première fois sur le bouton d'incrémentation des dollars, la valeur du champ "Dollars" commence à être incrémentée de un. Lorsque la valeur du dollar atteint un multiple de 10, la valeur de l'incrément est portée à 10. Lorsqu'elle atteint un multiple de 100, la valeur de l'incrément est portée à 100, et ainsi de suite. Bien entendu, lorsque la valeur du dollar s'approche de la valeur maximale de 99999, la valeur de l'incrément doit diminuer pour s'assurer que la valeur maximale n'est jamais dépassée. Lorsque l'utilisateur relâche le bouton de la souris, ce processus se termine. Il peut être redémarré avec une valeur d'incrémentation de un en cliquant à nouveau sur le bouton. Le bouton de décrémentation des dollars fonctionne de la même manière, sauf qu'il soustrait la valeur d'incrémentation.

Toutes les routines d'événements des boutons d'incrémentation et de décrémentation doivent faire preuve d'une attention particulière lorsque la valeur du dollar est proche de 0. Par exemple, si le Monetary Input Object contient une valeur de 0,00 $ et que l'utilisateur veut décrémenter la valeur en cents de un, que doit-il arriver à la valeur en dollars ? Si vous avez répondu qu'elle doit devenir un -0, alors vous avez répondu avec sagesse. Un cent négatif est affiché comme $-0.01 ; le signe négatif se trouve dans le champ "Dollars".

Réutilisation d'un objet personnalisé

Si vous devez réutiliser un objet personnalisé sur d'autres cartes de vos decks CanDo, vous pouvez créer l'objet personnalisé sur une carte en particulier, puis l'enregistrer sur le disque en tant que deck CanDO unique. Plus tard, vous pouvez charger ce deck, déplacer les objets standard qui composent l'objet personnalisé à l'endroit approprié sur la carte, puis ajouter les objets supplémentaires nécessaires pour la carte.

Si vous devez ajouter une nouvelle carte contenant l'objet personnalisé à un deck existant, vous pouvez charger le deck CanDo contenant l'objet personnalisé, copier la carte à l'aide de l'option Copier du menu "Mode" (qui fait partie du panneau de configuration principal), charger le deck auquel vous souhaitez ajouter la carte, coller la carte contenant l'objet personnalisé sur ce deck, positionner l'objet personnalisé, puis ajouter d'autres objets. L'objet personnalisé peut être ajouté à une carte existante contenant d'autres objets en copiant et collant chaque objet standard individuel composant l'objet personnalisé.

Une fonctionnalité que j'aimerais vraiment voir ajoutée à CanDo est la possibilité de regrouper des objets standard et de les enregistrer en tant qu'objet personnalisé pour les charger plus tard directement sur une autre carte. Cela permettrait à une personne de créer des objets personnalisés et de les distribuer facilement à d'autres personnes. Bien sûr, CanDo devrait permettre de placer l'objet n'importe où sur la carte sans avoir à réécrire le moindre code. Peut-être que la prochaine version de CanDo...

Maintenant, c'est votre tour

Il y a plusieurs fonctionnalités intéressantes que j'aimerais voir ajoutées à l'objet personnalisé Monetary Input Object. Je vous mets au défi, vous, le lecteur, de développer les solutions. Tout d'abord, j'aimerais pouvoir empêcher l'utilisateur de saisir des caractères dans le champ "Dollars", à l'exception des dix chiffres 0-9 et du signe moins (-). N'oubliez pas que -0 est une valeur légitime. Le champ "Cents" ne doit accepter que les nombres entiers 0-9 et doit toujours afficher sa valeur avec deux chiffres tels que 00, 07 et 23. Un zéro ne doit pas s'afficher sous la forme d'un simple 0 ou un sept sous la forme d'un 7. Cela prête à confusion lors de l'affichage des valeurs monétaires. Deuxièmement, il serait bien que, lorsque l'utilisateur saisit le montant en dollars et appuie sur la touche de point (pour un point décimal), le champ de saisie passe du champ "Dollars" au champ "Cents".


[Retour en haut] / [Retour aux articles]