how to place a dialog window
Wilhelm Sanke
sanke at hrz.uni-kassel.de
Sat Nov 11 06:15:10 EST 2006
On Fri Nov 10, Chipp Walters chipp at chipp.com wrote:
> OK Wilhelm.
>
> How about this then,
>
>on mouseUp
> put the short name of the topStack into tStack
> go inv stack "answer Dialog"
> set the loc of stack "answer Dialog" to 200,200
> show stack "Answer Dialog"
> answer "Choose a color" with "red" or "green" or "blue"
> set the defaultStack to tStack
> set the backcolor of fld 1 to it
>end mouseUp
>
>
> That should solve your problem. Still quick and dirty. Oh, what if your
> topStack is a palette, or even modal/non-modal??? Then don't use it,
> or hack
> it further to accomodate.
>
> I agree, the preferred way is to use one's own answer/ask dialogs, but
> sometimes (as in when you are creating plugins for others to use inside
> THEIR versions of Rev), you can't always count on your hacked versions
> being
> 'in play.'
Hi Chipp,
This works fine, of course. Playing around with a number of different
solutions I had added "of stack "answertest"" to the line where the
backcolor is set.
The situation will be slightly more complicated (but not much) when you
have to use "globalloc" to place the "answer dialog" relative to a
control of your stack, which is what I use the NewLoc property for most
of the time.
Using "set the loc of stack "answer dialog" to globalloc(tloc) would
place the "answer dialog" relative to itself, not to the "calling"
stack. You have here to compute globalloc *before* you set the loc of
the dialog.
Let's compare two kinds of scripts, the first based on your solution above
"on mouseUp
put the short name of the topStack into tStack
put the loc of fld 1 into tloc
add 100 to item 2 of tloc # to place the dialog near to the field
put globalloc(tloc) into tloc
go inv stack "answer Dialog"
set the loc of stack "answer Dialog" to tloc
show stack "Answer Dialog"
answer "Choose a color" with "red" or "green" or "blue"
set the defaultStack to tStack
set the backcolor of fld 1 to it
end mouseUp"
Solution 2 using "NewLoc":
"on mouseUp
put the loc of fld 1 into tloc
add 100 to item 2 of tloc # to place the dialog near to the field
set the NewLoc of stack "answer Dialog" to globalloc(tloc)
answer "Choose a color" with "red" or "green" or "blue"
set the backcolor of fld 1 to it
end mouseUp"
That makes 10 script lines vs. 5, and you have to pay attention to more
implications in the first script, which could therefore rather named a
"slow" solution.
Of course, with the "NewLoc" variant, you need to add the two extra
script lines before "end preopenstack" of the answer dialog script.
But you do this only once for your Rev version, and once these two
scriptlines are in place, you have the best of two worlds, being able to
set the loc of the dialog with "NewLoc" any time you wish the short way,
and at the same time - if you do not specify a NewLoc - having the
answer dialog behave like it normally does.
Adding the two scriptlines is not too difficult, maybe my description of
the process is rather detailed and needs some attention to be
understood, but actually adding those lines should not take longer than
40 seconds - making it easy to quickly patch each new version of
Revolution (in case the Rev team does not come up with a solution of
their own).
Best regards,
Wilhelm
<http://www.sanke.org/MetaMedia>
More information about the use-livecode
mailing list