*-- Called from within a Form RecurAllObj( THISFORM ) *-- Place this routine some global. PROCEDURE RecurAllObj LPARAMETER toObj LOCAL k, j, oObj LOCAL ARRAY aMems[1,3] k = AMEMBERS( aMems, toObj, 1 ) FOR j=1 TO k *-------------------------------------------- * get next control on this container *-------------------------------------------- DO CASE CASE INLIST(LOWER(aMems[j,1]), "parent") CASE TYPE("toObj."+aMems[j,1])#"O" CASE ISNULL(EVALUATE("toObj."+aMems[j,1])) OTHERWISE *-------------------------------------------- * If the Property is Object, check for text to translate. *-------------------------------------------- oObj = EVALUATE("toObj."+aMems[j,1]) IF VARTYPE(oObj)="O" *-------------------------------------------- * Transverse to check for controls on this control. *-------------------------------------------- IF NOT COMPOBJ( oObj, toObj ) RecurAllObj( oObj ) ENDIF ENDIF ENDCASE NEXT RETURN ENDPROCI removed some Locale dependent code to simplify the example.