0

うまくいけば、これがしばらくの間私の最後の質問になるでしょう。ProgressのUI機能についてはあまり言われることはありませんが、フレームに表示することに関して本当に奇妙な問題があるように思われます。

問題を理解するのに役立つ擬似コードを次に示します。

DEF TEMP-TABLE tMainTable.
DEF TEMP-TABLE tPage LIKE tMainTable.
DEF VAR iCursor AS INT.

/* SOME INPUT DETECTION */
/*  Moving the cursor   */

FIND FIRST tMainTable WHERE tMainTable.UniqueId EQ iCursor.
DO i = 1 TO iMaxPageSize:
    CREATE tPage.
    BUFFER-COPY tMainTable TO tPage.
END.

/* DISPLAY */
FOR EACH tPage:
    DISPLAY tPage.iNumber tPage.Name.
END.

これらがプログラムの基本です。これで目的の出力は、FRAMEがこれらを表示して、最後のエントリのすぐ下で終了するようにします。現在、デフォルトのFRAMEを使用して、ターミナル画面の下部に拡大縮小されます。

ただし、FRAMEをインスタンス化して、使用可能なすべての論理オプションを交換すると、希望するサイズに変更できますが、エントリを別の行に表示することはできません。代わりに、各エントリを同じ行に表示し、最後のエントリを上書きします。これは、常にTEMP-TABLEの最後のレコードを表示するためです。

FRAME "WITH iMaxPageSize DOWN"をインスタンス化してみましたが、効果がありませんでした。この特定のオプションについてもう少し詳しく読んだ後は、テーブル内の複数のフィールドを表示するためにのみ使用可能であり、複数のテーブルの特定のフィールドを表示するためには使用できないようです。

これが理にかなっていることを願っています、私は本当にこれについて助けが必要です。

4

2 に答える 2

1

それを理解し、私に累積8時間の読書と試行錯誤のコーディングを要しました。

FOR EACH tPage WITH 6 DOWN:

必要なのはそれだけでした。

FRAMEをインスタンス化したときに、FOR EACHで使用したにもかかわらず、1つのレコードしか表示できないというのはまだ私を悩ませています。

于 2012-10-11T16:16:34.420 に答える
0

あなたはこのようなことをする必要があります-FIND/DOの組み合わせはあなたが思っていることをしていません。

DEF TEMP-TABLE tMainTable.
DEF TEMP-TABLE tPage LIKE tMainTable.
DEF VAR iCursor AS INT.
DEF VAR i AS INT.      
i = 0.

FOR EACH tMainTable
   WHERE tMainTable.UniqueId EQ iCursor
   NO-LOCK:

   i = i + 1.
   IF i > maxpagesize THEN
      LEAVE.

   CREATE tPage.
   BUFFER-COPY tMainTable TO tPage.

END.

  /* DISPLAY */

FOR EACH tPage:
   DISPLAY tPage.iNumber tPage.Name 
      WITH DOWN.
END.
于 2012-10-11T00:44:22.390 に答える