過去の桐井戸端BBS (桐ver.9)
30485 表引きのようにサブフォーム表示したい みつぐ 2005/07/12-17:23
OS Windows XP 桐Ver.9を使用しています。
宜しくお願いします。

フォーム編集で[a]と言う項目に表引き定義をしてありますが、▼を押して
表引き表が開きますが、[a]と言う項目を編集状態になったとき自動的にサブフォーム表示できないでしょうか?
又、表示になるときは、[a]項目を塞がない位置に表示できる方法をご教授頂けませんでしょうか。

追伸
時間計算について質問した時は、
たゆー
悲しげ
うにん
T.Samura
大変お世話になりました。問題は解決いたしました。ありがとう御座いました。
30491 Re:表引きのようにサブフォーム表示ができないか 佐田 守弘 2005/07/13-08:14
記事番号30485へのコメント
みつぐさん
●表引き風にフォームを表示
こちらはそれ程難しくありません。
まず値を引き渡すための変数(ここでは&a)を定義しておきます。
[a]のテキストの編集開始イベントで表引き風に使うフォームを呼び出します。
フォームが閉じたら、項目値代入コマンドで項目値に書き込みます。
---------------------------------------
名札 メイン
変数宣言 共通{&a}

手続き定義開始 テキスト_a::編集開始()
 フォーム呼び出し <呼び出すフォーム>
 項目値代入 [a]=&a
手続き定義終了
---------------------------------------
表引き風に使うフォームの方は、自身を閉じるためのコマンドボタン
「閉じる」(機能名:閉じる)を作っておきます。
Enterキーのキーダウンイベント(仮想キーコードが13)で、その時の項目値を
&aに代入します。そして、閉じるボタンを押してフォームを閉じます。
-------------------------------------------------------
手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・(後ろは省略)
 ケース開始
  ケース (&仮想キーコード=13)
   代入 &a=[A]
 メソッド呼び出し @閉じる.実行()
 ケース終了
手続き定義終了
-------------------------------------------------------

●項目を隠さない位置に表示
これは案外と面倒です。表引きの変わりにフォームを表示するのは、
ある程度大きなフォームを表示したいためで、元の入力項目を隠さないといったことは考えた事がありません。

実現するには、[a]のオブジェクトが今、画面上のどの場所(ピクセル単位での
座標)に表示されているかの情報を取得しなければならないのですが、その方法がちょっと見当たりません。

佐田守弘(KS-00119)

30492 Re:表引きのようにサブフォーム表示ができないか うにん 2005/07/13-09:05
記事番号30491へのコメント

>●表引き風にフォームを表示
>こちらはそれ程難しくありません。

「リストの種別:モーダルフォーム」というのがあるのでそれを使えばいいのでは?

>[a]のテキストの編集開始イベントで表引き風に使うフォームを呼び出します。

「編集開始」は「このイベントハンドラ内でウィンドウを作成してはいけません」となっています。
たぶん、エディタの画面が壊れるからというだけで、
この場合にはエディタで入力しないので問題ないような気もしますが。

>●項目を隠さない位置に表示
>これは案外と面倒です。表引きの変わりにフォームを表示するのは、ある程度
>大きなフォームを表示したいためで、元の入力項目を隠さないといったことは
>考えた事がありません。

これから入力する項目を表示する意味がわかりません。
既存値を見たいなら、表示するフォームに入れておけばよさそうだし。

30494 Re:表引きのようにサブフォーム表示ができないか 原山 正洋 2005/07/13-14:39
記事番号30485へのコメント
みつぐさん こんにちは
クリックした場所を知るには、マウス左クリック イベントあたりがよいでしょう。
項目[a]以外にもある場合には、
メインフォームのファミリー「位置取得」で次のように設定します。

手続き定義開始 位置取得::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
&x=&マウス位置[1],&y=&マウス位置[2]
手続き定義終了

次にご自分の環境に合う場所で
フォーム呼出し "サブフォーム"
このサブフォームで

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
&yy=#PointToDot( &y/20+15),&xx=#PointToDot(&x/20-20)
/*マウスクリックの場所からフォームを開く位置を設定*/
ウィンドウ位置 設定, &hwindow,位置=(&xx,&yy)
手続き定義終了

#PointToDotの数字は私の環境でのものです。
適当に変更してください。

30495 Re:表引きのようにサブフォーム表示ができないか ONnoji 2005/07/13-16:51
記事番号30485へのコメント
みつぐさん

>フォーム編集で[a]と言う項目に表引き定義をしてありますが、
>▼を押して表引き表が開きますが、
>[a]と言う項目を編集状態になったとき自動的にサブフォーム表示できないでしょう
か?

もしも、「サブフォーム表示」と表現されているものが、「表引きの画面」のことだとすれば…

[a]をソースにしているテキストボックスに「入力支援ボタン」を作って、

[選択値リスト]→ 表引きが設定されている項目名または項目番号を指定
[リストの種別]→ 表引き項目
[自動表示]  → 常に表示

と、「入力支援ボタン」を設定すれば、自動的に「表引きの画面」が出ると思いますが…

もしも、「入力支援ボタン」を作らないに場合は、Alt + ↓ キーで「表引きの画面」が出ると思いますが…

きっと、外していますね。(^^ゞ
30496 Re:表引きのようにサブフォーム表示ができないか 原山 正洋 2005/07/13-19:29
記事番号30495へのコメント
>[a]をソースにしているテキストボックスに「入力支援ボタン」を作って、
>
>[選択値リスト]→ 表引きが設定されている項目名または項目番号を指定
>[リストの種別]→ 表引き項目
>[自動表示]  → 常に表示
>
>と、「入力支援ボタン」を設定すれば、自動的に「表引きの画面」が出ると思います
>が…
>
私はどちらであっても採用しません。

フォームで呼び出せば、それこそその表が100項目あれば
最大99項目の値を一度に取得できる
このメリットは計り知れません。
ゆえに私は、ほとんどの場合表引きは使いません。
どちらでも実行時間は体感的に変わらないようになった
現況では・・・・

30497 Re:表引きのようにサブフォーム表示ができないか ONnoji 2005/07/13-20:32
記事番号30496へのコメント
原山 正洋さん

>私はどちらであっても採用しません。

私は次に書いた仮定から、

【仮定】
>もしも、「サブフォーム表示」と表現されているものが、「表引きの画面」のことだと
>すれば…

「表引き」だった場合のことを、少し書いただけなんですけれどね。

質問内容がメイン&サブフォームとも、モーダルフォームとも判然としないものですから…(@_@)

>フォームで呼び出せば、それこそその表が100項目あれば
>最大99項目の値を一度に取得できる
>このメリットは計り知れません。
>ゆえに私は、ほとんどの場合表引きは使いません。

当然のことながら、「表引き」を使うか否かは、使う人それぞれの自由ですね。(^^v

<追伸>

ところで、元の質問とは全く関係ないことですが…

これはあくまでも、私( ONnoji )の個人的な好みの問題なのですが、
私は「表引き」並びに「表引き関数( )」は一切使用していません。
理由は聞かないでくださいね。(^^ゞ
30498 Re:表引きのようにサブフォーム表示ができないか みつぐ 2005/07/13-21:57
記事番号30495へのコメント

ONnojiさん
こんばんは、みつぐです。「入力支援ボタン」と言うのがあることを忘れておりました。
[a]と言う項目に移ると表が開くようになりました。ご教授有り難う御座いました。
 ついでと言っては失礼ですが、表引きで開く表の大きさをユーザー指定できる方法はあるのでしょうか?
例えば、項目名は2つ、行数が25有るとすれば、縦幅・横幅を指定できるのでしょうか?
ご教授願います。
30499 Re:表引きのようにサブフォーム表示ができないか みつぐ 2005/07/13-22:12
記事番号30491へのコメント

佐田守弘さん
こんばんは、みつぐです。ご教授ありがとう御座いました。
イベントでやってみたのですが、上手く作動しません。なにぶん、イベント定義したことが
なく、佐田守弘さんのコピーして自分のホームに該当するよう訂正したつもりなんですが、
&仮想キーコード,・・(後ろは省略)の所からエラーになってしまいます。
大変申し訳ありませんが、省略なしで教えていただきたいと思います。
どうかよろしくお願いいたします。
また、イベントに定義した内容を記入した方がよろしいのでしょうか。

30500 イベントハンドラはコピーしても動作しません 佐田 守弘 2005/07/13-22:30
記事番号30499へのコメント
みつぐさん

 >イベントでやってみたのですが、上手く作動しません。なにぶん、イベント定義したことが
 >なく、佐田守弘さんのコピーして自分のホームに該当するよう訂正したつもりなんですが、
とのことですが、イベントハンドラは提示したものをコピーしてもそのままでは動作しません。

自分で新たに作って下さい。と言っても、難しい話ではありません。

 |手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・(後ろは省略)
の部分でいえば、フォームの定義画面でフォームの余白にフォーカスを置いた状態で、
オブジェクト属性のダイアログを表示すると、フォームのオブジェクト属性が表示されます。
この状態で[イベント]のタブを開き、左側にある「キーダウン」イベントをダブルクリックして下さい。

すると、イベントファイル(イベントファイルが指定してある前提)が開き、
 手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・

 手続き定義終了
が作られます。既に作られているなら、その手続きが表示されて、編集状態になります。
この部分だけは、必ず上記の手順で作って下さい。
そして、私が提示したコマンドは、この2つの手続き定義開始〜手続き定義終了の間の
行にコピーして下さい。

そしてこの操作によって、キーダウンイベントのチェックボックスにチェックマークが入ります。
単にコピーしたのではこのチェックマークが付かないので、イベントとして動作しません。

佐田守弘(KS-00119)
30501 Re:表引きのようにサブフォーム表示ができないか 佐田 守弘 2005/07/13-22:34
記事番号30492へのコメント
うにんさん

 >「リストの種別:モーダルフォーム」というのがあるのでそれを使えばいいのでは?
その方法もありそうですね。実の所、今まで使った事がありません。

 >「編集開始」は「このイベントハンドラ内でウィンドウを作成してはいけません」と
 >なっています。
確かにその通りです。コメントを書く前に気になってはいたのですが、実際に試してみても、
特に問題は起きない様ですね。

佐田守弘(KS-00119)
30502 表引きパネルの大きさ指定 佐田 守弘 2005/07/13-22:45
記事番号30498へのコメント
みつぐさん
 >表引きで開く表の大きさをユーザー指定できる方法はあるのでしょうか?
確かだめだったと思います。
但し、表示されたパネルの横幅をマウスでドラッグして延ばす事は可能です。

佐田守弘(KS-00119)
30503 「表引き」ウィンドウは自動設定のようです ONnoji 2005/07/13-23:12
記事番号30498へのコメント
みつぐさん、こんばんは。

ONnojiです。

「表引き」の場合は自動設定のようですよ。
当該フォームが開いている間は、「表引き」ウィンドウの大きさ等は保持されるようですね。

私は「表引き」を使用する機会がないので、これ以上は分かりません。(^^ゞ

<長い蛇足>

>フォーム編集で[a]と言う項目に表引き定義をしてありますが、▼を押して
>表引き表が開きますが、[a]と言う項目を編集状態になったとき自動的にサ
>ブフォーム表示できないでしょうか?又、表示になるときは、[a]項目を塞
>がない位置に表示できる方法をご教授頂けませんでしょうか。

上に引用したように冒頭の質問で、
>サブフォーム表示できないでしょうか?
とありましたね。

私的には、この[サブフォーム]という表現がトホホ的に超難解でした。(@_@)

本当に[サブフォーム]ならば[メイン&サブフォーム]形式のフォームを想起します。(^^v
しかし、[表引き]の代用としては不自然、つまり変な感じがします。(>_<)

そこで、推理を進めて、[モーダルフォーム]なのかな〜??????(-_-)
と考えるのが、ごく自然な帰結だろう思います。

従って、[モーダルフォーム]に関しては、
佐田氏、うにん氏、原山氏が回答をされていますので、そちらをご参照ください。

しかし、私( ONnoji )は相当に天邪鬼な性格の持ち主なので、
ひょっとして[モーダルフォーム]ではなくて普通の[表引き]と考えてみました。
ただそれだけです。(^^ゞ

「モーダルフォーム」しても、「表引き」しても、
どちらにしても、便利に使えればそれで良いと思いますよ。(^^v

30504 Re:表引きのようにサブフォーム表示ができないか しぼうかん 2005/07/13-23:28
記事番号30498へのコメント
みつぐさん、こんばんは.

あまり格好良くはないですがこういう方法はどうですか?

桐が作り出す表引き画面では無くて、表引き用のサブフォーム
(さぶ.wfm,オブジェクト名=さぶ)を作り、呼び出し元のフォーム
(めいん.wfm)に貼り付ける。(※画面表示するのチェックは外す)

そして左クリックイベントか何か希望のイベントで
オブジェクト操作 ハンドル=&hwindow,@さぶ{画面表示=1}
というコマンドでさぶ.wfmを表示させるという方法もあります。

この方法だと一応表引き用のフォームの位置も形も自由に決められます。


30505 本気でサブフォーム表示 ONnoji 2005/07/13-23:40
記事番号30504へのコメント
しぼうかんさん

>あまり格好良くはないですがこういう方法はどうですか?
>この方法だと一応表引き用のフォームの位置も形も自由に決められます。

なるほど!

[サブフォーム]として処理するには良い方法かもしれませんね。

さすがですね。(^^v


30506 Re:イベントハンドラはコピーしても動作しません みつぐ 2005/07/13-23:43
記事番号30500へのコメント
佐田守弘(KS-00119)さん

> 手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・(後ろは省略)
>の部分でいえば、フォームの定義画面でフォームの余白にフォーカスを置いた状態で、
>オブジェクト属性のダイアログを表示すると、フォームのオブジェクト属性が表示されます。
>この状態で[イベント]のタブを開き、左側にある「キーダウン」イベントをダブルクリックして
>下さい。
>すると、イベントファイル(イベントファイルが指定してある前提)が開き、
> 手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・

> 手続き定義終了
>が作られます。既に作られているなら、その手続きが表示されて、編集状態になります。
>この部分だけは、必ず上記の手順で作って下さい。
>そして、私が提示したコマンドは、この2つの手続き定義開始〜手続き定義終了の間の
>行にコピーして下さい。
>
>そしてこの操作によって、キーダウンイベントのチェックボックスにチェックマークが入ります。
>単にコピーしたのではこのチェックマークが付かないので、イベントとして動作しません。
>
表示することができました。有り難う御座いました。



30507 Re:「表引き」ウィンドウは自動設定のようです ONnoji 2005/07/13-23:45
記事番号30503へのコメント
ONnojiさん

>私的には、この[サブフォーム]という表現がトホホ的に超難解でした。(@_@)
>
>本当に[サブフォーム]ならば[メイン&サブフォーム]形式のフォームを想起します。(^^v
>しかし、[表引き]の代用としては不自然、つまり変な感じがします。(>_<)

[サブフォーム]に関しては、しぼうかん氏からの回答がありましたので、
そちらをご参照ください。(^^ゞ


30508 Re:表引きパネルの大きさ指定 みつぐ 2005/07/13-23:52
記事番号30502へのコメント
佐田守弘さん
有り難う御座います。
>表示されたパネルの横幅をマウスでドラッグして延ばす事は可能です。
職場のパソコンがノートなものですから少しでも見やすくできないかと思いま
して、新規にフォームを開く毎にこの操作をしなければならないものですから、
何か良い方法があればと思い質問しました。残念ながら無いようですね!


30525 サブフォーム方式 佐田 守弘 2005/07/14-23:31
記事番号30505へのコメント
しぼうかんさん御提案の、サブフォーム方式は、表引き的機能を実現する
1つの方法です。
ただ、みつぐさんの最初の質問にある
 >[a]項目を塞がない位置に表示できる方法
を満たせるかどうかが、課題になります。

と言うのは、[a]項目が画面の左上にある時、あるいはフォーム上で左端にある
事が分っているなら、その項目に掛からない位置に表示すればよいわけですが、
もし左右の中央あたりに表示されるとすると、スクロールの状態によっては、
そのサブフォームを上部に表示するか、下部に表示するかといった問題が出て来ます。
そして最悪のケースで画面の中心付近に表示されている時に、
表引き用のフォームを床に表示しても、[a]項目が隠れてしまうというケースも、
一般論としては想定しなければなりません。

そのためには、[a]項目が画面のどの位置に表示されているかを調べて、
じゃましない位置を割り出して、その場所に表示する様にプログラムしなければならないのではと思います。

●表引きとは書いたけど
私が#30491で書いた方法は、表引きというよりも、桐ver.5にあった処理行指定コマンドを
ウィンドウ版の桐で実現する方法といった方が、正しいのでしょうね。

処理行指定コマンドとは、桐ver.5にあったコマンドで、表を表示し、↑↓キーを
使って行を移動し、Enterキーを押すとその行が処理行に指定されるコマンドでした。
指定した処理行の項目値を変数に取り込んで、別の表でその値を使うといった事ができました。

Windows版桐からこのコマンドが無くなったため、代替の方法としてフォームを
表示した状態で行を選び、Enterキーの押下をイベントで拾って、
同様の処理を行う様になりました。表引き的な使い方は、その1つの応用例です。

佐田守弘(KS-00119)

戻る