Dynamic Frame, Frame as Parameter

klodoma

New Member
Hi,

I have more frames and I have to run the same procedure on all of these frames. So I want to specify the frame handle or frame name as a parameter to this procedure. Untill here everything is clear.

How do I access the frame in the procedure?

I tried this:

.. procedure ...
DEFINE INPUT PARAMETER hFrame AS HANDLE NO-UNDO.

ASSIGN pbSave:SENSITIVE IN FRAME hFrame = FALSE.
or
ASSIGN pbSave:SENSITIVE IN hFrame = FALSE.
or
DO WITH FRAME hFrame:
...
END.

nothing works. I keep getting errors.

DO WITH FRAME hFrame: ... would be the best for me. How can I place in there the HANDLE????

... and please don't tell me that is not possible.

Regards,
Andy.
 

WillieG

New Member
I've never tried this before, but it seems that you have to set the Frame attribute on the Field-Level Widget to your frame handle.
If I use your example:
(first) ASSIGN bpsave:FRAME = hFrame.
(Before) ASSIGN bpsave:SENSITIVE = ....
(and do not use "IN FRAME hFrame" because you cannot use the frame handle in stead of the frame name).

Just give it a try, I don't know if it will work.
Greetings
Willie
 

sphipp

Member
If you want to manipulate the properites of a Frame you can pass the frame's handle to a procedure and do things to the frame inside your procedure.

If you want to do things to a field or variable in a frame, you need to know the handle of the object.

If you want anything more complicated than that, you should "walk the widget tree" to use a bit of jargon.

Here is some simple code to give you an idea of what you can do:

Code:
[SIZE=1][SIZE=1][SIZE=2]def var var1 as char no-undo.[/SIZE]
[SIZE=2]def var var2 as char no-undo.[/SIZE]
[SIZE=2]def var var3 as char column-label "Var!3" no-undo.[/SIZE]
[SIZE=2]def var var4 as char no-undo.[/SIZE]
[SIZE=2]def var var5 as char no-undo.[/SIZE]
[SIZE=2]def var var6 as char no-undo.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2]def temp-table t_wtree[/SIZE]
[SIZE=2]field whandle as widget-handle[/SIZE]
[SIZE=2]field dhandle as char form "x(20)"[/SIZE]
[SIZE=2]field name as char form "x(20)"[/SIZE]
[SIZE=2]field type as char form "x(20)"[/SIZE]
[SIZE=2]field pname as char form "x(20)"[/SIZE]
[SIZE=2]field wframe as char [/SIZE]
[SIZE=2]field wrow as int[/SIZE]
[SIZE=2]field wcol as int[/SIZE]
[SIZE=2]field wvalue as char[/SIZE]
[SIZE=2]field numclabel as int[/SIZE]
[SIZE=2]field slabel as widget-handle[/SIZE]
[SIZE=2]field clabel as widget-handle extent 3[/SIZE]
[SIZE=2]index idx1 wframe name wrow wcol[/SIZE]
[SIZE=2]index idx2 whandle.[/SIZE]
[SIZE=2]def buffer b_wtree for t_wtree.[/SIZE]
[SIZE=2]form var1 var2 var3 with frame f1 width 80.[/SIZE]
[SIZE=2]form var4 var5 var6 with frame f2 width 80 side-labels.[/SIZE]
[SIZE=2]form var4 column-label "1!2!3" var5 column-label "1!2!3" var6 column-label "1!2!3" with frame f3 width 80 no-underline.[/SIZE]
[SIZE=2]run p_walkwidgettree (frame f1:handle).[/SIZE]
[SIZE=2]run p_walkwidgettree (frame f2:handle).[/SIZE]
[SIZE=2]run p_walkwidgettree (frame f3:handle).[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]run p_modify_frame (frame f1:handle).[/SIZE]
[SIZE=2]run p_modify_frame (frame f2:handle).[/SIZE]
[SIZE=2]run p_modify_frame (frame f3:handle).[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]run p_modify_field (var1:handle in frame f1).[/SIZE]
[SIZE=2]run p_modify_field (var4:handle in frame f2).[/SIZE]
[SIZE=2]for each t_wtree use-index idx1:[/SIZE]
[SIZE=2]display t_wtree except t_wtree.whandle t_wtree.clabel t_wtree.slabel.[/SIZE]
[SIZE=2]if valid-handle (t_wtree.clabel[1]) then display t_wtree.clabel[1]:screen-value.[/SIZE]
[SIZE=2]if valid-handle (t_wtree.clabel[2]) then display t_wtree.clabel[2]:screen-value.[/SIZE]
[SIZE=2]if valid-handle (t_wtree.clabel[3]) then display t_wtree.clabel[3]:screen-value.[/SIZE]
[SIZE=2]end.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]run p_set_data ("f1", "f1", "title", "Frame 1").[/SIZE]
[SIZE=2]run p_set_data ("f2", "f2", "title", "Frame 2").[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]run p_set_data ("f1", "var1", "screen-value", "1-2-3").[/SIZE]
[SIZE=2]run p_set_data ("f1", "var3", "screen-value", "4-5-6").[/SIZE]
[SIZE=2]run p_set_data ("f1", "var3", "columnlabel[1]", "V").[/SIZE]
[SIZE=2]run p_set_data ("f1", "var3", "columnlabelcol[1]", "40").[/SIZE]
[SIZE=2]run p_set_data ("f1", "var3", "columnlabel[2]", "Three").[/SIZE]
[SIZE=2]run p_set_data ("f1", "var3", "columnlabelcol[2]", "40").[/SIZE]
[SIZE=2]run p_set_data ("f1", "var3", "col", "40").[/SIZE]
[SIZE=2]run p_set_data ("f1", "var2", "sensitive", "yes").[/SIZE]
[SIZE=2]run p_set_data ("f2", "var4", "sidelabel", "V4").[/SIZE]
[SIZE=2]run p_set_data ("f2", "var6", "hidden", "yes").[/SIZE]
[SIZE=2]run p_set_data ("f2", "var6", "visible", "no").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var4", "columnlabel[1]", "Var").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var4", "columnlabel[2]", "4").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var4", "columnlabel[3]", "________").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var5", "columnlabel[1]", "Var").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var5", "columnlabel[2]", "5").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var5", "columnlabel[3]", "________").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var6", "columnlabel[1]", "Var").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var6", "columnlabel[2]", "6").[/SIZE]
[SIZE=2]run p_set_data ("f3", "var6", "columnlabel[3]", "________").[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2]wait-for window-close of this-procedure.[/SIZE]
[SIZE=2]procedure p_modify_frame:[/SIZE]
[SIZE=2]def input param inp_handle as widget-handle.[/SIZE]
[SIZE=2]/* message inp_handle:name inp_handle:visible view-as alert-box.*/[/SIZE]
[SIZE=2]inp_handle:title = inp_handle:name.[/SIZE]
[SIZE=2]inp_handle:visible = yes.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]end procedure.[/SIZE]
[SIZE=2]procedure p_modify_field:[/SIZE]
[SIZE=2]def input param inp_handle as widget-handle.[/SIZE]
[SIZE=2]if not valid-handle (inp_handle) then return.[/SIZE]
[SIZE=2]/* message inp_handle:sensitive inp_handle:visible view-as alert-box. */[/SIZE]
[SIZE=2]inp_handle:sensitive = yes.[/SIZE]
[SIZE=2]end procedure.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]procedure p_walkwidgettree:[/SIZE]
[SIZE=2]def input param inp_handle as widget-handle.[/SIZE]
[SIZE=2]def var h_frameset as widget-handle no-undo.[/SIZE]
[SIZE=2]def var h_item as widget-handle no-undo.[/SIZE]
[SIZE=2]def var wtcount as int no-undo.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]create t_wtree.[/SIZE]
[SIZE=2]t_wtree.whandle = inp_handle.[/SIZE]
[SIZE=2]t_wtree.dhandle = string (inp_handle).[/SIZE]
[SIZE=2]t_wtree.name = inp_handle:name.[/SIZE]
[SIZE=2]t_wtree.wvalue = inp_handle:screen-value no-error.[/SIZE]
[SIZE=2]t_wtree.type = inp_handle:type.[/SIZE]
[SIZE=2]t_wtree.wrow = inp_handle:row.[/SIZE]
[SIZE=2]t_wtree.wcol = inp_handle:col.[/SIZE]
[SIZE=2]t_wtree.wframe = inp_handle:name.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2]repeat:[/SIZE]
[SIZE=2]if not valid-handle (h_frameset) then h_frameset = inp_handle:first-child.[/SIZE]
[SIZE=2]else h_frameset = h_frameset:next-sibling.[/SIZE]
[SIZE=2]if not valid-handle (h_frameset) then leave.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]wtcount = wtcount + 1.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]h_item = h_frameset:first-child. [/SIZE]
[SIZE=2]repeat:[/SIZE]
[SIZE=2]if not valid-handle (h_item) then leave.[/SIZE]
[SIZE=2]create t_wtree.[/SIZE]
[SIZE=2]t_wtree.whandle = h_item.[/SIZE]
[SIZE=2]t_wtree.dhandle = string (h_item).[/SIZE]
[SIZE=2]t_wtree.name = h_item:name.[/SIZE]
[SIZE=2]t_wtree.wvalue = h_item:screen-value.[/SIZE]
[SIZE=2]t_wtree.type = h_item:type.[/SIZE]
[SIZE=2]t_wtree.pname = string (wtcount).[/SIZE]
[SIZE=2]t_wtree.wrow = h_item:row.[/SIZE]
[SIZE=2]t_wtree.wcol = h_item:col.[/SIZE]
[SIZE=2]t_wtree.wframe = inp_handle:name.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]h_item = h_item:next-sibling.[/SIZE]
[SIZE=2]end.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]end. [/SIZE]
[SIZE=2]for each t_wtree where t_wtree.wframe = inp_handle:name and t_wtree.pname = "1":[/SIZE]
[SIZE=2]if inp_handle:side-labels then t_wtree.slabel = t_wtree.whandle:side-label-handle.[/SIZE]
[SIZE=2]else for each b_wtree where[/SIZE]
[SIZE=2]b_wtree.wframe = t_wtree.wframe and[/SIZE]
[SIZE=2]b_wtree.wcol = t_wtree.wcol and[/SIZE]
[SIZE=2]b_wtree.type = "literal" break by b_wtree.wrow:[/SIZE]
[SIZE=2]t_wtree.numclabel = t_wtree.numclabel + 1.[/SIZE]
[SIZE=2]if t_wtree.numclabel <= extent (t_wtree.clabel) then[/SIZE]
[SIZE=2]t_wtree.clabel [t_wtree.numclabel] = b_wtree.whandle.[/SIZE]
[SIZE=2]end.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]end.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]end procedure.[/SIZE]
[SIZE=2]procedure p_set_data:[/SIZE]
[SIZE=2]def input param inp_frame as char no-undo.[/SIZE]
[SIZE=2]def input param inp_name as char no-undo.[/SIZE]
[SIZE=2]def input param inp_setting as char no-undo.[/SIZE]
[SIZE=2]def input param inp_value as char no-undo.[/SIZE]
[SIZE=2]find first t_wtree where[/SIZE]
[SIZE=2]t_wtree.wframe = inp_frame and[/SIZE]
[SIZE=2]t_wtree.name = inp_name[/SIZE]
[SIZE=2]no-lock no-error.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]if not available t_wtree then return.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]case inp_setting:[/SIZE]
[SIZE=2]when "sensitive" then t_wtree.whandle:sensitive = (if inp_value = "yes" then yes else no).[/SIZE]
[SIZE=2]when "visible" then t_wtree.whandle:visible = (if inp_value = "yes" then yes else no).[/SIZE]
[SIZE=2]when "hidden" then t_wtree.whandle:hidden = (if inp_value = "yes" then yes else no).[/SIZE]
[SIZE=2]when "screen-value" then t_wtree.whandle:screen-value = inp_value.[/SIZE]
[SIZE=2]when "row" then t_wtree.whandle:row = decimal(inp_value) no-error.[/SIZE]
[SIZE=2]when "col" then t_wtree.whandle:col = decimal(inp_value) no-error.[/SIZE]
[SIZE=2]when "sidelabel" then if valid-handle (t_wtree.slabel) then t_wtree.slabel:screen-value = inp_value.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]when "columnlabel[1]" then if valid-handle (t_wtree.clabel [1]) then t_wtree.clabel [1]:screen-value = inp_value.[/SIZE]
[SIZE=2]when "columnlabelrow[1]" then if valid-handle (t_wtree.clabel [1]) then t_wtree.clabel [1]:row = decimal (inp_value) no-error.[/SIZE]
[SIZE=2]when "columnlabelcol[1]" then if valid-handle (t_wtree.clabel [1]) then t_wtree.clabel [1]:col = decimal (inp_value) no-error.[/SIZE]
[SIZE=2]when "columnlabel[2]" then if valid-handle (t_wtree.clabel [2]) then t_wtree.clabel [2]:screen-value = inp_value.[/SIZE]
[SIZE=2]when "columnlabelrow[2]" then if valid-handle (t_wtree.clabel [2]) then t_wtree.clabel [2]:row = decimal (inp_value) no-error.[/SIZE]
[SIZE=2]when "columnlabelcol[2]" then if valid-handle (t_wtree.clabel [2]) then t_wtree.clabel [2]:col = decimal (inp_value) no-error.[/SIZE]
[SIZE=2]when "columnlabel[3]" then if valid-handle (t_wtree.clabel [3]) then t_wtree.clabel [3]:screen-value = inp_value.[/SIZE]
[SIZE=2]when "columnlabelrow[3]" then if valid-handle (t_wtree.clabel [3]) then t_wtree.clabel [3]:row = decimal (inp_value) no-error.[/SIZE]
[SIZE=2]when "columnlabelcol[3]" then if valid-handle (t_wtree.clabel [3]) then t_wtree.clabel [3]:col = decimal (inp_value) no-error.[/SIZE]
[SIZE=2]when "title" then t_wtree.whandle:title = inp_value no-error.[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2]end case. [/SIZE]
[SIZE=2]end procedure.[/SIZE]
[SIZE=2][/SIZE] 
 
[/SIZE][/SIZE]

Column-Labels are a bit tricky. In the example above I've allowed for 3 column-labels, but I wouldn't try and change the underline. It's better to give each field a three part column-label, define the frame as no-underline and then assign each one individually with the last one being the underline.
 

Casper

ProgressTalk.com Moderator
Staff member
Well I had the same proble too since March 13th, but now everything seems to work fine again...
 
Top