Comment référencer la boîte de contour à partir du menu du triangle rouge sans utiliser de variablesVoici un exemple retravaillé de Scripting Index :
Names Default To Here( 1 );
ob = Outline Box( "Picker",
{"Copy picture", ob << Copy Picture()},
H List Box( Text Box( "Label:" ), teb = Text Edit Box( Char( 213 ) ) )
);
New Window( "Example",
ob
);
Il ajoute un élément de menu dans le menu du triangle rouge qui copierait l'image de cette boîte dans le tampon.
Le script fonctionne très bien.
Ma question est la suivante : que se passe-t-il si je crée mes zones de contour de manière dynamique et que je n'ai pas de variable qui leur est attribuée.
Comment puis-je référencer cette boîte de contour sans variable ? Quelque chose en utilisant les mots-clés « this » ou « self ».
Quelque chose comme ça sur la deuxième case :
Names Default To Here( 1 );
vb = V List Box(
ob = Outline Box( "Picker",
{"Copy picture", ob << Copy Picture()},
H List Box( Text Box( "Label:" ), teb = Text Edit Box( Char( 213 ) ) )
),
Outline Box( "Picker",
{"Copy picture", this << Copy Picture()},
H List Box( Text Box( "Label number 2:" ), teb = Text Edit Box( Char( 213 ) ) )
);
);
New Window( "Example",
vb
);
Il existe de bons exemples dans l'index de script pour définir une fonction sur le nombre de boîtes d'affichage :
Names Default To Here( 1 );
New Window( "Example",
Button Box( "press me", <<SETFUNCTION></SETFUNCTION>
But in this case we're not setting function, we're setting script, and this syntaxis doesn't work.
So, how do I accomplish this?
<LINGO-LABS id="lingo-labs-825339" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatisation et scripts</LINGO-LABEL></LINGO-LABS>Ré: Comment référencer la zone de contour à partir du menu du triangle rouge sans utiliser de variablesJe ne pense pas que vous ayez une telle fonctionnalité pour les scripts de menus de boîte de contour, vous devez donc utiliser autre chose. Trois options intéressantes me viennent à l'esprit :
- Évaluer la référence
- Utiliser la portée de la fenêtre
- Utiliser la portée de la boîte
Names Default To Here(1);
context_example = Context Box(
box:ob1 = Outline Box("Picker",
{"Copy picture1", box:ob1 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(213))
)
)
);
eval_example = Outline Box("Picker",
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(612))
)
);
Eval(EvalExpr(
eval_example << Set Menu Script(
{"Copy Picture3", Expr(eval_example) << Copy Picture()}
);
));
nw = New Window("Example",
context_example,
window:ob1 = Outline Box("Picker",
{"Copy picture2", window:ob1 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(451))
)
),
eval_example
);Ré: Comment référencer la zone de contour à partir du menu du triangle rouge sans utiliser de variablesIl semble que les méthodes Eval et Context fonctionnent dans mon cas, ce n'est pas le cas de Window.
Voici ce que j'ai utilisé pour vérifier, cela imite la création dynamique de boîtes de contour :
Names Default To Here(1);
vb = V List Box();
context_example = Context Box(
box:ob1 = Outline Box("Context1",
{"Copy picture1", box:ob1 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(213))
)
)
);
vb << Append (context_example);
context_example = Context Box(
box:ob1 = Outline Box("Context2",
{"Copy picture1", box:ob1 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(213))
)
)
);
vb << Append (context_example);
eval_example = Outline Box("Eval1",
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(612))
)
);
Eval(EvalExpr(
eval_example << Set Menu Script(
{"Copy Picture3", Expr(eval_example) << Copy Picture()}
);
));
vb << Append (eval_example);
eval_example = Outline Box("Eval2",
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(612))
)
);
Eval(EvalExpr(
eval_example << Set Menu Script(
{"Copy Picture3", Expr(eval_example) << Copy Picture()}
);
));
vb << Append (eval_example);
nw = New Window("Example",
window:ob1 = Outline Box("Window1",
{"Copy picture2", window:ob1 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(451))
)
),
window:ob1 = Outline Box("Window2",
{"Copy picture2", window:ob1 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box(Char(451))
)
),
vb
);Dans le cas de Fenêtre, dans les deux cas de Fenêtre1 et Fenêtre2, il copie l'image de la boîte Fenêtre2.
Ré: Comment référencer la zone de contour à partir du menu du triangle rouge sans utiliser de variablesVous pouvez utiliser une variable plusieurs fois dans un script pour lui attribuer des valeurs différentes. À la fin, la variable contiendra la dernière valeur. Cela est valable pour
x=5;
x=7;
show(x);
et pour :ob1 .
La solution utilise 2 variables différentes pour définir des références à 2 objets différents :
nw = New Window("Example",
window:ob1 = Outline Box("Window1",
{"Copy picture", window:ob1 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box("#1")
)
),
window:ob2 = Outline Box("Window2",
{"Copy picture", window:ob2 << Copy Picture()},
H List Box(
Text Box("Label:"),
teb = Text Edit Box("#2")
)
)
);
Ré: Comment référencer la zone de contour à partir du menu du triangle rouge sans utiliser de variablesVous écrasez vos références dans votre exemple de fenêtre (utilisez window:ob1 et window:ob2 par exemple). Cela ne se produit pas dans la boîte de contexte car box: semble se souvenir de la boîte de contexte à laquelle il appartient. En fonction de votre cas d'utilisation et de votre application « réels », la méthode d'évaluation est généralement la plus robuste, mais toutes ont leurs avantages et leurs inconvénients (tout comme le fait d'utiliser simplement des références directes).
Ré: Comment référencer la zone de contour à partir du menu du triangle rouge sans utiliser de variablesDifficile de trouver plus de détails - même pour les LLM :
