That should be done at PBO time for each field individually. You can use LOOP AT SCREEN for the purpose :
LOOP AT screen.
CASE screen-name.
WHEN ...
screen-length = ....
ENDCASE.
MODIFY screen.
ENDLOOP.
For dynamically calculate size of structure fields I recommend the following piece of code:
FORM get_size USING iv_tabname TYPE dfies-tabname
iv_fieldname TYPE dfies-fieldname
CHANGING cv_size TYPE I.
DATA:
rv_data TYPE REF TO data.
FIELD-SYMBOLS:
<lv_field> TYPE any.
CREATE DATA rv_data TYPE (iv_tabname).
ASSIGN rv_data->(iv_fieldname) TO <lv_field>.
DESCRIBE FIELD <lv_field> LENGTH cv_size IN CHARACTER MODE.
ENDFORM.
I hope I get your requirement right