1つのアイコンで複数の処理を切り分けて起動する

[OS]ALL
[リリース] 6.08, 6.09, 6.10
[キーワード] af, frame, icon, label, _set_label_, _set_icon_, _get_label_, method, call,notify

[質問]

FRAMEエントリで、1つのアイコンで複数の処理を切り替えて起動できますか。

[回答]

可能です。アイコンのラベルは_SET_LABEL_メソッドで設定でき、_GET_LABEL_メソッドで取得できます。 したがって、アイコンをクリックするたびにラベルを変更すれば、1つのアイコンで複数の処理を切り替えて起動できます。

■ 使用するメソッド

  • CALL NOTIFY('オブジェクト名','_SET_LABEL_','ラベル');
  • CALL NOTIFY('オブジェクト名','_SET_ICON_','アイコンNo.');
  • CALL NOTIFY('オブジェクト名','_GET_LABEL_','引数');

次のプログラム例は、1つのアイコンで2種類の処理を交互に起動します。 アイコンクラスのオブジェクト名はICONとします。なお、_SET_ICON_メソッドはアイコンの図柄を設定します。

  length txt $ 8;
  INIT:
    call notify('icon','_set_label_','処理1');
  return;
  /*必要に応じてMAIN、TERMの処理を追加*/
  MAIN:
  return;
  TERM:
  return;
  ICON:
    call notify('icon','_get_label_',txt);
    if txt = '処理1' then do;
      /*処理1に対応したSCLステートメント*/
      call notify('icon','_set_label_','処理2');
      call notify('icon','_set_icon_',2);
    end;
    if txt = '処理2' then do;
      /*処理2に対応したSCLステートメント*/
      call notify('icon','_set_label_', '処理1');
      call notify('icon','_set_icon_',1);
    end;
  return;