how to place a dialog window
Wilhelm Sanke
sanke at hrz.uni-kassel.de
Fri Nov 10 12:45:34 EST 2006
On Tue Nov 7; Mark Swindell mdswindell at cruzio.com wrote:
> What is the correct syntax to tell Rev where to place a dialog window?
>
> Example:
>
> Ask "What's your name?" (at the location of this wd)
and on Wed Nov 8, Phil Davis revdev at pdslabs.net answered:
> Hi Mark,
>
> Personally I'm not aware that you can set the screen position of a
> standard Rev
> dialog, though I'm willing to be corrected.
>
> I often use a substack as a dialog. (snip)
Although I frequently build my own custom dialogs, I also make use of
the possibility to "place" "answer and "ask" dialogs.
This has been implemented in the alternative Metacard IDE since about a
year. The same approach can be used within Revolution if you make the
necessary small changes - only two added lines - to the scripts of the
dialogs.
I have uploaded a sample stack that shows a number of different ways to
place dialogs and how to modify the scripts of the 2.7.x Rev dialogs to
<http://www.sanke.org/Software/PlaceDialogsRev.zip>
This stack contains modified answer and ask dialogs as substacks. A
folder "modifieddialogs" in the zip-file contains modified versions of
stacks "revanswerdialog.rev" and "revaskdialog.rev" that can be used to
replace the default Rev stacks in folder "toolset" .
An older stack that can be used with Rev 2.6.x can be found on page
"Tools and Samples for Development" at
<http://www.sanke.org/MetaMedia>
(Scroll far down on that page).
===========================
From the text of the new sample stack:
Normally, an answer dialog or ask dialog is displayed at the center of
the stack from which it called by the "answer" or "ask" command (on
Windows) and on Mac OS slightly above the center of the stack.
The modified card scripts of stack "answer dialog" and "ask dialog"
have two added lines at the end of the preopenstack handler -
immediately before "end preopenstack" - that creates or sets a custom
property "NewLoc" of the dialog.
"if the NewLoc of this stack is not empty then set the loc of this stack
to the NewLoc of this stack
set the NewLoc of this stack to empty"
Line 2 of the above script ensures that the default behavior of the
dialog is restored for the next time you open the dialog and have *not*
specified a "NewLoc" before, meaning the two added lines do not affect
the "normal" behavior of the dialogs unless you choose to determine a
"NewLoc".-
You have to set a value for NewLoc in the script of the calling button
above the line with the "answer" or "ask" command, like
set the NewLoc of stack "Answer dialog" to 150,150
answer "Does this work?"
As "answer dialog" and "ask dialog" are stacks (even as substacks) the
coordinates you set are screen coordinates.
If you want to place the dialogs relative to the stack - e.g. near one
button, to the right of a field etc. - you have to use the globalloc()
property which transforms stack to screen coordinates; example:
To place a dialog below a button you could use:
"put the loc of me into tloc # the position of the calling button
add 90 to item 2 of tloc # the y value
set the NewLoc of stack "answer dialog" to globalloc(tloc)
answer "immediately below the button?""
If you set the x,y values directly instead of a variable you have to
put the values between quotes like
set the NewLoc of stack "answer dialog" to globalloc("150,300")
Compare the different ways to set values for NewLoc in scripts of the
sample buttons.
I have added a modified "answer dialog" and "ask dialog" as substacks to
this sample stack. These substacks take precedence over IDE stacks when
you use the "answer" or "ask" command.-
Now, how to change the script of stack "Answer dialog" (likewise for the
"ask dialog") in Revolution
Up to version Rev 2.6.x the answer and ask dialogs were substacks of the
"home" ("license") stack.
From version 2.7.x on the stacks were renamed to "revanswerdialog.rev"
and "revaskdialog.rev" and transferred to folder "toolset".
versions 2.7.x
- choose "open stack" from menu button "File" and open stack
"revanswerdialog" in folder "toolset"
- choose "card inspector" and then "edit script"
- add the two scriptlines just before "end preopenstack"
- save stack "revanswerdialog"
In versions Rev 2.6.x this is different, because answer and ask dialogs
are substacks of stack "Home" (stack "licence.rev")
- check "Revolution UI elements in Lists" under menu button "View"
- open the "Application Browser" and click on "Answer dialog"
- right-click on card ID 1002 to bring up the script editor
- add the two lines
- save the dialog
In both versions 2.6.X and 2.7.x you can also use the message box to
change the script and type
edit script of cd 1 of stack "answer dialog"
(Be sure to "save stack "answerdialog"" in the message box afterwards.)
This is possible although in 2.7.x the answer dialog has been renamed to
"revanswerdialog". This new name is only "the effective filename", the
real name with which the dialog is called is still "answer dialog".
"revanswerdialog" can be used with "open stack" etc. only from the
"File" menu item, not from msg.
Another possibility is to substitute "revanswerdialog" and
"revaskdialog" in folder "toolset" with the two dialog stacks of the
same name in folder "modified dialogs" that comes with this sample stack.
I recommend first to rename the default Rev dialogs to something like
"obs-revanswerdialog" ("obs" for "obsolete").
The new dialogs in folder "modified dialogs" have also the additional
advantage of a much smaller width.
The original Rev dialogs are much too wide for my taste. The minimum
width for the Rev "answer dialog" is 400 pixels, even if the answer
string contains only four chars like with "O.K." .--
More information about the use-livecode
mailing list