Page 1 of 1

Rätsel mit ICONS auf Listen

PostPosted: Mon Oct 11, 2004 9:05 pm
by Ilja583
Tja,
eine kleine PM hier im Forum brachte mich auf folgendes Rätsel:

Ich hab ein kleines Programm geschrieben welches folgenden Output erzeugt ( ein wenig zurechtgeschnitten, damit das Wesentliche deutlich wird).
Bitte beachtet die jeweils 2. Zeile - der Output ist ganz und gar nicht der, den man lt. Coding vermuten würde, da SAP hier eine sehr interessante Überarbeitung des Outputs vornimmt. :D
Die 3. Zeile (Rätsel) ist letztlich nur das, was man in der 2. Zeile wohl hätte erwarten können - aber das geht eben nicht ganz so leicht.

Viel Spaß beim Tüfteln. ( Ach ja - es werden alle Lösungen akzeptiert, die obige Ausgabe erwzingen. Wo genau Coding hinzugefügt wird ist völlig egal - meine Codingstrecken habe ich in diesem Fall man einfach auf "Geheim" gestellt )

Bild

Das Coding, das in jedem Abschnitt die Zeilen "Mit Lücke" und "Ohne Lücke" erzeugt habe ich hier mitgegeben - lediglich den Part, der die jeweils 3. Zeile " Rätsel" erzeugt fehlt.

Wer hat Lust ein wenig Coding einzufügen um selbige Ausgabe zu erhalten?

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. REPORT z LINE-SIZE 1000 NO STANDARD PAGE HEADING.
  2.  
  3. TYPE-POOLS: icon.
  4.  
  5. PARAMETERS: i TYPE i DEFAULT 10.
  6.  
  7. *** 5 Geheime Zeilen *****************************
  8.  
  9. *** 2 Geheime Zeilen *****************************
  10.  
  11.  
  12.   CHECK i < 100.  " Mehr nicht
  13.   DO i TIMES.
  14.  
  15.     WRITE:/ 'Mit Lücke'.
  16.     POSITION 20.
  17.     DO sy-index TIMES.
  18.       WRITE icon_okay AS ICON.
  19.     ENDDO.
  20.  
  21.     WRITE:/ 'Ohne Lücke'.
  22.     POSITION 20.
  23.     DO sy-index TIMES.
  24.       WRITE icon_okay AS ICON NO-GAP.
  25.     ENDDO.
  26.  
  27.     WRITE:/ 'Rätsel' color 7.
  28.     POSITION 20.
  29. *** 14 Geheime Zeilen *****************************
  30.  
  31.     ULINE.
  32.   ENDDO.
GeSHi ©

PostPosted: Mon Oct 11, 2004 9:28 pm
by Willy1492
Mein erster Versuch hat sofort geklappt, allerdings auf einem 6.40-System, auf dem auch schon die Zeile "ohne Lücke" das erwartete Ergebnis liefert.
(Evtl. mal nach OSS-Hinweisen suchen, in denen NO-GAP und ICON im Text (nicht im Quelltext) vorkommen.)

Ebenso hat die zuletzt von mir vorgeschlagene Version für das Radiobutton-Rätsel (unter LOW-Feld der SELECT-OPTION verstecken) auch nur mit 6.40 und JavaGUI for Linux ohne Nebenwirkungen funktioniert.

Mit Windows-Gui an einem 4.6-System sah zwar zuerst auch alles brauchbar aus, aber nach Benutzung der Tabulator-Taste tauchte plötzlich im LOW-Feld der markierte Radiobutton auf.
Und ein Radiobutton in einem Button (z.B. in dem nach dem HIGH-Value) sieht auch ganz interessant aus.

PostPosted: Tue Oct 12, 2004 1:27 pm
by ewx
Hi Kniffelkönig!

Es ist doch wie verhext...
Was mich wundert: Deine zwei Zeile Geheimcode in der INITIALIZATION-Section...
Hast du da sowas eingebaut wie:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. INCLUDE <Kernel6-40>.
  2. INCLUDE <SAP-Special-Icons-for-Stefan>.
GeSHi ©

???

Ich habe schon folgendes -- ohne Erfolg -- versucht:
    - Aufbau der Icons von rechts nach links
    - Aufbau der Icons versetzt (Erst Icons 1, 3, 5 etc, danach Icons 2, 4, 6
    - EXPORT_LIST_TO_MEMORY (aber der interne Listaufbau ist mir zu komplex)
    - Skip to line x. Position y
    - Ausgabe der Icons mit Längenangabe

ich bin mal gespannt...

Gruß, Enno

Eine Lösung

PostPosted: Thu Oct 14, 2004 8:40 pm
by Ilja583
Hier kommt nun die Lösung zu obigem Rätsel.
Es sei übrigens noch vorher bemerkt, dass das Rätsel wohl nicht in Release 6.x ein solches ist, da die Iconunterdrückung, die in 4.6c stattfindet dort nicht mehr passiert, so dass beim "normalen" Programmieren auch ein "normales" Verhalten von ABAP zu erkennen ist.
Dank an Frank für den Hinweis in seinem Posting.

Hier nun der Ansatz um auch in 4.6c dicht nebeneinander gepackte gleiche Icons zu sehen zu bekommen. Wer es selbst mal versucht hat wird erkannt haben, dass ABAP dies ziemlich geschickt erkennt und immer (naja - fast immer - sonst wär dies hier ja kein Rätsel ) verhindert.

Es werden nur gleiche nebeneinanderliegende Icons unterdrückt. Somit ist der 1. Schritt zunächst die korrekte Anzahl von Icons auf den Schirm zu bringen, die nicht unterdrückt werden, indem abwechselnd ein "OKAY" und ein "CANCEL" gedruckt werden.
Das sieht dann schonmal fast so aus wie das Ergebnis - mit dem kleinen Schönheitsfehler, dass jedes 2. Icon nicht das Gewünschte ist.

Nun wird ABAP ausgetrickst. Es wird mit "READ LINE" die aktuelle Zeile gelesen (die mit den falschen Icons) und in SY-LISEL die falschen durch die korrekten Icons ausgetauscht. Danach wird mit "MODIFY LINE" die Zeile zurückgeschrieben. Bei dieser Aktion scheint ABAP nicht mehr einzugreifen und man erhält das gewünschte Ergebnis.

Hier noch das Coding dazu

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. REPORT z LINE-SIZE 1000 NO STANDARD PAGE HEADING.
  2.  
  3. TYPE-POOLS: icon.
  4.  
  5. PARAMETERS: i TYPE i DEFAULT 10.
  6.  
  7. types: ty_x2&#40;2&#41; type x.
  8. DATA:          n     TYPE i,
  9.                zeile type i value 3.
  10. field-symbols: <okay>   type ty_x2,
  11.                <cancel> type ty_x2.
  12.  
  13.   assign icon_okay+1&#40;2&#41;   to <okay> casting.
  14.   assign icon_cancel+1&#40;2&#41; to <cancel> casting.
  15.  
  16.  
  17.   CHECK i < 100.  " Mehr nicht
  18.   DO i TIMES.
  19.  
  20.     WRITE:/ 'Mit Lücke'.
  21.     POSITION 20.
  22.     DO sy-index TIMES.
  23.       WRITE icon_okay AS ICON.
  24.     ENDDO.
  25.  
  26.     WRITE:/ 'Ohne Lücke'.
  27.     POSITION 20.
  28.     DO sy-index TIMES.
  29.       WRITE icon_okay AS ICON NO-GAP.
  30.     ENDDO.
  31.  
  32.     WRITE:/ 'Rätsel' color 7.
  33.     POSITION 20.
  34.     DO sy-index TIMES.
  35.       n = sy-index MOD 2.
  36.       IF n <> 0.
  37.         WRITE icon_okay AS ICON NO-GAP.
  38.       ELSE.
  39.         WRITE icon_cancel AS ICON NO-GAP.
  40.       ENDIF.
  41.     ENDDO.
  42.     read line zeile.
  43.     while sy-subrc = 0.
  44.       replace <cancel> with <okay> into sy-lisel.
  45.     endwhile.
  46.     modify current line.
  47.     add 4 to zeile.
  48.  
  49.     ULINE.
  50.   ENDDO.
  51.    
  52.  
GeSHi ©