Code: Alles auswählen.
container->set_row_sash( id = 2
type = cl_gui_splitter_container=>type_movable
value = cl_gui_splitter_container=>false ).
Warum musst du ALV2 und ALV1 resizen, damit sie verschwinden?abapnewbie hat geschrieben:Mein Ziel ist, dass ich Element 1 so anpassen kann, dass beide ALV's verschwinden, ohne dabei zuerst ALV 2 und dann ALV 1 zu resizen.
Hallo, vielen Dank für die Antwort!ewx hat geschrieben: ↑07.09.2020 16:38mach mal ein Screenshot. Ich verstehe nicht, was du meinst.
Was ist "Element 1"?
Warum musst du ALV2 und ALV1 resizen, damit sie verschwinden?abapnewbie hat geschrieben:Mein Ziel ist, dass ich Element 1 so anpassen kann, dass beide ALV's verschwinden, ohne dabei zuerst ALV 2 und dann ALV 1 zu resizen.
Code: Alles auswählen.
PARAMETERS test.
CLASS my_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
METHODS set_resize_cols_public
IMPORTING
res TYPE i.
ENDCLASS.
CLASS my_grid IMPLEMENTATION.
METHOD set_resize_cols_public.
set_resize_cols( res ).
ENDMETHOD.
ENDCLASS.
CLASS diagram DEFINITION.
PUBLIC SECTION.
METHODS constructor
IMPORTING
resize_cols TYPE i
container TYPE REF TO cl_gui_container.
METHODS set_data
IMPORTING
country TYPE land1.
METHODS copy
IMPORTING
from TYPE REF TO cl_gui_alv_grid.
DATA grid TYPE REF TO my_grid.
PROTECTED SECTION.
DATA data TYPE STANDARD TABLE OF t005t.
ENDCLASS.
CLASS diagram IMPLEMENTATION.
METHOD constructor.
grid = NEW #( i_parent = container ).
IF resize_cols = 0.
DATA(no_header) = abap_true.
ENDIF.
grid->set_table_for_first_display(
EXPORTING
i_default = space
i_structure_name = 'T005T'
is_layout = VALUE lvc_s_layo( smalltitle = abap_true
no_toolbar = abap_true
no_headers = no_header
no_hgridln = abap_true
no_vgridln = abap_true )
CHANGING
it_outtab = data
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4 ).
grid->set_resize_cols_public( resize_cols ).
ENDMETHOD.
METHOD set_data.
IF country IS INITIAL.
SELECT * FROM t005t INTO TABLE @data WHERE spras = @sy-langu.
ELSE.
SELECT * FROM t005t INTO TABLE @data WHERE land1 = @country AND spras = @sy-langu.
ENDIF.
grid->refresh_table_display( ).
ENDMETHOD.
METHOD copy.
from->get_frontend_fieldcatalog(
IMPORTING
et_fieldcatalog = DATA(lt_fcat_from) ).
grid->set_frontend_fieldcatalog( lt_fcat_from ).
grid->refresh_table_display(
i_soft_refresh = abap_true
is_stable = value #(
col = abap_true
row = abap_true ) ).
ENDMETHOD.
ENDCLASS.
INITIALIZATION.
DATA(docker) = NEW cl_gui_docking_container( side = cl_gui_docking_container=>dock_at_bottom ratio = 40 ).
DATA(splitter) = NEW cl_gui_splitter_container( parent = docker rows = 2 columns = 1 ).
splitter->set_row_sash(
EXPORTING
id = 1
type = cl_gui_splitter_container=>type_sashvisible
value = cl_gui_splitter_container=>false ).
splitter->set_row_mode( mode = cl_gui_splitter_container=>mode_absolute ).
splitter->set_row_height( id = 1 height = 40 ).
splitter->set_border( border = gfw_false ).
DATA(dia01) = NEW diagram( resize_cols = 1 container = splitter->get_container( row = 1 column = 1 ) ) .
dia01->set_data( 'DE' ).
DATA(dia02) = NEW diagram( resize_cols = 0 container = splitter->get_container( row = 2 column = 1 ) ).
dia02->set_data( space ).
AT SELECTION-SCREEN.
dia02->copy( dia01->grid ).
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
abapnewbie
Hallo,ewx hat geschrieben: ↑07.09.2020 18:45Dann versuche mal den CL_GUI_SPLITTER_CONTAINER.
Hier kannst du drei "Zeilen" definieren und den Splitter fixieren.
Dadurch kannst du eine "feste" Zeile anzeigen. Diese hat jedoch keinen Bezug zu dem anderen Grid. Heißt: wenn der Anwender die Spalten verschiebt ober die Breite ändert, passiert das nur in einem Grid.
Mein Vorschlag:
- eine feste Zeile oben
- nach jedem "enter" wird das Layout von oben nach unten kopiert. (Leider gibt es wohl kein Event, dass man abfangen kann, wenn die Spalten geändert wurden...)
Code: Alles auswählen.
PARAMETERS test. CLASS my_grid DEFINITION INHERITING FROM cl_gui_alv_grid. PUBLIC SECTION. METHODS set_resize_cols_public IMPORTING res TYPE i. ENDCLASS. CLASS my_grid IMPLEMENTATION. METHOD set_resize_cols_public. set_resize_cols( res ). ENDMETHOD. ENDCLASS. CLASS diagram DEFINITION. PUBLIC SECTION. METHODS constructor IMPORTING resize_cols TYPE i container TYPE REF TO cl_gui_container. METHODS set_data IMPORTING country TYPE land1. METHODS copy IMPORTING from TYPE REF TO cl_gui_alv_grid. DATA grid TYPE REF TO my_grid. PROTECTED SECTION. DATA data TYPE STANDARD TABLE OF t005t. ENDCLASS. CLASS diagram IMPLEMENTATION. METHOD constructor. grid = NEW #( i_parent = container ). IF resize_cols = 0. DATA(no_header) = abap_true. ENDIF. grid->set_table_for_first_display( EXPORTING i_default = space i_structure_name = 'T005T' is_layout = VALUE lvc_s_layo( smalltitle = abap_true no_toolbar = abap_true no_headers = no_header no_hgridln = abap_true no_vgridln = abap_true ) CHANGING it_outtab = data EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4 ). grid->set_resize_cols_public( resize_cols ). ENDMETHOD. METHOD set_data. IF country IS INITIAL. SELECT * FROM t005t INTO TABLE @data WHERE spras = @sy-langu. ELSE. SELECT * FROM t005t INTO TABLE @data WHERE land1 = @country AND spras = @sy-langu. ENDIF. grid->refresh_table_display( ). ENDMETHOD. METHOD copy. from->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = DATA(lt_fcat_from) ). grid->set_frontend_fieldcatalog( lt_fcat_from ). grid->refresh_table_display( i_soft_refresh = abap_true is_stable = value #( col = abap_true row = abap_true ) ). ENDMETHOD. ENDCLASS. INITIALIZATION. DATA(docker) = NEW cl_gui_docking_container( side = cl_gui_docking_container=>dock_at_bottom ratio = 40 ). DATA(splitter) = NEW cl_gui_splitter_container( parent = docker rows = 2 columns = 1 ). splitter->set_row_sash( EXPORTING id = 1 type = cl_gui_splitter_container=>type_sashvisible value = cl_gui_splitter_container=>false ). splitter->set_row_mode( mode = cl_gui_splitter_container=>mode_absolute ). splitter->set_row_height( id = 1 height = 40 ). splitter->set_border( border = gfw_false ). DATA(dia01) = NEW diagram( resize_cols = 1 container = splitter->get_container( row = 1 column = 1 ) ) . dia01->set_data( 'DE' ). DATA(dia02) = NEW diagram( resize_cols = 0 container = splitter->get_container( row = 2 column = 1 ) ). dia02->set_data( space ). AT SELECTION-SCREEN. dia02->copy( dia01->grid ).
Das geht nur im Träger-Dynpro indem du den Custom Control-Bereich im Dynpro (dort wo am Ende CL_GUI_CUSTOM_CONTAINER platziert wird) auf die Größe deiner Grids setzt. Der Scrollbalken entsteht dann im Dynpro und nicht im Splitter bzw. den Grids.abapnewbie hat geschrieben: ↑11.09.2020 10:37Dadurch, dass meine ALV Tabelle größer ist, als der Screen-Bereich, entstehen bei beiden ALV's voneinander unabhängige Scrollbalken. Ich habe hier lange recherchiert und habe keine Möglichkeit gefunden da einzugreifen. Gibt es hier eine Möglichkeit, die Breite der Sub-Container größer zu stellen, sodass dann quasi ein Scrollbalken entsteht, statt zwei?
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
abapnewbie
argh. das ist tatsächlich blöd. da habe ich nicht dran gedacht.abapnewbie hat geschrieben: ↑11.09.2020 10:37Dadurch, dass meine ALV Tabelle größer ist, als der Screen-Bereich, entstehen bei beiden ALV's voneinander unabhängige Scrollbalken.
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
abapnewbie
Wie ist es denn mit dem cl_gui_custom_container=>default_screen?a-dead-trousers hat geschrieben: ↑11.09.2020 11:48Das geht nur im Träger-Dynpro indem du den Custom Control-Bereich im Dynpro (dort wo am Ende CL_GUI_CUSTOM_CONTAINER platziert wird) auf die Größe deiner Grids setzt. Der Scrollbalken entsteht dann im Dynpro und nicht im Splitter bzw. den Grids.abapnewbie hat geschrieben: ↑11.09.2020 10:37Dadurch, dass meine ALV Tabelle größer ist, als der Screen-Bereich, entstehen bei beiden ALV's voneinander unabhängige Scrollbalken. Ich habe hier lange recherchiert und habe keine Möglichkeit gefunden da einzugreifen. Gibt es hier eine Möglichkeit, die Breite der Sub-Container größer zu stellen, sodass dann quasi ein Scrollbalken entsteht, statt zwei?
Hier ist aber noch zu sagen, dass die maximale Breite bei 255 Zeichen liegt.
Code: Alles auswählen.
create object mo_container
EXPORTING
link_dynnr = '7000' " Dynpro-Nummer
link_repid = sy-repid " Reportname
* shellstyle = " Fenster-Style
* left = " Links
* top = " Oben
* width = " Breite
* height = " Hoehe
* metric = CNTL_METRIC_DYNPRO " Metrik
* align = 15 " Alignment
parent = cl_gui_custom_container=>default_screen " Parent Container
rows = 2 " Anzahl zu zeigender Zeilen
columns = 1 " Anzahl zu zeigender Spalten
* no_autodef_progid_dynnr = " dont autodefine progid and dynnr?
* name = " Name
* EXCEPTIONS
* cntl_error = 1
* cntl_system_error = 2
* others = 3
.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
Der "legt" sich über das gesamte Dynpro. Damit kannst du dann zwar etwas größer werden als 255 Zeichen, aber gleichzeitig können keine anderen Elemente (Eingabefelder usw.) auf dem Bildschirm dargestellt werden.abapnewbie hat geschrieben: ↑14.09.2020 11:11Wie ist es denn mit dem cl_gui_custom_container=>default_screen?
Wofür es die "width" hier gibt kann ich nur vermuten, weil sie, wie du ja schon festgestellt hast, keine Änderung bewirkt. Bei den GUI-Controls in SAP gibt es einen Design- und einen Runtimemode. In ersterem werden die Control mit einem Raster dargestellt, damit man sich beim platzieren irgendwie leichter tut. Hier würde eine Angabe der Breite Sinn machen. Der Runtimemode ist das was man normal sieht und hier passen sich die Controls an die maximal Höhe bzw. Breite an.abapnewbie hat geschrieben: ↑14.09.2020 11:11Wenn ich hier mit dem Parameter "width" rumspiele, ändert sich gar nichts. Ist das so, weil die Einstellungen vom Parent-Element dann vererbt werden?
Nope. Es wird hier immer ein "Bereich" für eine externe Darstellung reserviert. Grob gesagt, "zeichnet" der SAP-Gui in diesem Bereich nicht hinein und überlässt das komplett den OCX-Controls. Schön sieht man das, wenn man z.B. ein eigenes Control entwickelt hat und "vergisst" auf die Windows-Message WM_PAINT zu reagieren. Dann sieht man in dem Bereich schön die Artefakte aus anderen Fenstern.abapnewbie hat geschrieben: ↑14.09.2020 11:11Gibt es überhaupt die Möglichkeit, meinen mo_container größer zu machen als das parent Element?
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
abapnewbie