ME10マクロのページです
(パーツ)

2001.08.16 更新 



リスト


macro.lzh#(マクロファィルです。)

   1.兄弟パーツの作成 2000.04.30
   2.パーツ名変更 2000.04.30
   3.パーツの連続共有化 2000.04.30
   4.パーツ・移動/コピー 2001.01.17
          (パーツを指定してから、移動/コピー先を指定します。)
   5.同名子パーツの変換作成 2001.02.12
          (親の要素を移動して、親と同じ名前の子パーツを作ります。)
   6.同名子パーツの作成 2001.02.12
          (親と同じ名前の空の子パーツを作ります。)

   7.パーツ検索の使い方 2001.06.17
   8.パーツ検索・初期値格納 2001.06.17
   9.パーツ検索・枠の定義 2001.06.17
   10.パーツ検索・表示データの作成 2001.06.17
   11.パーツ検索・データのスクロール 2001.06.17
   13.パーツ検索・一次データ作成 2001.06.17
   14.パーツ検索・タイトルデータの変更 2001.06.17
    15.パーツ検索・データの作成 2001.08.16,2001.06.17
   16.パーツ検索・枠の内容定義 2003.02.03 2001.06.17
   17.パーツ検索・枠の表示 2001.06.17
 



兄弟パーツの作成
  2000.02.14-2000.04.29}

DEFINE Ma_part_brotherly
  LOCAL Lo_name

  INQ_ENV 7
  IF (((INQ 302) <> '~1') AND ((INQ 302) <> '1'))   {TOPで無ければ}
    READ STRING '** 作成する兄弟パーツの名前を入力して下さい。 **' Lo_name
    EDIT_PART PARENT                              {親パーツに移動}
    INIT_SUBPART Lo_name                          {パーツ作成}
  ELSE
    READ STRING '** 作成する子パーツの名前を入力して下さい。 **' Lo_name
    INIT_SUBPART Lo_name                          {パーツ作成}
  END_IF

END_DEFINE



パーツ名変更
  1999.01.21}

DEFINE Ma_part_rename
  LOCAL Lo_name
  LOCAL Lo_name_now

  INQ_ENV 7
  LET Lo_name (INQ 301)
  READ STRING '** アクティブパーツの変更する名前を入力して下さい。 **' DEFAULT Lo_name Lo_name_now
  RENAME_PART Lo_name_now

END_DEFINE



パーツの連続共有化
  2000.04.26-2000.04.30}

DEFINE Ma_part_common
  LOCAL Lo_name
  LOCAL Lo_name_common

  LOOP
    INQ_ENV 7
    LET Lo_name (INQ 301)                         {現在のパーツ名の取得}
    READ STRING '** 共有化するパーツの名前を入力して下さい。 **' Lo_name_common
    INQ_PART Lo_name_common
    IF (((INQ 302) <> '~1') AND ((INQ 302) <> '1'))   {TOPで無ければ}
      INIT_PART '$$$part'                         {仮}
      SHARE_PART Lo_name_common                   {共有化}
      EDIT_PART Lo_name                           {元のパーツに戻る}
    ELSE
      DISPLAY '** TOPは共有化できません。 [ESC]キーを入力して、抜けて下さい。 **'
      END
    END_IF
 

  END_LOOP

END_DEFINE



パーツ・移動/コピー
  2001.01.11-2001.01.17
}
DEFINE Ma_part_trans
  PARAMETER Sirusi                                {0=移動/1=コピー}

  LOCAL Part_id_00                                {カレント・パーツのユニークなパーツ名}
  LOCAL Part_id_01                                {移動するパーツのID}
  LOCAL Part_id_02                                {移動先のパーツのID}

  INQ_ENV 7
  LET Part_id_00 ('~' + (INQ 302))                {カレント・パーツのユニークなパーツ名を保存}

  LOOP
    PRT_EDITOR                                    {パーツエディタウィンドウを表示}
    IF (Sirusi<>1)                                {移動なら}
      READ STRING '** 移動するパーツ欄を指示して下さい。(子パーツが有れば一緒に移動します。) **' Part_id_01
      READ STRING '** 移動先のパーツ欄を指示して下さい。(このパーツの子パーツとして、移動されます。) **' Part_id_02
      EDIT_PART Part_id_02                        {指定パーツに移る}
      GATHER PART Part_id_01                      {パーツを移動}
    ELSE
      READ STRING '** コピーするパーツ欄を指示して下さい。(子パーツが有れば一緒にコピーします。) **' Part_id_01
      READ STRING '** コピー先のパーツ欄を指示して下さい。(このパーツの子パーツとして、コピーされます。) **' Part_id_02
      EDIT_PART Part_id_02                        {指定パーツに移る}
      GATHER COPY PART Part_id_01                 {パーツをコピー}
    END_IF

    EDIT_PART Part_id_00                          {元のパーツに戻る}
  END_LOOP

END_DEFINE



同名子パーツの変換作成
  2001.02.05
}
DEFINE Ma_part_carry
  LOCAL Lo_name

  INQ_ENV 7
  LET Lo_name (INQ 301)                           {カレントパーツ名の取得}
  CREATE_SUBPART Lo_name                          {パーツ作成}

END_DEFINE



同名子パーツの作成
  2001.02.05
}
DEFINE Ma_part_same
  LOCAL Lo_name

  INQ_ENV 7
  LET Lo_name (INQ 301)                           {カレントパーツ名の取得}
  INIT_SUBPART Lo_name                            {パーツ作成}

END_DEFINE



パーツ検索の使い方


 1. [パーツ検索・初期値格納] から  [パーツ検索・枠の表示] までを、マ クロの使い方を参考にして、ME10にINPUTして下さい。
 2.最初に [Ma_part_search_prelude] を実行して下さい。
   このマクロが入っている、INPUT文の後に [Ma_part_search_prelude] の文字を書き込んで、実行させてもOKです。
 3.[Ma_part_search_frame_on] を実行すると、検索の枠が表示されます。
 4.検索の文字の右の枠をクリックすると、検索の文字を入力するように求められますので、入力して下さい。
    検索の文字は、['} で前後を囲んで下さい。
    検索されるパーツは入力された文字列を含むパーツです。
 5.パーツエディタのようにして、パーツ移動が行えます。



パーツ検索・初期値格納
  2001.06.17
}
DEFINE Ma_part_search_prelude
  LET Gl_search_word ''                           {パーツ検索のサーチ文字列}
  LET Gl_search_part_volume 0                     {パーツ検索のヒット数}
  LET Gl_search_scroll_point 1                    {検索表示文字の開始位置}
  LET Table_display '##Selct_display##'           {表示用データのテーブル名}

  CREATE_LTAB 1 1 Table_display                   {表示用データのテーブル確保}
END_DEFINE



パーツ検索・枠の定義
  2001.06.03
}
DEFINE Frame_layout_100
  LOCAL Table_display                             {表示用データのテーブル名}

  LET Table_display '##Selct_display##'           {表示用データのテーブル名}
  TRAP_ERROR
  TABLE_LAYOUT 'Layout_100' Table_display         {表示テーブル名/データテーブル名}
  IF (NOT CHECK_ERROR)
    Bcol1 Bcol0                                   {表示色・背景色}
    ROWS 15                                       {行数}
    FRAME_WIDTH 5
    HORIZONTAL SOLID WHITE                        {水平枠}
    VERTICAL SOLID WHITE                          {鉛直枠}
    SCROLL_BAR Bcol1 Bcol1                        {スクロールバー}

    TITLE_LAYOUT
      (Headline_height+1) ' | |タイト ル                                              | '
      4                   '                                                            '
      (Headline_height+1) '検索文 字|                                             |99999'
      4                   '                                                            '
      (Headline_height+1) 'パーツ 名                             | | |ID  |共有 |尺度 ' END
    COLUMN_LAYOUT
      (Headline_height+1) '12345678901234567890123456789012345678901|      |     |     ' END
  END_IF
 
END_DEFINE



パーツ検索・表示データの作成
  2001.06.09- 2001.06.17
}
DEFINE Ma_part_search_displaydata
{ Gl_fruit  修正された表示ポイント}
  PARAMETER Start_point                           {部分表示開始位置}

  LOCAL Point00
  LOCAL Count00
  LOCAL Count01

  LOCAL Kaz00
  LOCAL Kaz01
  LOCAL Moj01

  LOCAL Table_display

  LET Table_display '##Selct_display##'           {表示用データのテーブル名}
  LET Point00 ((Start_point - 1) * 10 + 1)        {表示開始位置の算出}

{ 最長の調査}
  LET Kaz00 0
  LET Count01 (LTAB_ROWS Table_display)           {データの量}

  LOOP
  EXIT_IF (Count01 = 0)
    LET Kaz01 (LEN (READ_LTAB Table_display Count01 4)) {文字列の長さ}
    IF (Kaz00 < Kaz01)
      LET Kaz00 Kaz01               {更新}
    END_IF
 
    LET Count01 (Count01 - 1)
  END_LOOP

  IF ((Point00 + 31) > Kaz00)                     {スクロールが不要なら}
  ELSE
    LET Gl_fruit Start_point
  END_IF

  LET Count01 (LTAB_ROWS Table_display)           {データの量}
  IF (0 < Count01)                                {データが有るなら}
    LOOP
      LET String01 (READ_LTAB Table_display Count01 4)  {処理文字列読み出し}
      IF (Point00 > (LEN String01)) {表示する部分が無いなら}
        LET String01 ''
      ELSE
        LET String01 (SUBSTR String01 Point00 ((LEN String01) - Point00 + 1))
      END_IF
      WRITE_LTAB Table_display Count01 8 String01  {表示用パーツ名の書き込み}
    EXIT_IF (1 = Count01)
      LET Count01 (Count01 - 1)
    END_LOOP
 
  END_IF

END_DEFINE



パーツ検索・データのスクロール
  2001.06.14
}
DEFINE Ma_part_search_name_scroll
  PARAMETER Kubetu                                {スクロール方向 1=左行き/2=右行き}

  LOCAL Kaz01                                     {開始位置}

  LET Kaz01 Gl_search_scroll_point                {検索表示文字の開始位置}
  IF (Kubetu = 1)
    IF (1 < Kaz01)
      LET Kaz01 1                                 {左端から表示に}
    END_IF
 

  ELSE
    LET Kaz01 (Kaz01 + 1)
  END_IF
 
  Ma_part_search_displaydata Kaz01                {パーツ検索・表示データの作成}
  LET Gl_search_scroll_point Gl_fruit             {検索表示文字の開始位置}

END_DEFINE



パーツ検索・一次データ作成
  2001.06.09
}
DEFINE Ma_part_search_processdata
{ 1 パーツデータの行位置
  2 階層
  3 カレント区別
  4 バーツ名
  5 ID
  6 共有
  7 尺度
  8 表示用パーツ名(表示テーブルのみ)
}
  PARAMETER String00                              {処理文字列}
  PARAMETER Table_name                            {格納テーブル名}
  PARAMETER Count_no                              {格納行}
 

  LOCAL Point00
  LOCAL Kaz01
  LOCAL Moj01

  LET Point00 (POS String00 '~')                  {ID文字の位置}

{階層}
  IF ((POS String00 '[') = 1)                     {カレントパーツなら}
    LET Kaz01 ((((LEN String00) - (LEN (TRIM (SUBSTR String00 (POS String00 ' ') ((LEN String00) - (POS String00 ' ') + 1))))) - 2) / 2 )
    LET Moj01 '*'
  ELSE
    LET Kaz01 (((LEN String00) - (LEN (TRIM String00)) - 2) / 2)
    LET Moj01 ' '
  END_IF
 

  WRITE_LTAB Table_name Count_no 2 Kaz01          {階層の書き込み}
  WRITE_LTAB Table_name Count_no 3 Moj01          {カレント区別の書き込み}
{バーツ名}
  LET Moj01 (SUBSTR String00 5 (Point00 - 7))
  WRITE_LTAB Table_name Count_no 4 Moj01          {パーツ名の書き込み}

  LET String00 (SUBSTR String00 (Point00 - 1) ((LEN String00) - Point00 + 2))  {データを整形}
{ID}
  LET Moj01 (SUBSTR String00 2 ((POS String00 ']') - 2))  {ID}
  WRITE_LTAB Table_name Count_no 5 Moj01          {IDの書き込み}

  LET String00 (SUBSTR String00 ((POS String00 ']') + 2) ((LEN String00) - ((POS String00 ']') + 1)))  {データを整形}
{共有}
  IF ((POS String00 '共有されました') > 0)    {共有パーツ親なら}
    LET Moj01 (SUBSTR String00 (POS String00 '#') ((POS String00 ']') - (POS String00 '#')))
    LET String00 (SUBSTR String00 ((POS String00 ']') + 2) ((LEN String00) - (POS String00 ']') - 1)) {残りの文字}
  ELSE_IF ((POS String00 '共有されるパーツの共有') > 0)  {共有パーツ子なら}
    LET Moj01 ('#' + (SUBSTR String00 (POS String00 '#') ((POS String00 ']') - (POS String00 '#'))))
    LET String00 (SUBSTR String00 ((POS String00 ']') + 2) ((LEN String00) - (POS String00 ']') - 1)) {残りの文字}
  ELSE
    LET Moj01 ' '
  END_IF
 
  WRITE_LTAB Table_name Count_no 6 Moj01          {共有の書き込み}

{尺度}
  LET Moj01 (SUBSTR String00 2 ((POS String00 ']') - 2))
  WRITE_LTAB Table_name Count_no 7 Moj01          {尺度の書き込み}

END_DEFINE



パーツ検索・タイトルデータの変更
 2001.06.14-2001.06.17
}
DEFINE Ma_part_searchframe_title_chg
  TABLE_TITLE Frame_name
    Colo0 Bcol4 LEFT Gl_search_word 'Ma_part_search_data_up' 3 2  {検索文字枠}
    Colo0 Bcol4 RIGHT (STR Gl_search_part_volume) '' 3 3  {適合数}
  END

END_DEFINE



パーツ検索・データの作成
  2001.06.10-2001.08.07
}
DEFINE Ma_part_search_data_up
{ グローバル変数
  Gl_search_word                                  パーツ検索のサーチ文字列
}
  LOCAL Table_part                                {バーツデータのテーブル名}
  LOCAL Table_select                              {検索データのテーブル名}
  LOCAL Table_display                             {表示用データのテーブル名}
  LOCAL Frame_name                                {パーツ検索枠のテーブル名}

  LOCAL Search_word                               {検索文字列}

  LOCAL Row_max                                   {全バーツ数}
  LOCAL Row_no                                    {テーブルの行位置}

  LOCAL Row_select                                {検索データの数}

  LOCAL Count00                                   {カウントデータ}
  LOCAL Count01                                   {カウントデータ}
  LOCAL String01                                  {処理文字列}
  LOCAL Length01                                  {処理文字長}

  LOCAL Kaz01
  LOCAL Moj01
  LOCAL Data01

  LOCAL Class00                                   {階層}
  LOCAL Class01

  LET Table_part '##part_list##'                  {バーツデータのテーブル名}
  LET Table_select '##Selct_list##'               {検索データのテーブル名}
  LET Table_display '##Selct_display##'           {表示用データのテーブル名}
  LET Frame_name 'Layout_100'                     {表示枠名}

  RESET_PART_NUMBER                               {ID番号の整理}
  INQ_ENV 8
  LET Row_max (inq 5)                             {ID番号の最大値}
  CREATE_LTAB (Row_max + 1) 3 Table_part          {バーツデータのテーブル確保}
  PARTS_LIST TREE LTAB Table_part                 {パーツ名をテーブルに格納}
  CREATE_LTAB 1 1 Table_display                   {表示用データのテーブル確保}

  CREATE_LTAB 1 1 Table_select                    {検索データのテーブル確保}

  READ '** 検索をする、パーツ名の一部又は全ての文字列を入力して下さい。 **' DEFAULT Gl_search_word Search_word
  LET Gl_search_word Search_word                  {文字列格納}

  LET Row_no 1
{バーツデータの処理}
  LOOP
    LET Moj01 (READ_LTAB Table_part Row_no 1)
    LET Kaz01 (POS Moj01 '~')                     {ID文字の位置}
    LET Moj01 (TRIM (SUBSTR Moj01 4 (Kaz01 - 5))) {パーツ名の切り出し}
    IF ((POS Moj01 Search_word) > 0)              {文字が含まれるなら}
      WRITE_LTAB Table_part Row_no 2 1
    ELSE
      WRITE_LTAB Table_part Row_no 2 0
    END_IF
 
    WRITE_LTAB Table_part Row_no 3 Row_no         {行番号}
    LET Row_no (Row_no + 1)
  EXIT_IF (Row_max < Row_no)
    DISPLAY_NO_WAIT Row_no                        {動作表示}
  END_LOOP

  SELECT_FROM_LTAB Table_part COLUMN 2 = 1 Table_select  {選択合致データを移す}

  LET Row_select (LTAB_ROWS Table_select)         {検索データの数}
  IF (0 < Row_select)
    LET Row_no 1
{データの構築}
    LOOP
      LET String01 (READ_LTAB Table_select Row_no 1)  {処理文字列読み出し}
      LET Kaz01 (READ_LTAB Table_select Row_no 3)
      WRITE_LTAB Table_select Row_no 1 Kaz01      {行番号を移す}
      Ma_part_search_processdata String01 Table_select Row_no  {処理文字列・格納テーブル名・格納行}
      LET Row_no (Row_no + 1)
    EXIT_IF (Row_select < Row_no)
    END_LOOP
 
    LET Gl_search_part_volume (Row_no - 1)        {検索ヒットの数の記憶}

{表示データの作成}
    LET Row_no Row_select
    LOOP
      LET Count00 (READ_LTAB Table_select Row_no 1) {行番号の取得}
      LET Count01 Count00
      LET Class00 (READ_LTAB Table_select Row_no 2) {階層の取得}

      LOOP
        LET String01 (READ_LTAB Table_part Count01 1) {処理文字列}
{階層の取得}
        IF ((POS String01 '[') = 1)               {カレントパーツなら}
          LET Class01 ((((LEN String01) - (LEN (TRIM (SUBSTR String01 (POS String01 ' ') ((LEN String01) - (POS String01 ' ') + 1))))) - 2) / 2 )
        ELSE
          LET Class01 (((LEN String01) - (LEN (TRIM String01)) - 2) / 2)
        END_IF
 
        IF ((Class01 < Class00) OR (Count01 = Count00))  {自身又は上の階層なら}
          INSERT_LTAB_ROW Table_display 0 1       {1行後にずらす}
          Ma_part_search_processdata String01 Table_display 1 {処理文字列・格納テーブル名・格納行}

          Ma_part_search_displaydata 1            {表示用データの作成}

          LET Class00 Class01                     {変更}
        END_IF
 
        LET Count01 (Count01 - 1)
      EXIT_IF (1 = Class01)
      END_LOOP

      LET Row_no (Row_no - 1)
    EXIT_IF (0 = Row_no)
      INSERT_LTAB_ROW Table_display 0 1           {1行後にずらす}
      DISPLAY_NO_WAIT Row_no                      {動作表示}
    END_LOOP
 

  ELSE
    LET Gl_search_part_volume 0                   {検索ヒットの数を0にする}
  END_IF

  Ma_part_searchframe_title_chg                   {検索文字・合致数の変更}

END_DEFINE



パーツ検索・枠の内容定義
  2001.06.09-2003.02.03
}
DEFINE Frame_display_100
  LOCAL Frame_name                                {パーツ検索枠のテーブル名}
  LOCAL Table_select                              {検索データのテーブル名}
  LOCAL Table_display                             {表示用データのテーブル名}

  LET Frame_name 'Layout_100'                     {表示枠名}
  LET Table_display '##Selct_display##'           {表示用データのテーブル名}

{タイトル行部分}
  Table_control_icons Frame_name                  {タイトル行の記号枠内を記入}
  WRITE_LTAB Table_display TITLE 1 Menu_delete_icon {タイトル行の1番枠内に削除記号[0] を記入}

  TABLE_TITLE Frame_name
    Pbt_head_fg Pbt_head_bg CENTER 'パーツ検索' '' 1 3

    Pbt_head_fg Pbt_title_bg1 CENTER '' '' 2 1    {二重線内の色付け}

    Pbt_title_fg Pbt_title_bg1 LEFT '検索文字' '' 3 1
    Colo0 Bcol4 LEFT Gl_search_word 'Ma_part_search_data_up' 3 2  {検索文字枠}
    Colo0 Bcol4 RIGHT (STR Gl_search_part_volume) '' 3 3  {適合数}

    Pbt_title_fg Pbt_title_bg1 CENTER '' '' 4 1   {二重線内の色付け}

    Pbt_title_fg Pbt_title_bg1 CENTER 'パーツ名' '' 5 1
    Pbt_title_fg Pbt_title_bg1 Menu_scroll_left_icon 'Ma_part_search_name_scroll 1' 5 2
    Pbt_title_fg Pbt_title_bg1 Menu_scroll_right_icon 'Ma_part_search_name_scroll 2' 5 3
    Pbt_title_fg Pbt_title_bg1 CENTER 'ID' '' 5 4
    Pbt_title_fg Pbt_title_bg1 CENTER '共有' '' 5 5
    Pbt_title_fg Pbt_title_bg1 CENTER '尺度' '' 5 6
  END

{データ行部分}
  TABLE_COLUMN Frame_name
    COLUMN 1 8 Pbt_data_fg Pbt_data_bg LEFT '"@v5"'   {バーツ名}
    COLUMN 2 5 Pbt_data_fg Pbt_data_bg RIGHT '"@v5"'  {ID}
    COLUMN 3 6 Pbt_data_fg Pbt_data_bg RIGHT '"@v5"'  {共有}
    COLUMN 4 7 Pbt_data_fg Pbt_data_bg RIGHT '"@v5"'  {尺度}
  END

END_DEFINE



パーツ検索・枠の表示
  2001.06.13
}
DEFINE Ma_part_search_frame_on
  LOCAL Table_display                             {表示用データのテーブル名}

  LET Table_display '##Selct_display##'           {表示用データのテーブル名}
  Frame_layout_100
  Frame_display_100
  MOVE_TABLE 'Layout_100' UPPER RIGHT OF END      {枠の表示位置/上の右}
  SHOW_TABLE ON 'Layout_100'

END_DEFINE



気をつけて作りました、使用してのトラブルに責任は持てませんが、
自由にお使い下さい。(伏 見 表