Example 1: Two independent record lists
Form file
"simple_list.per":
LAYOUT
GRID
{
<T t1 >
[c1 |c2 ]
[c1 |c2 ]
[c1 |c2 ]
}
END
END
ATTRIBUTES
c1 = FORMONLY.col1;
c2 = FORMONLY.col2;
END
INSTRUCTIONS
SCREEN RECORD sr(FORMONLY.*);
END
The module "list1.4gl":
DEFINE arr DYNAMIC ARRAY OF RECORD
id INTEGER,
name VARCHAR(50)
END RECORD
FUNCTION start_list1()
DEFINE i INTEGER
IF ui.Window.forName("w_list1") IS NULL THEN
FOR i=1 TO 10
LET arr[i].id = i
LET arr[i].name = "Record "||i
END FOR
OPEN WINDOW w_list1 WITH FORM "simple_list"
START DIALOG control_list1
ELSE
CURRENT WINDOW IS w_list1
END IF
END FUNCTION
FUNCTION terminate_list1()
TERMINATE DIALOG control_list1
CLOSE WINDOW w_list1
END FUNCTION
DIALOG control_list1()
DISPLAY ARRAY arr TO sr.*
ON ACTION add_row
CALL DIALOG.appendRow("sr")
LET arr[arr.getLength()].id = arr.getLength()
LET arr[arr.getLength()].name = "[new record]"
ON ACTION close
CALL terminate_list1()
END DISPLAY
END DIALOG
The module "list2.4gl" (quite the same code as
list1.4gl):
DEFINE arr DYNAMIC ARRAY OF RECORD
id INTEGER,
name VARCHAR(50)
END RECORD
FUNCTION start_list2()
DEFINE i INTEGER
IF ui.Window.forName("w_list2") IS NULL THEN
FOR i=1 TO 10
LET arr[i].id = i
LET arr[i].name = "Record "||i
END FOR
OPEN WINDOW w_list2 WITH FORM "simple_list"
START DIALOG control_list2
ELSE
CURRENT WINDOW IS w_list2
END IF
END FUNCTION
FUNCTION terminate_list2()
TERMINATE DIALOG control_list2
CLOSE WINDOW w_list2
END FUNCTION
DIALOG control_list2()
DISPLAY ARRAY arr TO sr.*
ON ACTION clear_row
INITIALIZE arr[arr_curr()].* TO NULL
ON ACTION close
CALL terminate_list2()
END DISPLAY
END DIALOG
Program source code:
IMPORT FGL list1
IMPORT FGL list2
MAIN
OPTIONS INPUT WRAP
CALL start_list1()
CALL start_list2()
WHILE fgl_eventloop()
END WHILE
END MAIN