VS:RunLayoutDialog: Difference between revisions
No edit summary |
No edit summary |
||
Line 55: | Line 55: | ||
Do not use the [[VS:Wait]]() function in the event handler subroutine of Layout Manager dialogs. Doing so will freeze the script, though you can force quit it with a command-period. | Do not use the [[VS:Wait]]() function in the event handler subroutine of Layout Manager dialogs. Doing so will freeze the script, though you can force quit it with a command-period. | ||
If you want to prevent a dialog from terminating after someone has clicked on the OK button, set item equal to -1. | If you want to prevent a dialog from terminating after someone has clicked on the OK button, set item equal to -1. Note that in Python there is no output parameters. So, this value should be returned. | ||
</remark> | </remark> | ||
Revision as of 14:20, 28 September 2015
.VectorScript|VectorScript ..VS:Function Reference|Function Reference ..VS:Function_Reference_Appendix|Appendix
Description
Displays the specified dialog and initiates the dialog event loop. The dialog event loop is specified in a procedure subroutine that is passed as a parameter to the function.
FUNCTION RunLayoutDialog(
dialogID :LONGINT;
callback :PROCEDURE) : LONGINT;
def vs.RunLayoutDialog(dialogID, callback): return LONGINT
Parameters
dialogID LONGINT The index of the dialog to be displayed. callback PROCEDURE The event loop subroutine for the dialog.
Return Value
Returns a LONGINT value indicating the button pressed to exit the dialog.
Remarks
RunLayoutDialog returns the index of the last control event (1 for OK and 2 for Cancel). The callback procedure has to be written like this:
procedure callback(var item : longint; data :longint); begin message('Item: ', item, ' Data in that item: ', data); end;
This function is also called before the dialog opens with a value of 2255 for item and when the dialog closes (value 2256). Despite the fact that the arguments to the callback procedure are VARd (so that they should have global bindings), these variables really only have bindings within the callback procedure. Even if you declare them globally. Fact of the matter is that you cannot specify arguments when you call the callback procedure, so there's no way to establish the global bindings of the VARd arguments. Inside the callback procedure, the item argument is set to the index of the last control event. The data argument is set to values appropriate for the type of control that was activated.
Do not use the VS:Wait() function in the event handler subroutine of Layout Manager dialogs. Doing so will freeze the script, though you can force quit it with a command-period.
If you want to prevent a dialog from terminating after someone has clicked on the OK button, set item equal to -1. Note that in Python there is no output parameters. So, this value should be returned.
Example
Python
def UIAskForStringsToReplace(): # control IDs kOK = 1 kCancel = 2 kTxt1 = 4 kTxt2 = 5 kEdit1 = 6 kTxt3 = 7 kEdit2 = 8 # dialog data UIAskForStringsToReplace.strFind = '' UIAskForStringsToReplace.strReplace = '' def CreateDialog(): # Alignment constants kRight = 1 kBottom = 2 kLeft = 3 kColumn = 4 kResize = 0 kShift = 1 dialog = vs.CreateResizableLayout( 'Rename All Symbols', True, 'OK', 'Cancel', True, False ) # create controls vs.CreateStaticText( dialog, kTxt1, 'Replace a sub-string from all symbol names:', -1 ) vs.CreateStaticText( dialog, kTxt2, 'Old sub-string:', -1 ) vs.CreateEditText( dialog, kEdit1, '', 25 ) vs.CreateStaticText( dialog, kTxt3, 'New sub-string:', -1 ) vs.CreateEditText( dialog, kEdit2, '', 25 ) # set relations vs.SetFirstLayoutItem( dialog, kTxt1 ) vs.SetBelowItem( dialog, kTxt1, kTxt2, 0, 0 ) vs.SetRightItem( dialog, kTxt2, kEdit1, 0, 0 ) vs.SetBelowItem( dialog, kTxt2, kTxt3, 0, 0 ) vs.SetRightItem( dialog, kTxt3, kEdit2, 0, 0 ) # set alignments vs.AlignItemEdge( dialog, kEdit1, kLeft, 1, kShift ); vs.AlignItemEdge( dialog, kEdit2, kLeft, 1, kShift ); # set bindings vs.SetEdgeBinding ( dialog, kEdit1, True, True, False, False ) vs.SetEdgeBinding ( dialog, kEdit2, True, True, False, False ) return dialog def DialogHandler(item, data): if item == kOK: UIAskForStringsToReplace.strFind = vs.GetItemText( dialog, kEdit1 ) UIAskForStringsToReplace.strReplace = vs.GetItemText( dialog, kEdit2 ) return item dialog = CreateDialog() result = False if vs.RunLayoutDialog( dialog, DialogHandler ) == kOK: result = True return result, UIAskForStringsToReplace.strFind, UIAskForStringsToReplace.strReplace ok, strFind, strReplace = UIAskForStringsToReplace() vs.AlrtDialog( ok, ' - ', strFind, '-', strReplace )
Version
Availability: from VectorWorks9.0