Tech Tip: 4D Write Expand Function for 4D Write Pro
PRODUCT: 4D | VERSION: 19 | PLATFORM: Mac & Win
Published On: January 25, 2023
Below is a method that can be used to simulate the expand feature of 4D Write. 4D Write had a feature in which the upper right corner of the area allowed the 4D Write Area to expand and provide a larger view of the area. This feature is replicated in 4D Write Pro by building and loading a dynamic form that only contains the 4D Write Pro area and toolbar and passing the 4D Write Pro document as the form data to maintain the data and cursor position/selection.
The feature only works for WP areas with an object variable assigned and other expressions such as a Table field will not work due to incompatibility with various commands such as OBJECT Get data source and WP selection range.
The method is self contained and does not require any additional methods to be added or created.
An example of using the method is to apply it to a button on the same form as the target WP area to expand similar to the how the 4D Write Area behaved:

The WP area's object name is $1 and the object method of the button is:
The feature only works for WP areas with an object variable assigned and other expressions such as a Table field will not work due to incompatibility with various commands such as OBJECT Get data source and WP selection range.
// Method: WP_Expand // Parameters: // $1 - Name of the 4D Write Pro Form Object to Expand C_TEXT($1) // Write Pro Form Object Name If (Count parameters=1) C_TEXT($form_t) C_OBJECT($form_o; $data_o) C_POINTER($dataSource_p) // Dynamic Form Definition $form_t:="{\"destination\":\"detailScreen\",\"rightMargin\":20,\"" $form_t:=$form_t+"bottomMargin\":20," $form_t:=$form_t+"\"markerHeader\":15,\"markerBody\":200,\"markerBreak\":220," $form_t:=$form_t+"\"markerFooter\":240,\"events\":[\"onLoad\"],\"method\":\"" $form_t:=$form_t+Current method name+"\",\"pageFormat\":" $form_t:=$form_t+"{\"paperName\":\"Letter\",\"paperWidth\":\"611pt\"," $form_t:=$form_t+"\"paperHeight\""+":\""+"791pt\"},\"pages\":[null,{\"objects\"" $form_t:=$form_t+":{\"WParea\":{\"type\":\"write\",\"top\":110,\"left\":20," $form_t:=$form_t+"\"width\":880,\"height\":590," $form_t:=$form_t+"\"sizingX\":\"grow\",\"sizingY\":" $form_t:=$form_t+"\"grow\",\"dataSource\":\"Form:C1466.wparea\"," $form_t:=$form_t+"\"hideFocusRing\"" $form_t:=$form_t+":true,\"scrollbarVertical\":\"automatic\"," $form_t:=$form_t+"\"scrollbarHorizontal\":" $form_t:=$form_t+"\"automatic\",\"dpi\":0,\"showSelection\":true," $form_t:=$form_t+"\"borderStyle\":" $form_t:=$form_t+"\"none\",\"method\":\""+Current method name $form_t:=$form_t+"\",\"events\":[\"onLoad\",\"onLosingFocus\",\"onGettingFocus\"," $form_t:=$form_t+"\"onSelectionChange\",\"onAfterEdit\"]},\"WPtoolbar\":" $form_t:=$form_t+"{\"type\":\"subform\",\"top\":20,\"left\":20,\"width\":880," $form_t:=$form_t+"\"height\":90,\"sizingX\":\"grow\",\"detailForm\"" $form_t:=$form_t+":\"WP_Toolbar\"," $form_t:=$form_t+"\"focusable\":false,\"deletableInList\":false," $form_t:=$form_t+"\"doubleClickInRowAction\":\"editSubrecord\"," $form_t:=$form_t+"\"doubleClickInEmptyAreaAction\":\"addSubrecord\"," $form_t:=$form_t+"\"selectionMode\":\"multiple\"," $form_t:=$form_t+"\"printFrame\":\"variable\"}}}]}" // Convert to JSON $form_o:=JSON Parse($form_t) // Check if expression is an object variable $dataSource_p:=OBJECT Get data source(*; $1) If(Is nil pointer($dataSource_p)=False) // Build Form object data with wp doc object and cursor position/selection $data_o:=New object $data_o.wparea:=$dataSource_p-> $data_o.position:=WP Selection range(*; $1) // Run Form DIALOG($form_o; $data_o) // Update cursor position/selection when returning to calling form WP SELECT($data_o.position) Else //Data Source is not Object Variable or not applicable // with the OBJECT Get data source command End If Else // Object Method for dynamic form If (Form event code=On Load) // On Load event updates the cursor position/selection to match the original "expanded" WP area WP SELECT(Form.wparea; Form.position) End if // Applies Widget method for toolbar WP UpdateWidget("WPtoolbar"; "WParea") // Keeps track of cursor position/selection to apply to original form If (Form event code=On Selection Change) Form.position:=WP Selection range(*; "WParea") End if End if |
The method is self contained and does not require any additional methods to be added or created.
An example of using the method is to apply it to a button on the same form as the target WP area to expand similar to the how the 4D Write Area behaved:

The WP area's object name is $1 and the object method of the button is:
WP_Expand($1) |