入力支援ボタンの履歴を登録、更新します。

1.検索した文字を 入力支援ボタンのリストに登録します。

2.検索した文字を 入力支援リストの一番上に移動します。
  ( リスト内の文字を選択した場合、その文字が一番上になります)


目次

A) ひとつの検索項目が設定されたフォームで入力支援リストの履歴更新を設定する。

B) 複数の検索項目が設定されたフォームで入力支援リストの履歴更新を設定する。


A) ひとつの検索項目が設定されたフォームで入力支援リストの履歴更新を設定する。

・ 下図ではすでに入力済みの文字がいくつか並んでいますが、サンプルとして検索した文字列が履歴としてリストに登録されたものです。

----------------------

・ 定義画面で開いてみましょう。検索文字を入力する部分の属性は次のようになっています。

・ [入力時の操作] で 入力支援ボタンを利用できるようにしています。入力支援ボタンの属性は次の通りです。

 自動終了にチェックを入れておきましょう。

----------------------

〇 利用するイベントは txt氏名検索 にセットします(入力支援ボタンのイベントではありません)。
  ここでは 編集開始 と ソース値更新 を使用します。

・ 検索履歴は変数に保存します。値はフォームを閉じる際に保存して、開く際に復元します。
 フォームでは、起動時と終了時の実行コマンドを利用しています。
 ☆ フォームを起動する際に 自動的に手続きを実行させる方法については→ こちら(クリックしてください) をご覧になってください。

・ Startup 、Close ボタンの属性は次の通りです。

〇 イベントファイルは次の通りです。

・ 名札メインでは 局所変数と、固有変数を宣言しています。

・ txt氏名検索 で次のイベントが実行されます。
 青色のアンダーラインの部分ですが、&m氏名文字列 は氏名検索用の局所変数です。引数を使わなくても
 絞り込み [氏名] { *&m氏名文字列* } で問題なく機能します。
 ここでは直接 項目名と入力支援リストの変数 ( [氏名] 、&g氏名DIM )と記載しているので専用のソースコードとなります。
 * この部分は、複数の検索項目が設定された場合のソースコードと比較してみてください。

・ 次のプロシージャは ONnoji さんから提供して頂きました。配列変数の要素値を登録、並べ替えする処理が書かれています。

----------------------

参考

1  名札    メイン
2  
3   変数宣言 局所, 文字列 { &m氏名文字列 }
4  
5   変数宣言 固有, 文字列 { &g氏名DIM[10] }
6  
7  *
8  
9  手続き定義開始 cmdStartupClick( )
10   変数宣言 自動,整数{ &status }
11   変数読み込み "History.vax",固有 , 終了状態 = &status
12   if ( &status <> 1 )
13    確認 "保存した変数の値が読み込めませんでした。終了状態 = " + #str( &status )
14   end
15  手続き定義終了
16  
17  手続き定義開始 cmdCloseClick( )
18   変数書き出し "History.vax",固有
19  手続き定義終了
20  
21  
22  手続き定義開始 txt氏名検索::編集開始()
23   変数宣言 自動,文字列{ &objectName = &this }
24   メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 )
25  手続き定義終了
26  
27  手続き定義開始 txt氏名検索::ソース値更新()
28   if ( &m氏名文字列 <> #未定義 )
29    手続き実行 prc検索実行( &m氏名文字列 )
30   end
31  手続き定義終了
32  
33  
34  手続き定義開始 prc検索実行( 文字列 &検索文字列 )
35   解除 *
36   絞り込み [氏名] { *&検索文字列* }
37   手続き実行 prcHistoryDimSet( &検索文字列 , &g氏名DIM )
38  手続き定義終了
39  
40  
41  手続き定義開始 prcHistoryDimSet( 文字列 &string, 参照 文字列 &varDim[] )
42   変数宣言 自動,整数 { &top = 1, &bottom = #配列要素数( "varDim" ), &i, &next = 1, &before = -1, &found 
43  
44   if ( &varDim[ &top ] <> &string .and &top <> &bottom )
45  
46    繰り返し &i = &top + 1, &bottom, &next
47  
48     &found = &i
49  
50     if ( &varDim[ &i ] = &string )
51      繰り返し中止
52     end
53    繰り返し終了
54  
55    繰り返し &i = &found, &top + 1, &before
56     &varDim[ &i ] = &varDim[ &i - 1 ]
57    繰り返し終了
58  
59   end
60  
61   &varDim[ &top ] = &string
62  
63  手続き定義終了
64  

目次へ戻る


B) 複数の検索項目が設定されたフォームで入力支援リストの履歴更新を設定する。

ここでは次のように、複数の入力支援リストを処理してみます。

----------------------

・ 定義画面で開いてみます。

・ 検索用のオブジェクト、入力支援リストの属性は次のようになります(まずは 氏名検索の部分です)。

 

・ 住所検索部分の属性です。

・ Memo検索の属性です。

 

----------------------

〇 利用するイベントには txt氏名検索、txt住所検索、txtMemo検索 の 編集開始 と、ソース値更新 をセットします。

・ 検索履歴は変数に保存します。値はフォームを閉じる際に保存して、開く際に復元します。
 フォームでは、起動時と終了時の実行コマンドを利用しています。
 ☆ フォームを起動する際に 自動的に手続きを実行させる方法については→ こちら(クリックしてください) をご覧になってください。

・ Startup 、Close ボタンの属性は次の通りです。

 

〇 イベントファイルは次の通りです。

・ 名札メインでは 局所変数と、固有変数を宣言しています。

〇 txt氏名検索、txt住所検索、txtMemo検索 でつぎのイベントが実行されます。
 各手続きで 引数を使うことで 同じ プロシージャ ”prc検索実行” を使用することができます。
 *検索、入力支援リスト項目が一つのみの場合のソースコードと比較してみてください。

・ 次のプロシージャは ONnoji さんから提供して頂きました。配列変数の要素値を登録、並べ替えする処理が書かれています。
 *引数を使うことで 検索項目、更新するリストが複数になっても 一つの場合とまったく同じプロシージャが利用できます。

----------------------

参考

1  名札    メイン
2  
3   変数宣言 局所, 文字列 { &m氏名文字列 , &m住所文字列 , &mMemo文字列 }
4  
5   変数宣言 固有, 文字列 { &g氏名DIM[10] , &g住所DIM[10]  , &gMemoDIM[10] }
6  
7  *
8  
9  
10  手続き定義開始 cmdStartupClick( )
11   変数宣言 自動,整数{ &status }
12   変数読み込み "History.vax",固有 , 終了状態 = &status
13   if ( &status <> 1 )
14    確認 "保存した変数の値が読み込めませんでした。終了状態 = " + #str( &status )
15   end
16  手続き定義終了
17  
18  手続き定義開始 cmdCloseClick( )
19   変数書き出し "History.vax",固有
20  手続き定義終了
21  
22  
23  手続き定義開始 txt氏名検索::編集開始()
24   変数宣言 自動,文字列{ &objectName = &this }
25   メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 )
26  手続き定義終了
27  
28  手続き定義開始 txt氏名検索::ソース値更新()
29   if ( &m氏名文字列 <> #未定義 )
30    手続き実行 prc検索実行( "氏名" , &m氏名文字列 , &g氏名DIM )
31   end
32  手続き定義終了
33  
34  手続き定義開始 txt住所検索::編集開始()
35   変数宣言 自動,文字列{ &objectName = &this }
36   メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 )
37  手続き定義終了
38  
39  手続き定義開始 txt住所検索::ソース値更新()
40   if ( &m住所文字列 <> #未定義 )
41    手続き実行 prc検索実行( "住所" , &m住所文字列 , &g住所DIM )
42   end
43  手続き定義終了
44  
45  手続き定義開始 txtMemo検索::編集開始()
46   変数宣言 自動,文字列{ &objectName = &this }
47   メソッド呼び出し &objectName.編集選択位置設定( 1 ,-1 )
48  手続き定義終了
49  
50  手続き定義開始 txtMemo検索::ソース値更新()
51   if ( &mMemo文字列 <> #未定義 )
52    手続き実行 prc検索実行( "Memo" , &mMemo文字列 , &gMemoDIM )
53   end
54  手続き定義終了
55  
56  手続き定義開始 prc検索実行( 文字列 &検索項目 , 文字列 &検索文字列 , 参照 文字列 &履歴DIM[] )
57   解除 *
58   絞り込み &検索項目 { *&検索文字列* }
59   手続き実行 prcHistoryDimSet( &検索文字列 , &履歴DIM )
60  手続き定義終了
61  
62  
63  手続き定義開始 prcHistoryDimSet( 文字列 &string, 参照 文字列 &varDim[] )
64   変数宣言 自動,整数 { &top = 1, &bottom = #配列要素数( "varDim" ), &i, &next = 1, &before = -1, &found 
65
66  if ( &varDim[ &top ] <> &string .and &top <> &bottom )
67
68   繰り返し &i = &top + 1, &bottom, &next
69
70    &found = &i
71
72    if ( &varDim[ &i ] = &string )
73     繰り返し中止
74    end
75   繰り返し終了
76
77   繰り返し &i = &found, &top + 1, &before
78    &varDim[ &i ] = &varDim[ &i - 1 ]
79   繰り返し終了
80
81  end
82
83  &varDim[ &top ] = &string
84
85 手続き定義終了

目次へ戻る