過去の桐井戸端BBS (桐ver.9)
24698 表引き表を絞り込み状態で表示したり直接編集ができるようにしたい 沼田 2004/02/10-13:27
いつもご迷惑をお掛けします。
緊急ではありません。
今後のためにご意見がいただければと思い、投稿させて頂きました。

表に表引き条件を定義してよく使っていますが、もう少し使いやすくならないかと感じていました。
例えば、
1)希望の条件で絞り込んだ状態で表示したい
2)開いた表引き表を直接編集したい
3)好みの体裁で表示したい
等です。

通常では無理なことですので、どうしてもその為のフォームを新しく作って、
イベントなどで制御しながら表引きのように使う、という工夫をするしかないと思っています。
いくつかのイベントを組み合わせなければならない上に、その一つ一つをこの場で質問させて頂くのも
あまり生産的でないとも思いましたので、自分なりに工夫したものをUpさせていただきました。
もし時間が空くようでしたら見て頂いて、アドバイスがいただけると嬉しく思っています。

Upしたファイルには3つのフォルダを含んでいます。
「拡張コード引き」としているのが通常の表引き処理です。
「拡張表引き」としているのが、入力作業の補助に使えるかもしれないと思っている処理です。
その他に「組み込み例」というフォルダも作っていますが、それぞれの処理を実際の処理に組み込んだらこのようにならないか、
という内容になっています。
組み込み例には経理処理を例にしていますが、表引き関係の組み込みの実験ですから、経理処理そのものは十分でありません。
それぞれ「サンプル」の文字を含むwfmを実行してもらえれば動きます。

尚、これは以前にNo24504やNo24525で触れさせて頂いている処理をいくらか整理したものです。
その際に、「疑似表引き」のように呼んでいましたが、どこかで聞いた覚えがあると感じていましたが、
「多遊」さんのところにいかすぱげてぃさん作として紹介されていたことに気付きました。大変失礼しました。
また、同じところには「会話表引き」としても同様の使用目的の処理が紹介されていることにも気付きました。
十分に中身を見てみた訳でもありませんが、やはりそれぞれに少しずつですが違っています。
具体的な使い方の狙いの差があるのではないかと思っています。

Upさせて頂いたものは、同じようにコードを比較して項目値の表引きを行うものですが、
先に打ち込んだコードから引いてくるというよりも、直接項目値を
打ち込んでコードを引いてくる、などという使い方の方が多いのではないかと思っています。
先に希望の条件を3つ挙げましたが、
4)検索項目を部分一致検索で検索させたいという希望や、
5)他の人とも共同で利用したいという希望もありました。

今、複数のメンバーで異なる処理の作成を進めていますが、Upした処理はいろいろな場面で応用できそうな気がしていますので、
できるだけ汎用的に組み込むことが出来るように考えてみました。
この点も、すこし狙いが違っている部分かもしれません。

Upしたファイルには3つのフォルダを含んでいます。
「拡張コード引き」としているのが通常の表引き処理です。
「拡張表引き」としているのが、入力作業の補助に使えるかもしれないと思っている処理です。
その他に「組み込み例」というフォルダも作っていますが、それぞれの処理を実際の処理に組み込んだらこのようにならないか、
という内容になっています。
組み込み例には経理処理を例にしていますが、表引き関係の組み込みの実験ですから、
経理処理そのものは十分でありません。
それぞれ「サンプル」の文字を含むwfmを実行してもらえれば動きます。

課題は、
A)もっと効率的な記述の仕方はないだろうか
B)想定外の操作によって起きるエラー処理の工夫はどのようにすればいいのかになるだろうと思っています。
小さなことでも気付いていないことが多いだろうと思っていますので、ご指摘が頂けると嬉しく思います。
24703 Re:表引き表の絞り込み状態での表示と直接編集の工夫 アックン(=^・^=) 2004/02/10-15:12
記事番号24698へのコメント
沼田さん、こんにちは。公開されるのはいいことですね。
ざっと触ってみただけですが、独特のユーザインターフェイスを持っていますね。
すみませんが、操作方法がよくわかりません。ご面倒でしょうが、3種それぞれの操作方法
(入力手順など)を具体的に説明してもらえませんか。

>1)希望の条件で絞り込んだ状態で表示したい
>2)開いた表引き表を直接編集したい
>3)好みの体裁で表示したい
 上記3点をどのフォームのどの操作箇所で実現しているかも、説明を加えてくださると助かります。

>通常では無理なことですので、どうしてもその為のフォームを新しく作って、イベ
>ントなどで制御しながら表引きのように使う、という工夫をするしかないと思って
>います。

(1)は、通常の表引き表をイベントで絞り込みと解除を繰り返せばいいですが、やりたいことには適してないのでしょうか?

(2)は、表引き表を多重化してレコードを検索すれば編集できると思いますが、やりたいことには適してないでしょうか。

(3)は、桐の通用の表引き機能にプラスして、どのようなものを持たせたいのでしょうか?

>補完BBSにUpさせて頂いたものは、同じようにコードを比較して項目値の表引きを行
>うものですが、先に打ち込んだコードから引いてくるというよりも、直接項目値を
>打ち込んでコードを引いてくる、などという使い方の方が多いのではないかと思っ
>ています。
 いかすぱげてぃさん(はたして今でも、毎朝社長室でゆったりコーシー飲みながら、
芝生を眺めていらっしゃるんでしょうか...(^^;)の作といえば、たしか、
文字列を入力するたびに、検索、絞り込みして候補を表示するんですよね。
あれ?、先にコードを入力するんでしたっけ(?)。

>4)検索項目を部分一致検索で検索させたい
 ということは、今は先頭一致だけしているのですか?


24709 「拡張表引き」の狙い 沼田 2004/02/10-18:33
記事番号24703へのコメント
アックンさん、いつもありがとうございます。

Upした処理の使い方について、もう少し詳しく説明します。
>ざっと触ってみただけですが、独特のユーザインターフェイスを持っていますね。
その通りだと、自分でも思っています。色んな方のサンプルも見てみたつもりですが、使わせて頂く場合は、
ほとんどの場合ユーザーインターフェースの部分については手を加えています。
単なる"こだわり"の世界ですが....。
Upしたものは「桐V5」と互換を取ったキー設定だということが一つははっきりしておかないといけない部分だと思っています。
その上で、処理の流れを追ってみたいと思います。

★拡張表引きについて

"表引きサンプル.wfm"を使って、項目「サンプル項目」に文字列を入力することが目的です。
他の項目はダミーで、ここでは意味がありません。

入力を行う際、自分の頭の中には入れたい言葉が浮かんでいます。その言葉の一部分を入力すれば、
それが以前に入力したものであれば一覧で表示してくれて、その中から選べば作業が終了するように
できれば便利ではないかと考えました。

この処理では、頭に浮かんだ文章の一部分を、「サンプル項目」に入力します。「サンプル」という文字列を
入力したい場合には「サン」とでも入れてみる、という具合です。
Enterキーを押すことで、保存されている以前に入力した文字列の中からキーワードを含むデータの一覧を表示します。
これは部分一致検索です。

目的の文章があればEnterキーで元のフォームに戻り、「サンプル項目」への入力が完了します。
(このために入力後イベントを使っています)
なければ、新しく文章を入れていかなければなりませんので、開いている表引き表に直接行追加を行います。
この際、処理対象行になっていたデータを初期値として行追加ができるようにも工夫しました。

また、Enterキーで選択したデータを先頭行に持ってくることで次回の選択に便利なようにも工夫しました。
(「履歴整理」という一般手続きを定義しています)

さらに、入力した文字列をそのままに保存しておくだけでは部分一致検索に引っかからない場合が出てきます。
例えば省略形で検索をしようとしても無理なことは当然だからです。
その為に「キーワード」という項目を作り、省略形を登録できるようにしました。
これは表引き表が開いている段階で気が付くものですから、一旦別の処理を起こして処理するよりは気が付いた時に
処理する方が便利でしょうから、Enterキーの動作に工夫してみました。
(フォーム定義の改行方向を操作しています)

また、一覧で表示されているデータ群の中から目的の文字列を選択する方法ですが、
マウスのクリックでの選択がうまくいきませんでしたから、左端に明細行を表示するためのテキストオブジェクトを作っています。
(セレクタでも良かったんですが、セレクタの左に余白部分を作りたいという、これも単なる"こだわり"です)
一覧から選ぶ時には、目でデータを追いますから、目的のデータの左横に表示されている明細行をテンキーから
打ち込んで対象行に移動する方が便利かもしれないと思いました。その為の処理も付け加わっています。
(キーダウンイベントと&処理行を使っています)

仲間内からは、こんな細かいところまで考えなくても、という話も漏れてきています。
同時に、初心者からはキーボードからの打ち込みにも時間がかかる場合もあり、"助かる"という話も聞こえてきます。
30〜40文字数程度の文章を一度に50件程度入れる場合もありますから。
しかも、現在1500行程度のデータ数ですが、単一化してみると550件程のものですので、この処理は便利に使えていると思っています。
また、使う内にもっとこんなことが....という要求も出てきますので、自由の効くイベント処理の方が好ましいとも感じています。
でも、最も大きい理由は、「見栄え」でしょうか。
表引きの元の表を、表引きに使う前に絞り込んでおくなどの方法でも要求は満たせそうですが、
今の処理と変わらないくらいの量のイベントを書く必要があるようにも思えます。
表引き表のフォームを新たに作らなくても済むというメリットと、細かな処理をさせることが出来るというメリットを天秤にかければ、
細かな処理が出来る方が良いかな....と。

文章で説明してみると、ずいぶん長い文章を書く必要があるようです。
この他に「拡張コード引き」という処理もUpしていますが、長くなりそうですので、
こちらの説明は別の投稿としたいと思います。

24714 Re:「拡張表引き」の狙い アックン(=^・^=) 2004/02/10-19:55
記事番号24709へのコメント
沼田さん、こんばんは。
私は桐の表引き機能を使う使わないということについてのこだわりは、全くありません。

>Upしたものは「桐V5」と互換を取ったキー設定だということが一つははっきりしておかないと
 それはすぐに感じました。

>なければ、新しく文章を入れていかなければなりませんので、開いている表引き表に直接行追加
 表引き表に直にデータ登録するときは、表引き先表のデータが見えるように、表引きフォームをマウスで移動できるといいですね。
表引き先表のあちこちの項目値を見ながら表引きしたいので、表引き表には直に登録しないで、
それは閉じてから、表引き先表に戻って手入力した値を、表引き表にすぐに登録できるようにするといいですね。

>また、一覧で表示されているデータ群の中から目的の文字列を選択する方法ですが、マウスのク
>リックでの選択がうまくいきませんでしたから、左端に明細行を表示するためのテキストオブジ
>ェクトを作っています。(セレクタでも良かったんですが、セレクタの左に余白部分を作りたい
>という、これも単なる"こだわり"です)
 うまくいかないということですが、今はどうやって値を取得しているんでしょうか。
任意の明細行の値を取得するやり方は、今月だったか、この板のどこかでやりましたよね。
セレクタがないフォームは操作が難しい面がありますね。

>をテンキーから打ち込んで対象行に移動する方が便利かもしれないと思いました。その為の処理
 テンキーで入力しても何もかわらないような・・・・・・。(?)

24721 Re:「拡張表引き」の狙い 沼田 2004/02/10-22:48
記事番号24714へのコメント
アックン(=^・^=)さん、こんばんは。

> 表引き表に直にデータ登録するときは、表引き先表のデータが見えるように、表引きフォームをマウスで移
>動できるといいですね。

迷った部分です。タイトルバーを付けるだけで可能ですからいつでも修正はできますが、
これも変な"こだわり"の部分です。タイトルバーの色が変えられると良いんだけど....、という、全く変な理屈です。

>表引き先表のあちこちの項目値を見ながら表引きしたいので、表引き表には直に登録しないで、それは閉じて
>から、表引き先表に戻って手入力した値を、表引き表にすぐに登録できるようにするといいですね。

ここにはミスがあります。
表引き表を開いて、希望の文字列を見つけることができなかった場合は[ESC」で処理を中止しますが、
この時に&編集文字列を空にして入力を継続するように記述したつもりが、空になりません。記述ミスです。
また、表引き先表に手入力した文字列を見つけられなかった時には新規データとして自動的(これは強制的にです)に追加します。

> テンキーで入力しても何もかわらないような・・・・・・。(?)

これもミスです。テンキーの仮想キーコードは[96]からの番号でしたね。イベントには[48]からの番号で判断していますので、
テンキーではなくてキーボード上の数字キーでした。
利用者はノートパソコンが多いので、こちらに変更したのを忘れていました。

変な"こだわり"のせいで、セレクタを使っていません。また、クリックして処理対象行を移動しても、
その行の項目値を決定して表を閉じる処理が難しかったため、マウスから手を離してEnterキーを押す操作の仕方に抵抗がありました。
何よりも、マウスを操作しなくても良いような処理にならないか、との要望があったことが一番大きな動機です。

24759 Re:「拡張表引き」の狙い 沼田 2004/02/11-22:38
記事番号24721へのコメント
こんばんは。この件でもう少し補足させてください。

この処理の表引き表に自分自身を指定することも考えています。
Upしている処理では、"表引きサンプル.tbl"の一つの項目に"入力履歴.tbl"の項目値を複写するという動作を目的にしています。
この"入力履歴.tbl"の代わりに自分自身である"表引きサンプル.tbl"を指定する、ということです。
"表引きサンプル.tbl"の新規データなり更新データとして自分自身の表の過去のデータを複写する、ということになります。

この機能は桐の[shift+F2]に該当します。
しかし、[shift+F2]で過去に入力したデータを探すのは大変です。10レコード前くらいに入力したことがあったな、
程度の記憶ならまだしも、「確か以前に入力したような....」などという記憶では探し出すのに大変です。
この拡張表引きの表引き表に自分自身を指定すれば、過去に入力したデータの一部分だけを入力するだけで、
それを使った部分一致検索の絞り込み状態で表示してくれるので探しやすくなるのではないかと思っています。

もちろん、Upした処理の中には次回の検索に便利なように選択したデータを先頭行に置き換える機能がありますが、
これは使えなくなります。

今は、どちらがより使いやすいか、実験中です。

24785 Re:「拡張表引き」の狙い アックン(=^・^=) 2004/02/12-15:19
記事番号24721へのコメント
沼田さん> こんにちは。
>迷った部分です。タイトルバーを付けるだけで可能ですからいつでも修正はできますが、これも変な"こだわ
>り"の部分です。タイトルバーの色が変えられると良いんだけど....、という、全く変な理屈です。

ウィンドウの任意の位置をドラッグ&ドロップするイベントを、見本をアップしました
このイベントは、数年前にいかすぱげてぃさんに教えてもらったものです。
オブジェクトを動かすなら(オブジェクトコマンドを使って)スムーズに動かせるのですが、
ウィンドウそのものとなると、重くて少々ぎくしゃくしますけど、ま、試してみてください。

使用上の注意:沼田さんのイベントが何らかの原因でエラーが出たとき、フォームを閉じる手だてをよく考えておかないと
困ったことになります。バーを残しておいてください。(社内で試す段階でもそうしてください。)

見本フォームを2個用意しました。おそらく同時に起動しても動くと思います。
ぼくがこの処理をふだん使用するときには、メニューフォームで固有変数を宣言するか、変数ファイルを読み込んでいるの
ですが、今回はアップしたフォームで宣言してあります。(固有変数)

参考になれば幸いです。(業者やってる人は無断で使っちゃだめだよ!(^^;)
24790 Re:「拡張表引き」の狙い 沼田 2004/02/12-17:53
記事番号24785へのコメント
アックンさん、ありがとうございます。大変参考になりました。

少し時間が取れたので実験中の処理に組み込んでみました。
アップしていただいたイベントはフォーム全面を使っているオブジェクトに定義してあるんですね。
そのため、「ウィンドウの任意の位置」というのが実現されていると理解しました。

しかし、実験中の処理ではオブジェクトを置いている以外のスペースが少ないため、フォームヘッダ部に定義してみましたが、
確かにスムーズには動きませんでした。それは、ちょっと実用にはならないかな....、くらいに。

試しと思って、画面移動用のオブジェクト(テキストですが)を作って、これに定義したところ、
今度は実用レベルの動きをしてくれるようになりました。
ヘッダ部への定義とテキストオブジェクトへの定義で動きが異なってくることは理解できませんが、
作ったオブジェクトをヘッダ部全体に広げてソースを空白にしたところ、さもヘッダ部に定義したように"見え"ます。

これなら、と言うことで、使わせていただくことにしました。(仲間内だけでの利用ですから....)有り難うございました。

>使用上の注意:沼田さんのイベントが何らかの原因でエラーが出たとき、フォームを閉じる手だてをよく考えておかないと
>困ったことになります。バーを残しておいてください。(社内で試す段階でもそうしてください。)

全く....、自分でも懲りていないな、と思います。
特に試行の段階でもあるのにバーがなくて閉じられないというのは、「強制終了」しか手だてがなくなると言うことですから。
これも単なる「こっちの方がすっきりするかも」という自己満足だけの世界です。
改めようと思います。

24793 Re:「拡張表引き」の狙い アックン(=^・^=) 2004/02/12-18:26
記事番号24790へのコメント
沼田さん>
>しかし、実験中の処理ではオブジェクトを置いている以外のスペースが少ないため、フォームヘッダ部に定義してみましたが、確かに
>スムーズには動きませんでした。それは、ちょっと実用にはならないかな....、くらいに。
 私の場合は、ヘッダ・明細部・フッタのどこであっても、いくつ配置しても、動作する速度は変わりませんが。(?)

24816 Re:「拡張表引き」の狙い 沼田 2004/02/13-09:58
記事番号24793へのコメント
アックン(=^・^=)さん、こんにちは。

> 私の場合は、ヘッダ・明細部・フッタのどこであっても、いくつ配置しても、動作する速度は変わりませんが。(?)

違いは、何らかのオブジェクトを配置して、それに定義しているかどうか、かもしれません。
僕の場合はフォームヘッダ部もオブジェクトには違いないだろう、ということで直接定義してみました。
この時の動作が、マウスカーソルの動きを全く検知しない訳ではありませんが、"見失ってしまう"ような動きをします。
しかし、例えばラベルオブジェクトを作ってそれに定義してみれば、これはぎこちないとしても見失うようなことはないようです。

1.06GHzのCPUを256RAMで動かしていることが影響しているんでしょうか。
それとも、オブジェクトという概念が、ラベルやテキストなどとフォームヘッダ部やフッタ部などとは違うのかもしれません。

また、手が空きましたら教えてください。

※フォームヘッダ部へのイベント定義では、マウスインアウトイベントは使えません。
 このイベントは単にマウスカーソルの画像を変えているだけだと理解していますが、こんなところが影響しているとも思えませんが....。

24817 Re:ウィンドウをドラッグ&ドロップするイベント アックン(=^・^=) 2004/02/13-10:29
記事番号24816へのコメント
沼田さん>
話題が表引きと離れてしまいましたね。(^_^)

基本をふたつ。
1)ピクチャオブジェクトを使います。
2)イベントはファミリに設定します。

ぼくはピクチャをオブジェクト属性でグラデーションに設定して、無機質な感じにしていますが、使う人が好きな画像を貼れば楽しいですよ。
2個の見本フォームは、グラデーションのかけ方とピクチャの配置個数、位置が異なるだけです。
ま、急がないでやってください。
24733 「拡張コード引き」の狙い 沼田 2004/02/10-23:31
No24698で触れた「拡張コード引き」の狙いと操作方法について補足します。

例えば、使用中の表に職員氏名を入力したい場合、多くは別の表に職員コード表のようなものが作られていますから、
使用中の表の[コード]項目にコードを入力し、表引き機能によって氏名を[氏名]項目に引いてくる、という使い方が一般的だと思います。

しかし、職員氏名を入力したい時に自分の頭の中に浮かんでいるのは職員の氏名でありコードではありません。
一方でコードは重要なリンク用の項目になっている場合が多いので登録しない訳にはいきませんので、
[コード]も[氏名]も共に入力が必要です。
だったら、[氏名]を入力して[コード]を引っ張って来ようとしたの最初でした。
これは表引きの比較項目・検索項目の工夫で十分可能です。

この時に、コードを覚えてしまっている職員もいますし、フルネームを入れるのも面倒だし、
と、わがままな要求を持ってしまいました。

Upした「拡張コード引き」では、"コード引きサンプル.wfm"を使って[サンプル項目]欄に入力すれば
[サンプルコード]欄にコードを引っ張ってくるという処理をしますが、[サンプル項目]欄に入力する値はコードでも良いし、
文字列の一部分でも良いし、もちろんフルネームでも構わない、という仕様になっています。
入力した値が表引きする表に登録されている値と完全一致すれば無条件にコードを引っ張ってくるし、
部分一致で該当すれば該当するデータを絞り込んで一覧表示し、その中から選択する、という動作をします。

「拡張表引き」の場合と違い、コード表が作られているような表の編集の必要性は少ないと思っています。
表引きをしながら変更の必要を感じるというのは、つまり、その表そのものが不完全ということにもなってしまうかもしれませんから。
このことから、「拡張表引き」でメリットとしてきた直接編集はこの場合では重要視していません。
それよりも、表引きする表を自由にレイアウトできることがメリット、と思っています。

操作感覚は表引き機能と同等で、さらに表のレイアウトや構成を好みの状態にできることは、
レイアウトの工夫次第では魅力のあるものになるかもしれないと思っています。

この例として「組み込み例」をUpしていますが、この説明も長くなりそうですので、別に投稿したいと思います。


戻る