PROGRAM FormsStructure; {-- *************************************************************************** -- ** Descr. : A ScriptPascal translation of traverse.c found in the Oracles -- ** SDK examples. It shows how to generically loop through all items -- ** and properties in a Forms Module. This script is one of the most -- ** useful to learn how objects are stored and accessed over the -- ** Forms Open API. But please be aware that FormsAPI Master has many -- ** internal helper functions that make such things much easier! -- *************************************************************************** -- ** 04/10/01 1.001.00 Initial Creation, muellers@orcl-toolbox.com -- ***************************************************************************} procedure GetAllObjects(p_obj : longint; level : integer); var i,j : number; prop_num : number; v_propname : varchar2; oline : varchar2; num : number; v_obj_typ : number; v_subobj : number; v_owner : number; v_processing_objects : boolean; s : varchar2; begin for j := 0 to 1 do begin v_processing_objects := (j=1); v_obj_typ := generic_QueryType(p_obj); if v_obj_typ > D2FFO_MAX then exit; if generic_HasProp(p_obj, D2FP_NAME) = false then exit; s := generic_GetTextProp(p_obj,D2FP_NAME); oline := StringOfChar(' ',3*level)+generic_GetConstName(v_obj_typ)+'>'; oline := oline + s; if v_processing_objects=false then begin writeln(oline); end; for prop_num := D2FP_MIN to D2FP_MAX do begin if (generic_HasProp(p_obj, prop_num) = true) then begin if (property_GetPropName(prop_num) = '') or (prop_num = D2FP_FRST_NAVIGATION_BLK_OBJ) or (prop_num = D2FP_NXT_NAVIGATION_BLK_OBJ) or (prop_num = D2FP_PREV_NAVIGATION_BLK_OBJ) or (prop_num = D2FP_OBJ_GRP_CHILD_REAL_OBJ) or (prop_num = D2FP_OG_CHILD) or (prop_num = D2FP_SOURCE) or (prop_num = D2FP_DIRTY_INFO) or (prop_num = D2FP_ACCESS_KEY_STRID) or (prop_num = D2FP_ALT_MSG_STRID) or (prop_num = D2FP_BLK_DSCRP_STRID) or (prop_num = D2FP_BTM_TTL_STRID) or (prop_num = D2FP_BTN_1_LBL_STRID) or (prop_num = D2FP_BTN_2_LBL_STRID) or (prop_num = D2FP_BTN_3_LBL_STRID) or (prop_num = D2FP_FAIL_MSG_STRID) or (prop_num = D2FP_FRAME_TTL_STRID) or (prop_num = D2FP_HIGHEST_VAL_STRID) or (prop_num = D2FP_HINT_STRID) or (prop_num = D2FP_HLP_DSCRP_STRID) or (prop_num = D2FP_INIT_VAL_STRID) or (prop_num = D2FP_KBRD_ACC_STRID) or (prop_num = D2FP_KBRD_HLP_TXT_STRID) or (prop_num = D2FP_LABEL_STRID) or (prop_num = D2FP_LOWEST_VAL_STRID) or (prop_num = D2FP_MINIMIZE_TTL_STRID) or (prop_num = D2FP_MNU_PARAM_INIT_VAL_STRID) or (prop_num = D2FP_PARAM_INIT_VAL_STRID) or (prop_num = D2FP_PRMPT_STRID) or (prop_num = D2FP_SUB_TTL_STRID) or (prop_num = D2FP_TEXT_STRID) or (prop_num = D2FP_TITLE_STRID) or (prop_num = D2FP_TOOLTIP_STRID) or (prop_num = D2FP_PERSIST_CLIENT_INFO) or (prop_num = D2FP_PAR_FLPATH) or (prop_num = D2FP_PAR_MODSTR) or (prop_num = D2FP_PAR_MODTYP) or (prop_num = D2FP_PAR_MODULE) or (prop_num = D2FP_PAR_NAM) or (prop_num = D2FP_PAR_FLNAM) or (prop_num = D2FP_PAR_SL1OBJ_NAM) or (prop_num = D2FP_PAR_SL1OBJ_TYP) or (prop_num = D2FP_PAR_SL2OBJ_NAM) or (prop_num = D2FP_PAR_SL2OBJ_TYP) or (prop_num = D2FP_PAR_TYP) or (prop_num = D2FP_SUBCL_SUBOBJ) or (prop_num = D2FP_SUBCL_OBJGRP) THEN begin {} end else begin v_propname := property_GetPropName(prop_num); case Property_GetPropType(prop_num) of D2FP_TYP_BOOLEAN : begin if v_processing_objects=false then begin oline := StringOfChar(' ',3*level+2)+v_propname+' - '; if generic_GetBoolProp(p_obj, prop_num) then oline := oline + 'TRUE' else oline := oline + 'FALSE'; writeln(oline); end; end; D2FP_TYP_NUMBER : begin if v_processing_objects=false then begin oline := StringOfChar(' ',3*level+2)+v_propname+' - '; num := generic_GetNumProp(p_obj, prop_num); oline := oline + inttostr(num); writeln(oline); end; end; D2FP_TYP_TEXT : begin if v_processing_objects=false then begin oline := StringOfChar(' ',3*level+2)+v_propname+' - '; oline := oline + generic_GetTextProp(p_obj, prop_num); writeln(oline); end; end; D2FP_TYP_OBJECT : begin if v_processing_objects=true then begin v_subobj := generic_GetObjProp(p_obj,prop_num); if v_subobj <> 0 then begin v_owner := Generic_GetObjProp(v_subobj, D2FP_OWNER); if p_obj = v_owner then begin oline := StringOfChar(' ',3*level)+v_propname; writeln(oline); while v_subobj <> 0 do begin GetAllObjects(v_subobj, level + 1); v_subobj := Generic_GetObjProp(v_subobj, D2FP_NEXT); end; end; end; end; end; end; end; end; end; end; end; VAR frm : longint; BEGIN frm := API_LoadModule(C_FAPIMASTERDIR+'test.fmb'); GetAllObjects(frm, 0); API_DestroyModule(frm); END.