Académique Documents
Professionnel Documents
Culture Documents
! ! ! Il existe une sorte de «custom property» appelée «virtual property» pouvant être!
! ! ! utilisée par des scripts pour obtenir un effet plus global qu’avec une «custom!
! ! ! property» ordinaire. Ce type de «custom property» fait l’objet du § 11.05 plus loin!
! ! ! dans ce chapitre.!
!
! ! 11.01.02.! Quand utiliser une «custom property» ?!
!
! ! ! Pour chaque objet composant votre application vous pouvez créer autant de!
! ! ! «custom properties» que vous souhaitez dans lesquelles vous pouvez stocker toutes!
! ! ! sortes de données, y compris des données au format binaire, des données sous!
! ! ! forme de fichier ou de groupes d’objets et même sous forme de stack complet.!
!
! ! ! Créez une «custom property» lorsque vous voulez, par exemple :!
! ! ! –! associer des données à un objet spécifique (ce qui permet, le cas échéant de!
! ! ! ! copier un objet avec ses données associées),!
! ! ! –! enregistrer des données avec un objet dans un «stack file»,!
! ! ! –! accéder rapidement à certaines données,!
! ! ! –! créer des contrôles complexes (sous forme de «stacks») à la volée.!
!
! ! 11.01.03.! Comment créer une «custom property» ?!
!
! ! ! Il existe 2 manières très différentes de créer une «custom property» :!
!
! ! ! –! la première, à l’aide d’un handler ou de la «message box», à partir d’une ligne de!
! ! ! ! code, en attribuant une valeur à une nouvelle propriété désignée par son nom.!
! ! ! ! Dans l’exemple suivant, une «custom property» nommée cpNuméroSession!
! ! ! ! est créée attachée au bouton btnSession :!
!
! ! ! ! set the cpNuméroSession of btn “btnSession“ to 10!
!
! ! ! –! la seconde, dans le cadre de l’IDE, selon le processus suivant, pour le même!
! ! ! ! exemple :!
! ! ! ! après avoir créé un bouton btnSession, sélectionnez-le :! !
! ! ! ! !
! ! ! ! affichez ses propriétés à l’aide de l’inspector, choisissez «custom properties» dans!
! ! ! ! le pop-up menu (5ème item à partir du haut) :!
!
! ! ! ! !
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 3
! ! ! !
! ! ! ! !! !
! ! ! Entrez le nom de la «custom property» nouvellement créée cpNuméroSession et!
! ! ! cliquez sur «OK».!
!
! ! ! Le nom de la «custom property» créée apparaît désormais dans le champ réservé à la !
! ! ! liste des «custom properties» :!
!
! ! ! !
! ! ! Pour affecter une valeur à cette «custom property», sélectionnez!
! ! ! «cpNuméroSession» dans la liste, cliquez dans le deuxième champ en bas de!
! ! ! l’inspecteur nommé «Property Contents» et entrez la valeur 10 :!
!
! ! ! !
! ! ! la «custom property» «cpNuméroSession» est créée et a pour valeur 10.!
!
! ! ! La valeur de cet exemple est très simple. D’autres valeurs peuvent être entrées dans!
! ! ! le champ «Property Contents» tel que des listes ou des tableaux de nombres ou de!
! ! ! mots, par exemple :!
!
! ! ! !
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 4
! ! ! !
! ! ! puis cliquez sur l’icône de suppression .!
!
! ! 11.01.05.! Modifier une partie d’une «custom property»!
!
! ! ! Comme les propriétés intégrées, les «custom properties» ne sont pas des!
! ! ! «containers» de sorte que vous ne pouvez pas utiliser une «chunk expression» pour!
! ! ! modifier une partie de la «custom property». Vous pouvez néanmoins mettre la!
! ! ! valeur de la «custom property» dans une variable et modifier la variable, puis vous!
! ! ! remplacez la valeur de la «custom property» par la nouvelle valeur de la variable, par!
! ! ! exemple :!
!
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 5
! ! ! local vlVariable
put the cpLastCall of this card into vlVariable
put “mars“ into word 3 of vlVariable
set the cpLastCall of this card to vlVariable!
!
! ! 11.01.06.!Faire référence à une «custom property»!
!
! ! ! Faire référence à une «custom property» c’est la même chose que de faire référence!
! ! ! à une propriété intégrée : il suffit de faire se suivre le mot the, le nom de la!
! ! ! «custom property», le mot of et la référence à l’objet.!
! ! ! Par exemple, pour utiliser une «custom property» nommée cpDernierAppel
! ! ! attachée à une carte (card), servez vous de la ligne de code suivante :!
!
! ! ! put the cpDernierAppel of this card into fld “date“!
!
! ! ! Comme les propriétés intégrées, les «custom properties» sont une source de valeurs!
! ! ! vous devez donc obtenir (get) ces valeurs pour les utiliser dans votre code.!
! ! ! La valeur de la «custom property» se substitue à la référence de la «custom property» !
! ! ! lorsque l’instruction est exécutée.!
! ! ! Par exemple si la «custom property» cpDernierAppel de la carte a pour valeur!
! ! ! «Aujourd’hui», l’instruction ci-dessus mettra les caractères «Aujourd’hui» dans le!
! ! ! champ «date».!
!
! ! ! Si une «custom property» n’existe pas sera évaluée comme empty (vide). Par!
! ! ! exemple si la carte (card) courante n’a pas de «custom property» du nom de!
! ! ! cpDernierAppel, l’instruction donnée en exemple ci-dessus videra (empty) le!
! ! ! champ «date».!
!
! ! ! La propriété customKeys d’un objet liste les «custom properties» de cet objet, une !
! ! ! par ligne :!
!
! ! ! put the customKeys of btn 1 into fld “fldCustomProps“!
!
! ! ! Pour savoir si une «custom property» existe dans un objet, il suffit de vérifier si cette !
! ! ! «custom property» est présente dans les customKeys de l’objet.!
! ! ! L’instruction suivante vérifie si un «player» possède une «custom property» nommée!
! ! ! cpToutJouer :!
!
! ! ! if cpToutJouer is among the lines of the customKeys of \
player “monPlayer“ then...
!
Nota : faire référence à une «custom property» n’existant pas n’entraîne pas d’erreur!
! ! ! de script. Cela signifie que si vous avez mal orthgraphié le nom de la «custom!
! ! ! property» dans un «handler» vous n’obtiendrez pas de message d’erreur ce qui peut!
! ! ! entraîner un problème lors du débugage.!
!
! ! ! Vous pouvez également regarder la liste des «custom properties» dans le panel!
! ! ! «Custom Properties» dans l’inspector de l’objet (cf. § 11.01.03 ci-avant).!
!
! 11.02.! Utilisation avancées des «custom properties»!
!
! ! 11.02.01.! Stocker un fichier dans une «custom property»!
!
! ! ! Vous pouver utiliser une adresse universelle (URL) pour stocker le contenu d’un!
! ! ! fichier dans une «custom property», par exemple :!
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 6
!
! ! ! set the cpFichierStocké of stack “stkPile“ to \
URL “binfile:monimage.jpg“!
!
! ! ! Pour restaurer le fichier, vous placez la valeur de la «custom property» dans l’adresse!
! ! ! universelle (URL) :!
!
! ! ! put the cpFichierStocké of stack “stkPile“ into \
URL “binfile:monimage.jpg“!
!
! ! ! Parce qu’une «custom property» peut contenir n’importe quelle sorte de données,!
! ! ! vous pouvez y stocker aussi bien des fichiers texte que des fichiers binaires.!
! ! ! Vous pouvez vous servir de cette fonctionnalité pour regrouper des fichiers!
! ! ! multimédia ou d’autres types de fichiers dans vos piles.!
!
! ! ! Astuce : pour gagner de la place, compressez le fichier avant de le stocker :!
!
! ! ! set the cpFichierStocké of stack “stkPile“ to \
compress(URL “binfile:monimage.jpg“)
!
! ! ! lors de la restauration du fichier, il convient de d’abord le décompresser :!
!
! ! ! put decompress(the cpFichierStocké of stack “stkPile“ \
into URL “binfile:monimage.jpg“
!
! ! 11.02.02.!Stocker une pile (stack) dans une «custom property»!
!
! ! ! Comme nous l’avons vu ci-dessus, il est possible de stocker toutes sortes de!
! ! ! données dans une «custom property». Cette fonctionnalité très puissante va jusqu’à!
! ! ! permettre de stocker une pile entière dans la «custom property» d’un autre «stack»!
! ! ! ou d’un objet de ce «stack».!
!
! ! ! À titre d’exemple nous prendrons la création d’un «popover» (Mac OS X) de réglage!
! ! ! attaché à un contrôle personnalisé (cf. image ci-dessous) : un «double slider»!
! ! ! permettant de délimiter visuellement 2 valeurs limites (une valeur minimale et une!
! ! ! valeur maximale) :!
!
! ! ! !
!
! ! ! Pour créer la forme générale du «popover», il convient de créer cette forme à la!
! ! ! dimension voulue dans un logiciel de dessin tel que Photoshop ou Pixelmator (le!
! ! ! fond importe peu, seul le découpage extérieur sera pris en compte) :!
!
! ! ! !
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 7
! ! ! Donnez un nom à cette forme qui doit être un fichier image au format «png», par!
! ! ! exemple : «imgFormePopoverDoubleSlider.png»!
!
! ! ! Créez ensuite votre «stack» contenant tous les contrôles que vous souhaitez voir y!
! ! ! figurer et le code afférent. Les dimensions du «stack» devront être égales aux!
! ! ! dimensions de la forme précédemment créée.!
! ! ! Nommons ce stack : «stkModèlePopoverDoubleThumbSlider.livecode»!
!
! ! ! Importez dans votre «stack» «stkModèlePopoverDoubleThumbSlider.livecode»!
! ! ! l’image créée «imgFormePopoverDoubleSlider.png» à l’aide du menu File > Import!
! ! ! As Control. Supposons que LiveCode attribue à cette image l’id 1057.!
!
! ! ! Réglez alors votre «stack» «stkModèlePopoverDoubleThumbSlider.livecode» de!
! ! ! telle sorte qu’il prenne la forme de l’image importée : attribuez au champ!
! ! ! «windowShape» la valeur 1057 correspondant à l’image (forme) importée :!
!
! ! ! !
! ! ! À ce moment le stack nouvellement créé devrait ressembler (en supposant que les!
! ! ! contrôles soient identiques) à l’image ci-dessous :!
!
! ! ! !
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 8
! ! ! !
! ! ! Pour appeler le «popover» il suffit d’entrer cette instruction dans votre code à!
! ! ! l’endroit approprié :!
! go stack the cpPopoverRéglages of me
ou bien
go stack the cpPopoverRéglages of the owner of me
selon la structure de l’objet (bouton, champ ou groupe...)!
!
! ! ! LiveCode construira alors automatiquement le «stack» contenu dans la «custom!
! ! ! property».!
! ! ! !
! ! ! Cette fonctionnalité très puissante (et très rapide) ouvre des possibilités immenses!
! ! ! quant à l’utilisation des «custom properties» dans le cadre de la création d’interfaces!
! ! ! complexes.!
!
! 11.03.! Relier «handlers» et «custom properties»
!
! ! Lorsque vous modifiez une «custom property» ou lorsque vous demandez la valeur d’une!
! ! «custom property», LiveCode envoie un «trigger» setProp à l’objet dont la «custom property» a !
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 9
! ! été modifiée ou envoie un appel getProp à l’objet dont la «custom property» a été modifiée.!
! ! Pour interagir avec ces modifications ou demandes de valeur, vous pouvez écrire un «handler» !
! ! setProp pour intercepter le «trigger» ou un «handler» getProp pour intercepter l’appel.!
!
! ! Utiliser des «handlers» getProp et setProp vous permet de :!
! ! –!valider la valeur d’une «custom property» avant de la régler,!
! ! –!retourner la valeur d’une «custom property» dans un format différent de celui dans lequel!
! ! ! cette «custom property» est stockée,!
! ! –!s’assurer de la cohérence d’une collection de «custom properties» en les réglant toutes d’un!
! ! ! seul coup,!
! ! –!modifier le comportement d’un objet lorsqu’une «custom property» est modifiée.!
!
! ! Vous pouvez inclure dans un script autant de «handlers» setProp ou getProp pour autant de!
! ! «custom properties» que vous le souhaitez.!
!
! ! Nota : les «triggers» setProp et les appels getProp ne sont pas envoyés lorsqu’une propriété!
! ! intégrée est modifiée ou que l’on demande à accéder à sa valeur, ces déclenchements ne!
! ! concernent que les «custom properties».!
!
! ! 11.03.01.! Répondre au changement de la valeur d’une «custom property»!
!
! ! ! Lorsque vous modifiez une «custom property», LiveCode envoie un «trigger» setProp !
! ! ! à l’objet dont la «custom property» a été modifiée. Vous pouvez écrire un «handler»!
! ! ! setProp pour intercepter ce «trigger» pour interagir avec cette modification de!
! ! ! «custom property» et placer de «handler» où vous le souhaitez dans la hiérarchie des!
! ! ! messages (message path) utilisé par le trigger à l’instar des messages.!
!
! ! ! Structure d’un «handler» setProp!
!
! ! ! Contrairement à un «handler» interceptant un message, un «handler» interceptant!
! ! ! un «trigger» setProp débute par le mot setProp en lieu et place du mot on suivi par !
! ! ! le nom du «handler» qui est identique à celui de la «custom property» et du !
! ! ! paramètre représentant la nouvelle valeur de la «custom property».!
! ! ! Comme tous les autres «handlers», un «handler» setProp se termine par le mot end!
! ! ! suivi du nom de la «custom property».!
!
! ! ! L’exemple suivant montre un «handler» setProp pour une «custom property» nommée !
! ! ! cpPercentused qui doit être placée dans le script de l’objet lié à la «custom!
! ! ! property» :!
!
! setProp cpPercentused vpNewamount
if vpNewamount is not a number or \
vpNewamount < zero or vpNewamount > 100 then
beep 2
exit cpPercentused
end if
pass cpPercentused
end cpPercentused
!
! ! ! Lorsque vous modifiez (set) la «custom property» cpPercentused, le «handler»!
! ! ! cpPercentused sera exécuté :!
!
! ! ! set the cpPercentused of scrollbar “Progress“ to 90!
!
! ! ! Quand cette instruction est exécutée, LiveCode envoie un «trigger» setProp au!
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 10
!
! ! ! setProp cpDernièremodification vpNouvelledate
convert vpNouvelledate to seconds
lock messages -- évite la boucle perpétuelle
set the cpDernièremodification of the target to vpNouvelledate
unlock messages
end cpDernièremodification!
!
! ! ! Nota : pour faire référence à l’objet pour lequel la «custom property» est définie,!
! ! ! utilisez la fonction target. Target fait référence à l’objet qui reçoit en premier!
! ! ! le «trigger» setProp même si le «handler» en phase d’exécution est dans le script d’un!
! ! ! autre objet.!
! ! ! ! !
! ! ! Régler des «custom properties» avec un «handler» setProp!
!
! ! ! Dans l’exemple cpDernièremodification ci-avant, le «handler» modifie (set)!
! ! ! directement la «custom property» au lieu de passer simplement le «trigger» setProp.!
! ! ! Vous devez utiliser cette méthode si le «handler» opère un changement de la valeur!
! ! ! de la «custom property» car l’instruction pass passe uniquement la valeur initiale!
! ! ! de la «custom property».!
!
! ! ! Important : si vous utilisez la commande set dans un «handler» setProp pour!
! ! ! modifier (set) la même «custom property» de l’objet courant, aucun «trigger» setProp!
! ! ! ne sera envoyé à l’objet courant de manière à éviter la création d’une boucle!
! ! ! perpétuelle. Lorsque vous définissez (set) une autre «custom property», LiveCode!
! ! ! envoie un «trigger» setProp ce qui provoque le déclenchement du «handler» dédié à la !
! ! ! «custom property» pour un objet autre que celui dont le script contient le «handler»!
! ! ! setProp.!
!
! ! ! En utilisant cette méthode vous pouvez non seulement vérifier la valeur de la!
! ! ! «custom property», l’autoriser à être modifiée (set) non seulement si la plage de!
! ! ! valeur est respectée, mais aussi si, par exemple, le format est correct et ainsi de!
! ! ! suite pour d’autres conditions.!
!
! ! ! L’exemple suivant est similaire au «handler» cpPercentused ci-avant mais avec!
! ! ! l’adjonction d’un signal sonore si la valeur du paramètre vpNewamount n’est pas!
! ! ! comprise dans la plage de valeur autorisée. Le «handler» force la nouvelle valeur à!
! ! ! entrer dans la plage allant de 0 à 100.!
!
! ! ! setProp cpPercentused vpNewamount
set the cpPercentused of the target to \
max(zero,min(100, vpNewamount))
end cpPercentused!
!
! ! ! «Custom property» inexistante!
!
! ! ! Si la «custom property» dont il est fait référence dans un «handler» setProp n’existe!
! ! ! pas, le «handler» setProp est tout de même exécuté lorsque un «handler» modifie (set) !
! ! ! la «custom property». Lorsque le «handler» envoie le setProp «trigger» dans ce cas la!
! ! ! «custom property» est créée.!
!
! ! 11.03.02.! Répondre à une requête concernant la valeur d’une «custom property»!
!
! ! ! Lorsque vous demandez la valeur d’une «custom property», LiveCode envoie un!
! ! ! appel getProp à l’objet dont la «custom property» a été modifiée. Vous pouvez écrire!
! ! ! un «handler» getProp pour intercepter cet appel pour interagir avec cette!
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 12
! ! ! nom de celle dont vous ne voulez plus dans cette variable ; il vous suffit alors de!
! ! ! mettre à jour la liste des noms des «custom properties» à l’aide de la propriété!
! ! ! customPropertySets attachée aux «custom properties» de l’objet.!
!
! ! ! Par exemple, le script qui suit a pour effet de supprimer un ensemble de «custom!
! ! ! properties» ou «custom property set» nommée csMonEnsemble attaché au!
! ! ! bouton btnBouton :!
!
! ! get the customPropertySets of btn “btnBouton“
set the wholeMatches to true
delete line lineOffset(“csMonEnsemble “,it) of it
set the customPropertySets of btn “btnBouton“ to it!
!
! ! ! Vous pouvez également supprimer un ensemble de «custom properties» ou «custom!
! ! ! property set» depuis le panel «Custom Properties» dans l’inspector de l’objet :!
! ! ! sélectionnez l’ensemble de «custom properties» ou «custom property set» à!
! ! ! supprimer (dans cet exemple : csEnsembleCP) :!
!
! ! ! !
! ! ! !
!
! ! ! puis cliquez sur l’icône de suppression .!
!
! ! 11.04.03.!Référence à un ensemble de «custom properties»!
!
! ! ! Voici quelques lignes de code illustrant l’exemple évoqué à la fin du § 11.04.01!
! ! ! ci-avant :!
!
! ! ! set the customPropertySet of this stack to “csEspagnol“!
!
! ! ! Ce code rend actif l’ensemble de «custom properties» ou «custom property set» !
! ! ! nommé csEspagnol. Comme vous ne pouvez avoir qu’un seul ensemble de!
! ! ! «custom properties» ou «custom property set» actif à la fois pour chacun des objets!
! ! ! de l’application, désormais, chaque référence à une «custom property» de cet objet!
! ! ! pointera sur la valeur contenue dans l’ensemble de «custom properties» ou «custom!
! ! ! property set» actif.!
!
! ! ! Dans ce même exemple, pour revenir à la langue de base de l’application (le!
! ! ! français), il suffit d’utiliser le code suivant :!
!
! ! ! set the customPropertySet of this stack to empty
!
Si vous faites référence à une «custom property» ne faisant pas partie de l’ensemble!
! ! ! (custom property set) actif, LiveCode retournera la valeur empty.!
! ! ! Si vous attribuez une valeur à une «custom property» ne faisant pas partie de!
! ! ! l’ensemble (custom property set) actif, LiveCode créera cette «custom property»!
! ! ! dans l’ensemble (custom property set) actif. Vous pouvez donc avoir deux «custom!
! ! ! properties» portant le même nom mais situées dans deux ensembles (custom!
! ! ! property set) distincts, une modification de l’une des deux n’affectera pas l’autre.!
!
! ! ! La propriété customProperties d’un objet n’inclut uniquement que les «custom!
! ! ! properties» présentes dans l’ensemble de «custom properties» (custom property set)!
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 16
! ! ! end, le nom du handler setProp est le même que celui de l’ensemble de «custom!
! ! ! property» (custom property set) qu’il contrôle : csTexteFrancais. Parce qu’il n’y !
! ! ! a qu’un seul «handler» pour toutes les «custom properties» composant l’ensemble!
! ! ! (custom property set), le «handler» utilise l’instruction de contrôle switch pour!
! ! ! effectuer une action différente pour chacune des «custom properties» concernées.!
!
! ! ! Supposons que vous changiez la «custom property» cpMessageErreurStandard :!
!
! ! ! set the customPropertySet of this stack to “csTexteFrancais“
set the cpMessageErreurStandard of this stack to field 1
! ! ! paramètre selon une syntaxe spéciale. Cela signifie que pour une «custom property»!
! ! ! d’un ensemble, vous écrivez un seul «handler» setProp pour l’ensemble plutôt qu’un!
! ! ! «handler» pour chacune des «custom properties».!
!
! ! ! L’exemple suivant traite des appels getProp pour toutes les «custom properties»!
! ! ! d’un ensemble de «custom properties» (custom property set) nommé ! !
! ! ! csRéglagesExpert contenant des «custom properties» nommées!
! ! ! cpMenuFichier, cpMenuEdition et sans doute d’autres «custom properties :!
!
! ! ! Attention : si un «handler» getProp n’est pas attaché à l’objet contenant la «custom!
! ! ! property» et qu’il utilise la valeur de cette «custom property», une boucle sans fin!
! ! ! sera générée. Pour éviter ce problème il suffit de définir la propriété!
! ! ! lockMessages sur true avant de recueillir la valeur de la «custom property».!
!
! ! ! getProp csRéglagesExpert[cpNomPropriété]
-- le paramètre cpNomPropriété contient le nom de la
-- custom property à intercepter
switch cpNomPropriété
case “cpMenuFichier “
if the csRéglagesExpert[cpMenuFichier] of the \
target is empty then return “(No items“
else pass csRéglagesExpert
break
case “cpMenuEdition“
if the csRéglagesExpert[cpMenuEdition] of the \
target is empty then
return the csRéglagesDébutant[cpMenuEdition] \
of the target
else
pass csRéglagesExpert
end if
break
default
pass csRéglagesExpert
end switch
end csRéglagesExpert!
!
! Comme vous pouvez le remarquer dans les instructions de contrôle pass et end,!
! ! ! le nom du handler getProp est le même que celui de l’ensemble de «custom!
! ! ! property» (custom property set) qu’il contrôle : csRéglagesExpert. !
! ! ! Parce qu’il n’y a qu’un seul «handler» pour toutes les «custom properties» composant !
! ! ! l’ensemble (custom property set), le «handler» utilise l’instruction de contrôle!
! ! ! switch pour effectuer une action différente pour chacune des «custom properties» !
! ! ! concernées.!
!
! ! ! Supposons que vous interceptiez la «custom property» cpMenuFichier :!
!
! ! ! set the customPropertySet of btn 1 to “csRéglagesExpert “
put the cpMenuFichier of btn 1 into me
! ! ! la «custom property».!
!
! 11.05.! Tableaux (arrays), «custom properties» et ensembles de «custom
properties» (custom properties sets)
!
Toutes les «custom properties» composant un ensemble de «custom properties» (custom!
! ! property set) forment un tableau (array). Le nom du tableau (array) est celui de l’ ensemble!
! ! de «custom properties» (custom property set) et les éléments de ce tableau (array) sont les!
! ! «custom properties» composant cet ensemble.
!
! ! 11.05.01.! Faire référence à des «custom properties» en utilisant la syntaxe propre aux tableaux (arrays)!
!
! ! ! Vous pouvez utiliser la syntaxe propre aux tableaux (arrays) pour faire référence aux!
! ! ! «custom properties» dans n’importe quel ensemble de «custom properties» (custom!
! ! ! property set). Cela vous permet d’interroger (get) ou d’affecter (set) une valeur à!
! ! ! n’importe quelle «custom property», même si celle-ci ne se trouve pas dans!
! ! ! l’ensemble de «custom properties» (custom property set) actif, sans changer celui-ci.!
!
! ! ! Prenons, par exemple, un bouton ayant une «custom property» nommée cpProp!
! ! ! faisant partie de l’ensemble de «custom properties» (custom property set) nommé!
! ! ! csEnsemble. Si csEnsemble est l’ensemble actif vous pouvez faire référence à!
! ! ! la «custom property» cpProp comme ceci :!
!
! ! ! get the cpProp of btn 1
set the cpProp of the target to 20
!
Vous pouvez également utiliser la syntaxe propre aux tableaux (arrays) pour faire!
! ! ! référence à la «custom property» cpProp même si l’ensemble de «custom!
! ! ! properties» (custom property set) csEnsemble n’est pas l’ensemble actif :!
!
! ! ! get the csEnsemble[“cpProp“] of btn 1
set the csEnsemble[“cpProp“] of the target to 20!
!
! ! 11.05.02.! Stocker un tableau (array) dans un ensemble de «custom properties» (custom properties set)!
!
! ! ! Si vous stockez plusieurs «custom properties» dans un ensemble de «custom!
! ! ! properties» (custom property set), cet ensemble peut être utilisé comme un tableau!
! ! ! (array). Vous pouvez considérer l’ensemble de «custom properties» (custom property !
! ! ! set) comme une simple «custom property» et chaque «custom property» de cet!
! ! ! ensemble comme étant les composants d’un tableau (array).!
!
! ! ! Pour stocker un tableau (array) de variables, vtTableau, dans un ensemble de!
! ! ! «custom properties» (custom property set), utilisez le code suivant :!
!
! ! ! set the customProperties[“csEnsemble“] of me to vtTableau
!
Remarque : étant donné que l’ensemble de «custom properties» (custom property !
! ! ! set) n’a pas de nom, il n’est pas possible d’utiliser la syntaxe propre aux tableaux!
! ! ! (arrays) pour faire référence à une «custom property» contenue dans l’ensemble par!
! ! ! défaut.!
!
! ! ! Le code ci-avant crée un ensemble de «custom properties» (custom property set)!
! ! ! nommé csEnsemble et stocke chaque élément dans le tableau (array)
vtTableau en tant que «custom property» dans un nouvel ensemble. !
! ! ! Pour extraire un élément du tableau (array) utilisez le code suivant :!
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 21
!
! ! ! get the csEnsemble[“vtElement“] of fld “fldExemple“
!
! 11.06.! Virtual properties (propriétés virtuelles)
!
! ! 11.06.01.!Qu’est-ce qu’une «virtual property» ?!
!
! ! ! Une «virtual property» (propriété virtuelle) est une «custom property» qui n’existe!
! ! ! que dans un «handler» setProp et/ou getProp et qui n’est jamais réellement défini.!
! ! ! Une «virtual property» n’est jamais attachée à un objet, elle est utilisée pour!
! ! ! déclencher des «handlers» setProp et getProp qui eux sont chargés de l’action à!
! ! ! mener.!
!
! ! ! Lorsque vous utilisez la commande set avec une «virtual property», son «handler»!
! ! ! setProp est exécuté mais le «trigger» setProp n’est pas transmis au moteur LiveCode si !
! ! ! bien que la «virtual property» n’est pas attachée à l’objet. Lorsque vous utilisez une!
! ! ! «virtual property» dans une expression, son «handler» getProp retourne une valeur!
! ! ! sans faire référence à l’objet. Dans les deux cas, l’utilisation d’une «virtual property»!
! ! ! entraîne simplement l’exécution d’un «handler».!
!
! ! ! Vous pouvez utiliser des «virtual properties» pour :!
! ! ! – donner à un objet un ensemble de comportements,!
! ! ! – calculer la valeur associée à un objet,!
! ! ! – intégrer une nouvelle propriété qui se comporte comme une propriété intégrée.!
!
! ! 11.06.02.!Quand utiliser une «virtual property» ?!
!
! ! ! Comme elles ne sont pas stockées dans un objet, les «virtual properties» sont!
! ! ! éphémères, c’est à dire qu’elles sont recalculées chaque fois que vous les sollicitez.!
! ! ! Lorsqu’une «custom property» dépend d’autres propriétés pouvant être définies de!
! ! ! manière indépendantes, il peut être judicieux d’utiliser une «virtual property».!
! ! ! Par exemple, le «handler» ci-dessous calcule la position courante d’une barre de!
! ! ! défilement sous forme de pourcentage (à la place d’un nombre absolu) :!
!
! ! ! getProp cvPourcentage
put the endValue of the target - the statValue \
of the target into vpValeur
return the thumbPosition of me * 100 div vpValeur
end cvPourcentage
!
La valeur de la «custom property» cvPourcentage dépend de la!
! ! ! thumbPosition de la barre de défilement qui peut changer à chaque instant (à la!
! ! ! fois par l’action de l’utilisateur ou par l’intermédiaire d’un «handler»). Pour cette!
! ! ! raison, si vous utilisez une «custom property» associée à l’objet, celle-ci devra être!
! ! ! recalculée en permanence. En utilisant une «virtual property» vous pouvez être sûr!
! ! ! que la valeur de la propriété sera toujours actualisée car le «handler» getProp la!
! ! ! recalculera chaque fois que la propriété cvPourcentage de la barre de!
! ! ! défilement sera appelée.!
!
! ! ! Les «virtual properties» peuvent également être de bonnes solutions lorsque les!
! ! ! valeurs des propriétés sont grandes. Étant donné que la valeur d’une «virtual!
! ! ! property» n’est pas stockée dans un objet, elle ne prend pas d’espace-disque et n’est!
! ! ! montée en mémoire que le temps du calcul.!
! ! ! Une autre bonne raison d’utiliser une «virtual property» est d’éviter les redondances. !
! ! ! Le «handler» suivant règle la largeur (width) d’un objet, non pas en pixels, mais!
LIVECODE > DOCUMENTATION FRANÇAISE VERSION 1.0 DU 15 AOÛT 2013 PAGE 22
! ! ! path». Le fait de le placer dans le script de pile (stack) permet de le rendre opérant!
! ! ! pour tous les objets de la pile (stack). Le placer dans un «backScript» permet de le!
! ! ! rendre opérant pour tous les objets de l’application, si celle-ci est composée de!
! ! ! plusieurs piles (stacks).!
!
! ! ! Limiter la «virtual property» cvPourcentageLargeur!
!
! ! ! La plupart des propriétés intégrées ne s’appliquent pas à tous les types d’objets.
! ! ! Vous pouvez, de la même manière, créer une «virtual property» qui ne concernera!
! ! ! qu’un certain type d’objets. Il n’est pas très utile, par exemple, de connaître la!
! ! ! largeur d’un «substack» ou la largeur d’une carte sous la forme du pourcentage de la!
! ! ! largeur de la pile principale (main stack).!
!
! ! ! Vous pouvez limiter la définition de cette propriété à certains objets en vérifiant le!
! ! ! nom de l’objet cible :!
!
! ! ! setProp cvPourcentageLargeur vpNouveauPourcentage
if word 1 of the name of the target is “stack“ \
or word 1 of the name of the target is “card“ \
then exit setProp
set the width of the target to the width of the owner \
of the target * vpNouveauPourcentage div 100
end cvPourcentageLargeur!
!
! ! ! Nota : pour faire référence à l’objet dont la propriété est définie, utilisez la fonction !
! ! ! target. Target fait référence à l’objet qui a reçu le «trigger» setProp même si le!
! ! ! «handler» en cours d’exécution est placé dans le script d’un autre objet.!
!
! ! ! Le premier mot du nom d’un objet (word 1 of the name) est le type de l’objet, !
! ! ! l’exemple ci-dessus montre comment ignorer la modification de largeur si les objets!
! ! ! sont des cartes (card) ou des piles (stack).