Examples of user object controls affecting a window
To illustrate these techniques, consider a simple custom visual
user object, uo_minmax, that contains two buttons, Maximize and
Minimize.

If the user clicks the Maximize button in an application window
containing this user object, the current window becomes maximized. If
the user clicks Minimize, the window closes to an icon.
Because the user object can be associated with any window, the
scripts for the buttons cannot reference the window that has the user
object. The user object must get the name of the window so that the
buttons can reference the window.
Example 1: using functions shows
how PowerBuilder uses functions to pass a window name to a user
object, allowing controls in the user object to affect the window the
user object is in.
Example 2: using user events
shows how PowerBuilder uses unmapped user events to allow controls in
a user object to affect the window the user object is in.
Example 1: using
functions
-
In the Script view in the User Object painter, define an
instance variable, mywin, of type window.1window mywinThis variable will hold the name of the window that has the
user object. -
Define a user object-level function, f_setwin, with:
-
Public access
-
No return value
-
One argument, win_param, of type window and passed by
value
-
-
Type the following script for the function:
1mywin = win_paramWhen f_setwin is called, the window name passed in win_param
will be assigned to mywin, where user object controls can
reference the window that has the user object. -
Write scripts for the two buttons:
cb_max: mywin.WindowState = Maximized!
cb_min: mywin.WindowState = Minimized!
-
Save the user object as uo_minmax and close the User Object
painter. -
Open the window, drag uo_minmax onto the window in the
Layout view, and name it uo_func in the Properties view. -
In the Open event for the window, call the user object-level
function, passing the name of the window:1uo_func.f_setwin(This)The pronoun This refers to the window’s name, which will be
passed to the user object’s f_setwin function.
What happens. When the window opens, it calls the user object-level function
f_setwin, which passes the window name to the user object. The user
object stores the name in its instance variable mywin. When the user
clicks a button control in the user object, the control references
the window through mywin.
Example 2: using user
events
In the Script view in the User Object painter, define two
unmapped user events for the user object: Max_requested and
Min_requested.
Leave the Event ID fields blank to define them as
unmapped.
Trigger user events of the user object in the scripts for the
Clicked event of each CommandButton:
-
cb_max: Parent.Event Max_requested()
-
cb_min: Parent.Event Min_requested()
Save the user object and name it uo_event and close the User
Object painter.
Open the window and in the Window painter, select
Insert>Object from the menu bar and then place uo_event in the
window.
Double-click uo_event to display its Script view.
The two new user events display in the second drop-down list in
the Script view.
Write scripts for the two user events:
max_requested: Parent.WindowState = Maximized!
min_requested: Parent.WindowState = Minimized!
These scripts reference the window containing the user object
with the pronoun Parent.
What happens
When a user clicks a button, the Clicked event script for that
button triggers a user event in its parent, the user object. The user
object script for that event modifies its parent, the window.