Home

LiveCode

Chapitre 7 : Changer la taille des fenêtres



Comme avec n'importe quelle fenêtre de votre PC, il est possible d'agrandir ou de réduire la taille de la fenêtre de votre pile, en tirant sur le point bas droit de la fenêtre.

À cette action LiveCode envoie un message "resizeStack". Il vous faut donc mettre dans chaque carte un :

on resizeStack

end resizeStack



Il faudra aussi récupérer la nouvelle taille de la fenêtre par :

put width of this card into largeur

put height of this card into hauteur



Et appliquer ces nouvelles valeurs, par exemple avec la commande location ou rectangle etc...



on resizeStack

put height of this stack into hauteur

put width of this stack into largeur

set location of "Back" to largeur-20, hauteur-20

--rectangle c'est left, top, right, bottom

set rectangle of button "Utility" to 180, hauteur-30, 220, hauteur-10

end resizeStack



Nous étudierons les propriétés de placement dans un autre chapitre. Les principaux sont location et rectangle. Location donne la position du milieu de l'objet. Rectangle donne les quatre points cardinaux de l'objet.



Le cas des objets backgrounds

En mettant le script resizeStack au niveau carte, il faudrait dupliquer le code des backgrounds dans chaque carte. C'est faisable. Mais, fastidieux en cas de modification.

Pour cela, nous mettrons au niveau de la carte que les objets locaux à redimensionner et pour les objets backgrounds nous terminerons le script par la commande "pass resizeStack".


on resizeStack

put width of this card into largeur

put height of this card into hauteur


-- Commande pour local field, button


pass resizeStack -- for common bg field .....

end resizeStack



Et nous mettrons un nouveau script resizeStack au niveau supérieur, mais, attention il y a un piège si il y a des sub-stacks, ils sont dans le chemin d'accès des messages.


Le chemin des messages est : objets, background, sub-stack, stack principal.


Donc, le resizeStack d'une carte de la pile principale passe par le niveau sub-stack. Confusion avec le resizeStack de la sub-stack. Il n'y a pas d'erreur de généré. Le script s'arrête ne trouvant pas les objets, sans que vous sachiez pourquoi.


Pour éviter cela, il y a deux solutions :

  1. Vérifiez, au niveau de la sub-stack, que vous êtes sur la bonne stack et passer le message vers la stack principal, si ce n'est pas le cas. À éviter car il y a risque d'oubli.
  2. if the short name of this stack is not "sub-stack-name"

    then pass resizeStack

    else traitement resize sub-stack



  3. Ou au niveau de la stack principale, ou vous vous trouvez, mettre le resizeStack dans n'importe lequel des backgrounds présent sur toutes les cartes. le script sera exécuté dans le background et ne passera pas à la sub-stack.



Voyant cela avec un exemple


Téléchargez la pile initTuto



Cette pile ne contient que deux cartes. la première carte est la carte de contrôle de la pile et la deuxième carte la carte "Template".

La carte "Template" ne contient que des backgrounds. Elle ne doit pas être modifiée et sert comme son nom l'indique comme base pour créer des nouvelles cartes.



initTutoCard1

initTutoCard2



Le script resizeStack de la carte 1



on resizeStack

put width of this card into Largeur

put height of this card into Hauteur

-- for card1 local field, button

set the rectangle of card field "versionText" to 55, 0, Largeur - 50, Hauteur

-- Bouton administrateur

set location of card button "show working" to ((Largeur/2)-60), Hauteur-15

set location of card button "Create Card" to 80 , Hauteur-15

pass resizeStack -- for common bg field Next, .....

end resizeStack


Les boutons administrateurs "show working", "Create Card" sont rendus visibles par Cd+clic sur le bouton "help".



Le script resizeStack de la carte "Template"


Il n'y a que le "pass resizeStack" puisque les objets sont tous des backgrounds. C'est juste un squelette pour les futures cartes de votre future application.


on resizeStack

put width of this card into Largeur

put height of this card into Hauteur

-- for cardX local field, button

pass resizeStack -- for common bg field Next, .....

end resizeStack



Le script resizeStack des backgrounds


Je l'ai mis dans un background invisible appelé "commonScript".

Utilisez "Project Browser" pour le voir.


on resizeStack

put width of this card into Largeur

put height of this card into Hauteur

-- Bg common to all cards

set bottomLeft of bg image "Previous" to 0, Hauteur -- left, bottom

set bottomRight of bg image "Next" to Largeur, Hauteur -- right, bottom

set bottomRight of bg button "Back" to Largeur, Hauteur-30 -- right, bottom

set location of bg field "cardNum" to Largeur/2, Hauteur-10 -- right, bottom

set topLeft of bg field "cardNb" to 0 , 0 -- left, top

set the location of bg field "Title" to Largeur/2, 20

set topRight of bg image "help" to Largeur, 0 -- right, top

set the rectangle of bg field "helpText" to 55, 0, Largeur - 40, Hauteur

set topRight of bg field "dba" to Largeur,33 -- left, top

end resizeStack



il n'a pas de "pass resizeStack " en dernière ligne. Il ne faut surtout pas passer le message, sinon il irai aux sub-stacks.



Information pour manipuler la pile

"cardNum" est le numéro de la carte.

"cardNb" est le nombre total de cartes dans la pile.

Un clic sur le bouton "help" donne de l'aide.

Un ctrl+clic sur le bouton "help" visualise les boutons d'administration. En particulier "Create card" pour à partir du template de créer une nouvelle carte avec un nouveau nom.

Le champ version donne la version et la liste des modifications.

Je vous laisse quelques temps à manipuler cette pile pour avancer dans vos connaissances.




Merci
SignatureZapfino




Page précédente

Page suivante



Merci de votre visite


UP