Rätsel mit ICONS auf Listen

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!

Rätsel mit ICONS auf Listen

Postby Ilja583 » Mon Oct 11, 2004 9:05 pm

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 ©
Ilja583
.....
.....
 
Posts: 1372
Joined: Wed Jan 08, 2003 3:00 pm

Postby Willy1492 » Mon Oct 11, 2004 9:28 pm

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.
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

Postby ewx » Tue Oct 12, 2004 1:27 pm

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
ewx
.....
.....
 
Posts: 2840
Joined: Mon Aug 04, 2003 9:02 pm

Eine Lösung

Postby Ilja583 » Thu Oct 14, 2004 8:40 pm

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 ©
Ilja583
.....
.....
 
Posts: 1372
Joined: Wed Jan 08, 2003 3:00 pm


Return to Tips + Tricks & FAQs

Who is online

Users browsing this forum: No registered users and 10 guests