Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Dynamic Dynpro

Former Member
0 Kudos

Hi guys,

i need a suggestion how to realize this in dynpro:

+--------------------------------------------------+
|                     [button]                     |
+--------------------------------------------------+
|                         |                        |
|      grid 1             |          grid 2        |
|                         |                        |
+--------------------------------------------------+

The two grids are in a splitter container.

The CustomControl of the splitter is set to "resizeing enabled (x and y)".

Now i want the button to be in center of the screen (on top of splitter).

If i use the Screen Painter i can only create buttons with fixed position...

...or is it possible to create a button in the splitter container between the two grids??

Thank you for helping!

1 ACCEPTED SOLUTION

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Ok, I think you can do this using a picture control instead of

the toolbar. You can set up some event handlers for the picture, so

that when the user clicks on it you can do something, just like

and icon. For example of this, see program sap_picture_demo_icon.

Here is the modified code of the program from before, this time, it

is a picture control with an icon in the middle. Again, all you need

in your screen 100, is a custom container with the same name as before.


report zrich_0001 .

type-pools: icon.

data: custom           type ref to cl_gui_custom_container,
      sub_cont_top     type ref to cl_gui_container,
      sub_cont_bot     type ref to cl_gui_container,
      splitter_tb      type ref to cl_gui_splitter_container,
      sub_cont_l       type ref to cl_gui_container,
      sub_cont_r       type ref to cl_gui_container,
      splitter_lr      type ref to cl_gui_splitter_container,
      gui_picture      type ref to cl_gui_picture.

call screen 100.
*&---------------------------------------------------------------------
*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------
*
*       text
*----------------------------------------------------------------------
*
module status_0100 output.
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.

  create object custom
            exporting container_name = 'CUSTOM_CONTAINER'.

  create object splitter_tb
                exporting parent = custom
                          rows    = 2
                          columns = 1.

  call method:

             splitter_tb->get_container
                exporting row            = 1
                          column         = 1
                          receiving container = sub_cont_top,

              splitter_tb->set_row_height
                exporting id             = 1
                          height         = '4',

              splitter_tb->get_container
                exporting row            = 2
                          column         = 1
                          receiving container = sub_cont_bot.


  create object gui_picture
            exporting
                  parent             = sub_cont_top.

  call method gui_picture->set_display_mode
    exporting
      display_mode = cl_gui_picture=>display_mode_normal_center.

  data: icon(4) type c.
  write icon_green_light as icon to icon.

  call method gui_picture->load_picture_from_sap_icons
             exporting
                   icon = icon.

  create object splitter_lr
                exporting parent = sub_cont_bot
                          rows    = 1
                          columns = 2.

  call method:
                 splitter_lr->get_container
                   exporting row            = 1
                             column         = 1
                             receiving container = sub_cont_l,

                 splitter_lr->get_container
                   exporting row            = 1
                             column         = 2
                             receiving container = sub_cont_r.




endmodule.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------
*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------
module user_command_0100 input.

  case sy-ucomm.
    when 'BACK'.
      leave program.
  endcase.

endmodule.                 " USER_COMMAND_0100  INPUT

Regards,

Rich Heilman

4 REPLIES 4

Former Member
0 Kudos

Hi Benjamin,

I dont see any possiblity of changing the button position at runtime. But I can suggest an weird trick.

You can create multiple buttons on the screen with the same function code. Store the centre position co-ordinates of each button in an internal table. when the user re-sizes the custom control, you can activate/diaplay the button which matches most with the center of the control. All the other buttons to be in disable/invisible mode.

Just a idea out of the blue. May be this helps you.

Regards,

Prabhas.

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Check out this sample program, just create screen 100, and add a custom container called "CUSTOM_CONTAINER". THen cut/paste the code. You will see that this container is split from top to buttom, and then the bottom is split left to right. You can then implement the toolbar inside the top split, but at the moment I am having trouble with centerizing the button.




report zrich_0001 .

type-pools: icon.

data: custom           type ref to cl_gui_custom_container,
      sub_cont_top     type ref to cl_gui_container,
      sub_cont_bot     type ref to cl_gui_container,
      splitter_tb      type ref to cl_gui_splitter_container,
      sub_cont_l       type ref to cl_gui_container,
      sub_cont_r       type ref to cl_gui_container,
      splitter_lr      type ref to cl_gui_splitter_container,
      gui_tb           type ref to cl_gui_toolbar.

call screen 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module status_0100 output.
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.

  create object custom
            exporting container_name = 'CUSTOM_CONTAINER'.

  create object splitter_tb
                exporting parent = custom
                          rows    = 2
                          columns = 1.

  call method:

             splitter_tb->get_container
                exporting row            = 1
                          column         = 1
                          receiving container = sub_cont_top,

              splitter_tb->set_row_height
                exporting id             = 1
                          height         = '4',

              splitter_tb->get_container
                exporting row            = 2
                          column         = 1
                          receiving container = sub_cont_bot.


  create object gui_tb
            exporting
                  parent             = sub_cont_top.

  call method gui_tb->add_button
        exporting
           fcode            = 'REFRESH'
              icon          = icon_refresh
              butn_type     = '0'
              text          = ' Refresh'.


  create object splitter_lr
                exporting parent = sub_cont_bot
                          rows    = 1
                          columns = 2.

  call method:
                 splitter_lr->get_container
                   exporting row            = 1
                             column         = 1
                             receiving container = sub_cont_l,

                 splitter_lr->get_container
                   exporting row            = 1
                             column         = 2
                             receiving container = sub_cont_r.




endmodule.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module user_command_0100 input.

  leave program.

endmodule.                 " USER_COMMAND_0100  INPUT

Regards,

RIch Heilman

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Ok, I think you can do this using a picture control instead of

the toolbar. You can set up some event handlers for the picture, so

that when the user clicks on it you can do something, just like

and icon. For example of this, see program sap_picture_demo_icon.

Here is the modified code of the program from before, this time, it

is a picture control with an icon in the middle. Again, all you need

in your screen 100, is a custom container with the same name as before.


report zrich_0001 .

type-pools: icon.

data: custom           type ref to cl_gui_custom_container,
      sub_cont_top     type ref to cl_gui_container,
      sub_cont_bot     type ref to cl_gui_container,
      splitter_tb      type ref to cl_gui_splitter_container,
      sub_cont_l       type ref to cl_gui_container,
      sub_cont_r       type ref to cl_gui_container,
      splitter_lr      type ref to cl_gui_splitter_container,
      gui_picture      type ref to cl_gui_picture.

call screen 100.
*&---------------------------------------------------------------------
*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------
*
*       text
*----------------------------------------------------------------------
*
module status_0100 output.
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.

  create object custom
            exporting container_name = 'CUSTOM_CONTAINER'.

  create object splitter_tb
                exporting parent = custom
                          rows    = 2
                          columns = 1.

  call method:

             splitter_tb->get_container
                exporting row            = 1
                          column         = 1
                          receiving container = sub_cont_top,

              splitter_tb->set_row_height
                exporting id             = 1
                          height         = '4',

              splitter_tb->get_container
                exporting row            = 2
                          column         = 1
                          receiving container = sub_cont_bot.


  create object gui_picture
            exporting
                  parent             = sub_cont_top.

  call method gui_picture->set_display_mode
    exporting
      display_mode = cl_gui_picture=>display_mode_normal_center.

  data: icon(4) type c.
  write icon_green_light as icon to icon.

  call method gui_picture->load_picture_from_sap_icons
             exporting
                   icon = icon.

  create object splitter_lr
                exporting parent = sub_cont_bot
                          rows    = 1
                          columns = 2.

  call method:
                 splitter_lr->get_container
                   exporting row            = 1
                             column         = 1
                             receiving container = sub_cont_l,

                 splitter_lr->get_container
                   exporting row            = 1
                             column         = 2
                             receiving container = sub_cont_r.




endmodule.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------
*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------
module user_command_0100 input.

  case sy-ucomm.
    when 'BACK'.
      leave program.
  endcase.

endmodule.                 " USER_COMMAND_0100  INPUT

Regards,

Rich Heilman

0 Kudos

Thank you Rich,

the solution with the image will work for me!

Regards

Benjamin