過去の桐井戸端BBS (桐ver.8)
9434 明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか ケント 2001/01/22-19:14
タイトルの件で、質問です。Ver8sp6です。

フォーム(一覧表形式)で明細部(セクション高さ16pt)にテキストオブジェクトを6個配置しています。
そのテキストオブジェクト6個のうち5個は表示高さ16ptなのですが、
最後の(画面上一番右)テキストオブジェクト[詳細]の表示高さを48pt(明細行3行分)にし、
「繰り返し表示する」にチェックを入れています。

上記の設定で、通常の表示状態のときは[詳細]は1行表示ですが、[詳細]にフォーカスがあるときだけ
[詳細]は3行表示になります。

ここまでは良かったんですが、フッタ部にコマンドボタンを配置したところ問題発生です。
[詳細]にフォーカスがあるときにコマンドボタンをクリックすると
(というか、コマンドボタンの周辺の背景部分をクリックしても)、コマンドボタンの機能ではなく
[詳細]の訂正になってしまいます。

再定義画面で見れば確かにフッタ部のコマンドボタンは明細部のテキストオブジェクトの後ろに隠れています。
「前面へ移動」「最前面へ移動」をしてみましたが、変化ありません。

コマンドボタンを移動すれば良いのでしょうが、今のままでもどこかの設定で生かすことができればうれしいです。
よろしくお願いいいたします。
9436 Re:wfm定義で陰に隠れたオブジェクトを扱うのは 悲しげ 2001/01/22-19:44
記事番号9434へのコメント
どもっ、ケントさん

例えば右クリックして「オブジェクトのリスト」を表示させてですね、そこから目的のオブジェクトに
アクセスすることが可能です。
あるいは何らかのうまい方法で、手前側のオブジェクト一式をヨッコラショと他の部分に移動させる、
あるいは一部切り取りして(クリップボードに入れておいたまま)陰の部分を修正して
後に元のオブジェクトを貼り付けるとか。
9437 Re:wfm定義で陰に隠れたオブジェクトを扱うのは 悲しげ 2001/01/22-19:49
記事番号9436へのコメント
改めてNo.9434を読み直してみましたら、どうもNo.9436の私のコメントは完璧に外しているみたいです。(^^;)
何度か読み直してみましたが、結局No.9434で仰ることの意味は私には理解できませんでした。(^^;)
9439 Re:明細部テキストオブジェクトに隠れたフッタ部コマンドボタン 佐田 守弘 2001/01/22-21:28
記事番号9434へのコメント
ケントさん
私も外しているかも知れませんが、オブジェクトの順序で、コマンドボタンを該当するテキストオブジェクトよりも
前面に配置してみてはいかがでしょうか。
オブジェクトの一の膳面とは、オブジェクトリストの下の方です。
なぜなら、オブジェクトはリストの上の方から下の方の順で描画されます。
従って、上の方のオブジェクトが背面になり、下の方のオブジェクトが前面です。

おそらく、コマンドボタンが背面になっているので、クリックしても、テキストオブジェクトが選ばれたと
判断されるのではないかと思います(外しているかも知れません)。

なお、かなり高等テクニックですが、オブジェクトを重ねて表示する方法は、「あり」です。
この場合、通常は表示しないオブジェクトを背面に配置したり、あるいは前面に配置しても非表示に設定しておき、
必要な時だけ表示するといった方法があります。
これはイベントで「オブジェクト操作 設定」コマンドを使い、オブジェクトの表示/非表示を切り換える事で行えます。

佐田守弘(KS-00119)
9443 明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか ケント 2001/01/23-09:19
記事番号9434へのコメント
悲しげさん 佐田さん こんにちは
わかりづらい質問にコメントを下さりありがとうございます。
どうもうまく書く事ができません。
また、書き忘れたのですが、明細部のセクションの高さは16ptです。

フォームの再定義画面で[詳細]テキストオブジェクトは拡張され(他のオブジェクトの3行分)フッタ部のコマンドボタンは
隠されます。
このコマンドボタンの再定義は悲しげさんがおっしゃっているように「オブジェクトのリスト」を表示させることにより可能です。

問題はこのフォームを使った入力・編集時のときです。
明細部の[詳細]テキストオブジェクトにカーソルがあるとき画面上はフッタ部のコマンドボタンは見えているのですが、
実際は[詳細]テキストオブジェクトの領域がかぶっていて、フッタ部のコマンドボタンをクリックしても
明細部の[詳細]テキストオブジェクトの訂正モードになってしまうのです。

明細部のオブジェクトよりフッタ部のオブジェクトを前面に出せるのか、というのが質問の主旨です。

どうも自分で書いた文章を読んでもわかりづらいなぁ!
9446 Re:明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか bonito 2001/01/23-11:53
記事番号9443へのコメント
ケントさん、未確認(で無責任な)コメントです (^^;

>フォーム(一覧表形式)で明細部(セクション高さ16pt)に・・・、

一覧表形式って使いやすいですか? 
伝票形式じゃ駄目ですか?
フォームでは圧倒的に伝票形式の方が定義しやすいと思いますが
(でもってレポートでは一覧表派)...、何と言っても全体像がつかみやすい、
まぁ一覧表は掛け算で伝票は割り算のような...。

伝票形式にして、件のオブジェクト、t詳細(仮称)を明細部全体の高さで割り切れる
高さにすれば問題は解決すると思うんですが...。


9448 Re:明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか bonito 2001/01/23-12:18
記事番号9446へのコメント
ははは (^^; やっぱり外してしまいました。
第一、質問の答えになってないじゃない > 自分

答え  出来ないと思います(多分)
対応  件のオブジェクト、t詳細(仮称)の属性イベントタブ内
    で「マウスイベントを使用する」のチェックを外す
    (で、希望はかなえられると思うが又も未確認...)

マウスイベントを使用するのチェックを外すと後面にあるオブジェクトがマウスイベントを受け取ります。
きりぎりさんに教えて貰いました。

9449 Re:明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか 悲しげ 2001/01/23-13:09
記事番号9443へのコメント
どもっ、ケントさん
ようやく云わんとしていることが判ったような気がします。
つまり、一覧表wfmで(伝票wfmでも同じことであろうが)1レコードの行数は、基本的には1行とするが、
某項目だけは3行ほどの高さで定義した。
こうすると、その某項目にフォーカスが行って且つ更新系のモードの時、当該項目のみ3行ほどに
(下方に)拡大されて表示される。
これはこれでなかなか面白い使い方だと思います。
さて、フッタ部において、この某項目の直下に牡丹を設置したとする。
こうすると、画面上のレコードポインタが上方にある場合は問題ないが、画面上で下方のレコードに位置していた場合
(つまり未だ広がってはいないが広がった時にはその表示範囲内に牡丹が入るような位置)、
牡丹をクリックしようとしても、そこは実は明細部某項目テキストの(見えざる)守備範囲だったのであって、
当該項目をクリックしたことになってしまう。
以上でよろしいでしょうか?

とすればですね、う〜ん、明細部とフッタ部のオブジェクトの前後関係については究明しようと云う気には
なりませんから(^^;)、一番簡単なのは牡丹の位置を、上記のようにならないところに移動することでしょうね。
なぜ移動したくないかは、その理由が判らなければ何とも云えませんが、
もし牡丹/項目を縦の関係で揃えたいってことならば、牡丹をフッタ部に置かずにヘッダ部の項目名部に置くのも
ひとつの方法でしょう。
この時の牡丹は、透明にしてもいいし、牡丹自体を項目名に見立てることも有りでしょう。
あたかも項目名をクリックする外観となります。
あと、特定の項目のみ3行表示させたいことの意図が、いわゆる拡大表示(例えば表のような)のノリであるならば、
私なら(モーダルフォーム命派なので)次のようにするかもしれません。
当該項目は1行のままとしておきます。
で、そこをクリックした時(「マウス左クリック」イベント)、拡大表示用のフォームを
「フォーム呼び出し」して処理するとか。この時、牡丹自体はフッタ部のままで影響ありません。(^^;)
9452 Re:明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか ケント 2001/01/23-19:50
記事番号9448へのコメント
bonitoさん こんにちは ありがとうございます.

>対応  件のオブジェクト、t詳細(仮称)の属性イベントタブ内
>    で「マウスイベントを使用する」のチェックを外す
>    (で、希望はかなえられると思うが又も未確認...)
>
>マウスイベントを使用するのチェックを外すと後面にある
>オブジェクトがマウスイベントを受け取ります。
>きりぎりさんに教えて貰いました。

その通りでした。
きりぎりさんも見ていらっしゃるかわかりませんが、ありがとうございます。

ただそのままだと[詳細]テキストオブジェクトがマウスを受け付けなくなりちょっとつらいので、
イベントで下記のようにしました。

手続き定義開始 t詳細::フォーカス取得(文字列 &喪失オブジェクト名)
オブジェクト操作 ハンドル= &hwindow,@t詳細.マウスイベント = "0"
手続き定義終了

手続き定義開始 t詳細::フォーカス喪失(文字列 &取得オブジェクト名)
オブジェクト操作 ハンドル= &hwindow,@t詳細.マウスイベント = "1"
手続き定義終了

まだまだ改良の余地は有りそうですが、マウスイベントのオン,オフという情報はとても参考になりました。
今後もよろしくお願いいたします。
9453 Re:明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか ケント 2001/01/23-20:13
記事番号9449へのコメント
悲しげさん こんにちは ありがとうございます。

>つまり、一覧表wfmで(伝票wfmでも同じことであろうが)1レコードの行数は、
>基本的には1行とするが、某項目だけは3行ほどの高さで定義した。こうすると、
>その某項目にフォーカスが行って且つ更新系のモードの時、当該項目のみ3行ほ
>どに(下方に)拡大されて表示される。これはこれでなかなか面白い使い方だと
>思います。
>さて、フッタ部において、この某項目の直下に牡丹を設置したとする。こうする
>と、画面上のレコードポインタが上方にある場合は問題ないが、画面上で下方の
>レコードに位置していた場合(つまり未だ広がってはいないが広がった時にはそ
>の表示範囲内に牡丹が入るような位置)、牡丹をクリックしようとしても、そこ
>は実は明細部某項目テキストの(見えざる)守備範囲だったのであって、当該項
>目をクリックしたことになってしまう。
>以上でよろしいでしょうか?

ハイそうです。

>当該項目は1行のままとしておきます。で、そこをクリックした時(「マウス左
>クリック」イベント)、拡大表示用のフォームを「フォーム呼び出し」して処理
>するとか。この時、牡丹自体はフッタ部のままで影響ありません。(^^;)

これをやろうと思ったのですが、明細行の該当行位置取得がわからず断念しました。

結果、別コメントbonitoさんの情報を参考に下記のイベントを設定しました。

手続き定義開始 t詳細::フォーカス取得(文字列 &喪失オブジェクト名)
オブジェクト操作 ハンドル= &hwindow,@t詳細.マウスイベント = "0"
手続き定義終了

手続き定義開始 t詳細::フォーカス喪失(文字列 &取得オブジェクト名)
オブジェクト操作 ハンドル= &hwindow,@t詳細.マウスイベント = "1"
手続き定義終了

とりあえずはこれで良しとしますが、もしよろしければ上記の位置取得に関して教えていただければ幸いです。

9454 Re:明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか 悲しげ 2001/01/23-21:33
記事番号9453へのコメント
どもっ、ケントさん
既にタイトルとはどんどんずれて来ていますが(^^;)

>>当該項目は1行のままとしておきます。で、そこをクリックした時(「マウス左
>>クリック」イベント)、拡大表示用のフォームを「フォーム呼び出し」して処理
>>するとか。この時、牡丹自体はフッタ部のままで影響ありません。(^^;)
>
>これをやろうと思ったのですが、明細行の該当行位置取得がわからず断念しました。

やっぱし(^^)。
え〜、イベントを書ける方でしたから、後の話は簡単です。
これは「明細行の該当行位置取得」云々と難しいことを考える必要はありません。
該当行位置は既に会話処理的に指定されていることを前提にすればいいことです。
あるいはマウス左クリックの行為自体が処理対象行を指定しているのだと考えてもよい。
いずれにせよ、まずは当該レコードの当該項目値を変数に受けます。
その後に呼び出す拡大表示用wfmのテキストソースをこの変数にしておくだけのことです。
そうすれば、呼び出されたwfmでは先ほどの項目値が表示されています。
私の場合は単に閲覧に留めていますが、もし呼び出しwfmの方で値を訂正したければ、
フォーム開始イベントで予め訂正モードにしておくとかの方法もあります。
訂正値を元表に反映させたければ、この過程で元表自体ではレコードは一切移動していませんから、
呼び出しフォームの終わり方とか色々な方法で、元表に戻った時に行訂正で
記述させる・させないとすることが出来るはずです。
----------記述例----------
手続き定義開始 t某::マウス左クリック(長整数 &マウス位置[2],……
 method @フォーム.更新モード設定(0)  /*訂正モードには敢えてしないでおく*/
 &某=[某]
 フォーム呼出し "拡大表示用.wfm",ボタン=&牡丹
 if(&牡丹="bOK")
  行訂正 [某]=&某
 end
手続き定義終了
--------------------------

マウスクリックだけじゃまどろっこしい、キー操作でもこれをやりたいと云うことなら、
上記「マウス左クリック」イベントと同様のことを「キーダウン」イベントに記述して実行させることもできます。
----------記述例----------
手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,……
 変数宣言 整数{&更新モード}
 method @フォーム.更新モード取得(&更新モード)
 条件(&更新モード>0) return
 if(&仮想キーコード=35)   /* 例えば[End]キー */
  &某=[某],&処理中止=1
  フォーム呼出し "拡大表示用.wfm",ボタン=&牡丹
  if(&牡丹="bOK")
   行訂正 [某]=&某
  end
……以下略
--------------------------
9456 3つの方法 佐田 守弘 2001/01/23-22:36
記事番号9443へのコメント
ケントさん
最初の質問のタイトルを良く見ていなかったようで、コマンドボタンは明細部ではなくてフッタ部にあるのですね。
今私が考えている対策は次の3つです。

@コマンドボタンを明細部に設ける
ケントさんの作られているフォーを見ていないので、はっきりした事は言えませんが、1つの方法としてコマンドボタン
を明細部におく方法があります。
明細部におけば、テキストオブジェクトよりも前面に配置する事ができます。
コマンドボタンはフッタ部に設けなければならないと言うルールはありません。
フッタ部に設ける利点としては、定義画面で明細部を拡大しても、フッタ部に設けたオブジェクトを移動する必要がない事です。

A問題のテキストオブジェクトは必要な時だけ表示する
このテキストオブジェクトは、通常は非表示としておき、編集する時だけに表示に切り換える方法もあります。
この場合には、他のオブジェクトと重なった位置でも構いません。

Bフォーム呼出しを使う
悲しげさんが書かれている通り、このテキストオブジェクトは別のフォームとし、フォーム呼出しでその時だけ呼び出す方法もあります。

以上のうちから適したものを試してみて下さい。

佐田守弘(KS-00119)
9472 Re:明細部オブジェクトよりフッタ部オブジェクトを前面に配置できますか ケント 2001/01/25-11:33
記事番号9454へのコメント
悲しげさん ありがとうございます.

いただいたコメントを参考に自分なりに設定中です。今の感じでは、モーダルフォームを表示させるほうが、
以前のテキストオブジェクトを3行表示させるより自分のイメージに合っているので、この方向で進めたいと思っています。

イベントを悩みながら奮闘しているので、どうしてもわからないときはまた質問します。
その時はよろしくお願いします。
9473 Re:3つの方法 ケント 2001/01/25-12:01
記事番号9456へのコメント
佐田 守弘さん ありがとうございます。

>@コマンドボタンを明細部に設ける
自分のフォームには合っていないようです。
>A問題のテキストオブジェクトは必要な時だけ表示する
これはやってみました。
しかし私のイメージでは、t詳細は常時1行表示、フォーカス取得時及び編集時3行表示です。
で、t詳細(1行表示用テキストオブジェクト)t詳細1(3行表示用テキストオブジェクト)の2つのオブジェクトを重ねて配置し、
t詳細1の表示、非表示を切り替える方法をやってみました。
ところが、t詳細1が必ず明細部の最上行に表示されてしまいます。フォーカスしている行にt詳細1が表示されません。

以上のようなわけで、悲しげさんのコメントを参考に別フォームを表示させる方向で奮闘中です。
不明な点があったらまた質問します。今後もよろしくお願いします。

戻る