過去の桐井戸端BBS (桐ver.9)
26213 入力用サブフォームを重ねて入力の為に表示される項目を増やしたい。 しぼうかん 2004/05/09-22:25
またお知恵をお貸し下さい。

[A][B][C][D][E][F]の項目を持つABCDEF.tblがあります。

これらの項目を[A]→[B]→[E]→[F]→[C]→[D]→次の行の[A]→・・・、
または[A]→[B]→[C]→[D]→[E]→[F]→次の行の[A]→・・・、
のどちらかの順(どちらでも良い)で入力したいと思ってフォームを
作りましたが、全ての項目を表示するには領域が不足します。

そこで[A],[B],[E],[F]を持つABEF.wfm(編集表=ABCDEF.tbl)を作り、
サブフォームとして[C],[D]を表示する為のCD.wfm(編集表=ABCDEF.tbl)を作り、
ABEF.wfmの[E]と[F]の表示部分に重ねる様に配置しました。

さらに以下のイベントファイルに以下の様なコマンドを記述しましたが
行追加モードでABEF.wfmからCD.wfmへカーソルが移る時に一段下の行に
カーソルが移動してしまいます。どうすれば良いのでしょうか?
ちなみに行訂正モードで入力する場合はうまく行きます。

ABEF.kev

手続き定義開始 B::ソース値更新()
メソッド呼び出し @フォーム.更新モード取得(&更新モード)
&行番号=#行番号
オブジェクト操作 @CD{画面表示=1},@CD項目名{画面表示=1}
編集表 &CD
ジャンプ 行番号=&行番号
メソッド呼び出し @CD.@C.フォーカス設定()
メソッド呼び出し @CD.@フォーム.更新モード設定(&更新モード)
手続き定義終了

CD.kev

手続き定義開始 D::ソース値更新()
メソッド呼び出し @フォーム.更新モード取得(&更新モード)
オブジェクト操作 ハンドル=&hwindow,@CD{画面表示=0},@CD項目名
{画面表示=0}
メソッド呼び出し ハンドル=&hwindow,@E.フォーカス設定()
メソッド呼び出し ハンドル=&hwindow,@フォーム.更新モード設定(&更新モード)
手続き定義終了

とりあえずファイルをUPしておきました

26214 別解として 佐田 守弘 2004/05/09-23:29
記事番号26213へのコメント
しぼうかんさん
アップロードされたものの添削は他の方にお任せするとして、ここでは別解のアイデアを提示します。

●明細行を2段にする
多分このフォームは一覧表フォームないし伝票フォームだろうと思います。
サブメニューの表示・非表示の切り替えで表示するテキストオブジェクトを切り替えるのは1つの方法ではあります。
しかし、最も単純には、明細行を2段にする方法が案外と有効です。
上段に[A][B][C][D]の4つのテキストオブジェクトを下段に[E][F]の2つのオブジェクト
あるいは上段下段にそれぞれ3つずつテキストオブジェクトを設けても構いません。
2段にする事で、画面に表示される行数は半分になります。しかし、1レコードの全項目が
同時に表示されるので、案外と使い良いかと思います。

●サブフォームを切り替える方法では
現在はメインフォーム上に一部のオブジェクト、そして残りはサブフォームに設けている様ですが、
両方ともサブフォームにしてしまう方が編集対象行の移動などで簡単かも知れない様にも思います。
つまり、メインフォームにはID項目の様なものを1項目だけ作り、これは非表示にします。
(作らなくてもよいのかも知れませんが、試しておりません)

サブフォームは、もし今と同じ様な形にするのであれば、[A][B][C][D]を表示する
サブフォームabcd.wfmと、[E][F]を表示するサブフォームef.wfmの2つを作り、両方とも
メインフォームに貼り付けます。この際に、abcd.wfmを背面に配置し、前面に配置する
ef.wfmは非表示とします。後はお解りだろうと思いますので省略します。

この場合、リンク関係をきちんと設定しておけば、メインフォームを介して2つのサブフォームの編集対象行が同期するはずなので、
ジャンプコマンドによる操作は要らないと思います。

●現在の方法について
質問文として書いてある範囲で気がついた点を述べます。
・行番号取得と行ジャンプ
この形式で試した事がないので外しているかも知れません。
行番号を取得してジャンプコマンドで行移動をしていますが、果たしてこれが必要かどうかです。
これらのコマンドなしにも、多分、編集対象行は同期するはずだと思うのですが。

・編集表
 >編集表 &CD
複数の表を編集しているわけではないので、このコマンドは要らないはずだと思います。
現在編集中の表を編集対象表としてし直しているだけなので、エラーにはなりませんが、
更新モードの点で何らかの弊害が起きているかも知れません。

確認していないので何とも言えませんが、上記の2点の部分を削除して試してみてはどうでしょうか。

佐田守弘(KS-00119)
26217 Re:入力用サブフォームを重ねて入力の為に表示される項目を増やしたい。 悲しげ 2004/05/10-01:12
記事番号26213へのコメント
どもっ、しぼうかんさん
佐田さんの方法にちょっと似ていますが、次のような感じにすれば
メイン&サブを使わないでも比較的シンプルに実現可能です。
(我が桐はV9でV8用のサンプルは作れないのでテキストで書きます)
(実は【多遊】さんとこの列固定モドキがこの考え方だったりする)

テキスト・ラベルともC・Dの上にE・Fを重ねます。
(オブジェクトのリスト上ではABCDEFの順に並んでいる必要あり)
で、テキスト・ラベルともC・Dの「画面表示する」のチェックを外しておきます。
使うイベントとしては「キーダウン」とBCDEテキストの「ソース値更新」です(私好みばっかし)。(^^;)
その上で、kevの記述は
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
名札 メイン
 var 固有,長整数{&キー,&Fキー}



手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,長整数・・・・
 &キー=&仮想キーコード,&Fキー=&フラグ
手続き定義終了

手続き定義開始 tB::ソース値更新()
 if(&キー=13 .or &キー=9 .or (&キー=39 .and &Fキー=8))
  オブジェクト操作 @aE.画面表示="0",@aF.画面表示="0",@aC.画面表示="1",@aD.画面表示="1" \
          ,@tE.画面表示="0",@tF.画面表示="0",@tC.画面表示="1",@tD.画面表示="1"
 end
手続き定義終了

手続き定義開始 tD::ソース値更新()
 if(&キー=13 .or &キー=9 .or (&キー=39 .and &Fキー=8))
  オブジェクト操作 @aE.画面表示="1",@aF.画面表示="1",@aC.画面表示="0",@aD.画面表示="0" \
          ,@tE.画面表示="1",@tF.画面表示="1",@tC.画面表示="0",@tD.画面表示="0"
 end
手続き定義終了

手続き定義開始 tC::ソース値更新()
 if((&キー=9 .and &Fキー=4) .or (&キー=37 .and &Fキー=8))
  オブジェクト操作 @aE.画面表示="1",@aF.画面表示="1",@aC.画面表示="0",@aD.画面表示="0" \
          ,@tE.画面表示="1",@tF.画面表示="1",@tC.画面表示="0",@tD.画面表示="0"
  method @tB.フォーカス設定()
 end
手続き定義終了

手続き定義開始 tE::ソース値更新()
 if((&キー=9 .and &Fキー=4) .or (&キー=37 .and &Fキー=8))
  オブジェクト操作 @aE.画面表示="0",@aF.画面表示="0",@aC.画面表示="1",@aD.画面表示="1" \
          ,@tE.画面表示="0",@tF.画面表示="0",@tC.画面表示="1",@tD.画面表示="1"
  method @tD.フォーカス設定()
 end
手続き定義終了
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
テキスト系オブジェクトは区別のため「t」の接頭辞を付けています。
ちなみにラベル・テキストともCD系とEF系をそれぞれファミリにすると
記述が簡素化できます。
[Shift]+[Tab]での挙動不審がありそうですが、未究明です。

26225 Re:入力用サブフォームを重ねて入力の為に表示される項目を増やしたい。 ONnoji 2004/05/10-16:35
記事番号26213へのコメント
>とりあえずファイルを補完BBSにUPしておきました。
> ABEF.wfmをダブルクリックで入力開始します。

しぼうかんさん、こんにちは。

さっそく、試させていただきました。

これはあくまでも私の勝手な感想ですが…
サブフォームをこのように利用するのは、苦しいですね。

元のフォームを勝手に改造したものをUPしました

よろしければ、ご参考にしてください。

<追伸>

イベントを作るというよりも、
パズルを解いているようで、途中で頭がコンガラガッテシマイマシタ。
ということで…
ABCDEF.wfm は
動きはそこそこですが、細かいところは未完成です。

26233 解決しました1 しぼうかん 2004/05/10-19:02
記事番号26214へのコメント
佐田さん、早速の回答ありがとうございました。

>●明細行を2段にする

この方法は最初に考えたのですが、実際のCD.wfmやABEF.wfmではもっと多くの項目があり、明細行は既に2段になっています。

これをさらに4段表示にすると入力中の項目の項目名がわかりずらくなってしまうのでやめました。

>●サブフォームを切り替える方法では

ID.wfm(編集表=ID.tbl)を作り試して見たのですが、なぜかサブフォーム間の
カーソル移動時に、投稿したのと同じ現象が出てうまく行きませんでした。
多分自分のやり方が悪かったんだと思います。

>●現在の方法について

該当のコマンドを削除して試してみましたが、挙動はまったく変わりませんでした。
つまり必要の無いコマンドだった様です。



なお、今回は悲しげさんに教えて頂いた方法で無事解決しました。

26234 解決しました2 しぼうかん 2004/05/10-19:06
記事番号26217へのコメント
悲しげさん、いつもお世話になっています。

今回は泥沼に引きずり込む事無く、一発でうまく行きました。(^^)v
回答はシンプルな方法でフォーム間でフォーカスを移動させる時の
更新モードの設定方法で悩む不要も無く、とても良いアイデアです。
ありがとうございました。


PS

>実は【多遊】さんとこの列固定モドキがこの考え方だったりする)

実はかなり以前にDLさせて頂いた事があるのですが、美術鑑賞の様な物で
「ホ〜ッ」と感心しただけで何も学習していませんでした。
教えて頂いたこの方法は他の場合にもけっこう応用が効きそうです。

26235 解決しました3 しぼうかん 2004/05/10-19:20
記事番号26225へのコメント
ONnojiさん、回答とファイルのUPありがとうございます。

今回の質問は悲しげさんに教えて頂いた方法で
無事解決しました。

但し、せっかく作って頂いたファイルなので
さっそくDLして試してみました。

すると悲しげさんに教えて頂いた方法と
同じくバッチリうまく行きました。

悲しげさんの方法はとてもシンプルでしたが、
ABCDEF.kevはコマンドの内容が高度で、理解に時間がかかると思います。

しかしたぶんプラスαの何か良い点があると思うので
じっくり勉強します・・・。

・・・といいつつ横着して聞いてもいいですか?

ONnojiさんの方法と悲しげさんの方法ではフォームを
操作する時の挙動にどんな違いが考えられるのでしょうか?


26239 Re:…といいつつ横着して聞いてもいいですか? ONnoji 2004/05/10-20:29
記事番号26235へのコメント
>ONnojiさんの方法と悲しげさんの方法ではフォームを
>操作する時の挙動にどんな違いが考えられるのでしょうか?

しぼうかんさん、こんばんは。

どんな手法を使っても動けばOKですね。

誰でもこだわりがありますよね。(^^ゞ

私のこだわりは…
今回のような「列固定もどき系」の場合には、

・[キーダウン]イベントでキーを調べません。
・[フォーカス取得]イベントで対応します。

というものです。

今回はしぼうかんさんのフォームの内容に興味があったので作ってみた次第です。

具体的には不明ですが…挙動の違いはあると思いますよ。

<追伸>

自分で ABCDEF.wfm を作っておきながら変な話ですが、
あれは実験的なもので未完成ですから、参考に程度にしてください。


26244 Re:…といいつつ横着して聞いてもいいですか? しぼうかん 2004/05/10-22:36
記事番号26239へのコメント

>私のこだわりは…
>今回のような「列固定もどき系」の場合には、
>
>・[キーダウン]イベントでキーを調べません。
>・[フォーカス取得]イベントで対応します。
>
>というものです。


たぶん深〜い訳があるのでしょうが最初の投稿内容から離れてしまうので
これで質問は止めにしておきます。
ONnojiさん、横着質問に答えて頂きありがとうございました。

26245 Re:Re:…といいつつ横着して聞いてもいいですか? 悲しげ 2004/05/11-00:22
記事番号26244へのコメント
>最初の投稿内容から離れてしまうので
>これで質問は止めにしておきます。

……と云いつつ、コメントを続けてしまいますが、(^^;)
え〜、この手の処理(いわゆる列固定モドキ)について、「キーダウン」イベントを使うのは、我ながら邪道だと自覚しています。(^^;)
いえね、実は私も、かなり初期に「フォーカス」系のイベントで挑戦してみたのですよ。
でも、ひどい泥沼に落ち込んでしまって、結局は断念してしまいました。
その時の最大の理由は「フォーカス*」イベントからだと、
次のフォーカスを指定できなかったことだった記憶があります。
ま、発想が貧困と云うか、ドツボで枯渇してしまったのでしょうね。
で、苦肉の代替策として飛びついたのが「キーダウン」イベント。
これは、確かに条件判断がひどく細分化されるキライはありつつも、
挙動がそれなりに「読める」ので、判りやすいことは判りやすかったからです。
で、最終的には結果オーライと云う訳で、よくも悪しくも。
でも、苦肉の割にはとても便利なもんで……。(^^;)

26249 Re:Re:…といいつつ横着して聞いてもいいですか? ONnoji 2004/05/11-09:58
記事番号26245へのコメント
悲しげさん、こんにちは。

今回の私の感想ですが…

しぼうかんさんが提示されたフォームは、
2項目単位スクロールと呼んだらいいのだろうか?
さらに両端列固定みたいなまで加わっていて、
[フォーカス取得]イベントで制御するのは非常に大変でした。

もしも、左側列固定だけ+1項目単位でスクロールならば、
拙作の「表もどき」で簡単に出来るのですが…(T_T)

>これは、確かに条件判断がひどく細分化されるキライはありつつも、

悲しげさんのこのご意見には私も同感です。

なお、最近私はテキストボックスにキャレットがあるときに、
[キーダウン]イベントを使うこと試していますが、
やはり条件付けが大変でありまして…よく条件を付け忘れるのですね(^^ゞ

26250 Re:Re:Re:…といいつつ横着して聞いてもいいですか? 悲しげ 2004/05/11-10:48
記事番号26249へのコメント
どもっ、ONnojiさん、脂肪肝さん
誤読はないとは思いますが、

>>いえね、実は私も、かなり初期に「フォーカス」系のイベントで挑戦して
>>みたのですよ。でも、ひどい泥沼に落ち込んでしまって、結局は断念して
>>しまいました。

ここで云う「かなり初期」とは、今回の脂肪肝さん関連ではなく、多分5年くらい前のことを指しています。
ま、その後もさほど進歩はしていないのですけど。(^^;)

実は今回の補完108もそうなんですが、ONnojiさんの "INF Tools" は未解析のままだったりします。
そのうち気を入れて勉強させていただこうとは思いつつ・・・・。<(_ _)>

26253 Re:Re:Re:Re:…といいつつ横着して聞いてもいいですか? ONnoji 2004/05/11-11:48
記事番号26250へのコメント
悲しげさん、こんにちは。

今回の提示された「しぼうかん」さんのフォームは複雑でして…(^^ゞ
実はアップしたものは途中で投げ出した愚作なんですよ。
ですから、あまり参考にならないと思います。
誠におそれいります。m(__)m

なお、拙作の INF Tools は一応そこそこ動きますが、
作った本人も内容をすでに忘却しておりまして…(^^ゞ
できれば、ブラックボックスということでお願いできれば嬉しいです。

拙作の内容を気を入れて見ていただくとお恥ずかしいので…(^^ゞ

26267 Re:Re:Re:Reのおじさん。 しぼうかん 2004/05/11-20:59
記事番号26253へのコメント
悲しげさん、ONnojiさん、こんばんは.

今回の質問をする前にフォームでの列固定システムのINF Toolsを
参考に出来ないかとイベントファイルを覗いては見ました。

しかし悲しげさんですら気を入れなければいけないほどのシステムなので
すぐに自分のレベルでは理解・応用は無理と諦めてしまいました。
遠い将来に応用出来るようになりたいものです。

というかK3さんこの機能を簡単に使えるようにして
標準装備してくれないかな。
26271 Re:Re:Re:Re:Reのおじさん。 ONnoji 2004/05/11-22:08
記事番号26267へのコメント

>今回の質問をする前にフォームでの列固定システムのINF Toolsを
>参考に出来ないかとイベントファイルを覗いては見ました。
>遠い将来に応用出来るようになりたいものです。

しぼうかんさん、こんばんは。

私( ONnoji )は宣伝と思われるような事は書きたくないのですが…
しかし、拙作( INF Tools )の話題になりましたのでご返事いたします。

しぼうかんさんのフォームは、

・両端列固定
・2項目単位スクロール

という条件です。
※アップしたものはあえなく挫折していますが…(/_;)

しかし、拙作は、

・左列固定
・1項目単位スクロール

という条件です。(^^ゞ

拙作はこの条件で誰にでも簡単にフォームを作れるということを意図したものです。
詳しくは saiさん作の入門ガイドをご参照ください。
そのために、拙作は改造を前提として公開したものではありません。
※もちろん改造・応用していただいてもOKですが、かなり困難だと思います。
既に書いたように…
作者としては、拙作はブラックボックスとして使っていただきたいと思っています。

>というかK3さんこの機能を簡単に使えるようにして
>標準装備してくれないかな。

このご意見に私もまったく同感でありますが、
フォームに表または表の機能を埋め込むということは、
かなり難しいのではないかと思っています。

もちろん、K3殿には頑張っていただきたいと思っていますが…
私( ONnoji )はとっても気が短いので、
自分に必要なものは自分で用意するというスタイルにならざるを得ません。

あ〜あ、拙作に関して長々と書いてしまいました。
作者のたわごとと思っていただければ幸いです。
すいませんでした。

戻る