過去の桐井戸端BBS (桐ver.9)
20295 フッタ部に置いたサブフォームの画面表示をON/OFFしたい 沼田政治 2003/05/11-15:24
フッタ部に置いたサブフォームの画面表示のON/Offに関する質問です。

一覧表形式のフォームにボタンを置いておき、ボタンの押下によって対象行のデータを
カード型フォームで編集したいと思っています。
この時、ボタンが押下されるまではサブフォームを非表示にしたいと思っています。

また、サブフォームの大きさは画面半分ほどですので、サブフォームでの編集に入れば、
上部に残して置いたメインフォームのデータを参考にしながら作業したいと思っているのです。
このため、サブフォームをメインフォームのフッタ部に配置し、フッタ部を非表示に設定しました。

ボタンにはクリックに対応するイベントハンドラを定義し、その中で
「オブジェクト操作 @フォームフッタ部.画面表示="1"」の記述でサブフォームが現れるようにしています。

しかし、これを実行すると現れたフッタ部にサブフォームが表示されるのではなく、
画面のほぼ中央部に表示されてしまいます。
この状態はフォームの最大化ボタンを一旦操作すれば
定義時のようにフッタ部に表示されるようになります。
対症療法的に、フォームの最大化を実行させてやれば良いようにも思いますが、”オブジェクト属性を参照”
しようにも”最大化で表示する”に当てはまりそうな項目が見つかりません。
何か見落としているのでしょうか。
それと、このような方法は、どうも正規の方法ではないように思います。
そもそも定義したように表示されないことがおかしいのではないかと思っています。
定義時には、フッタ部にサブフォームは収まっていますし、試しに表示の指定で編集に移っても
正常にフッタ部にあります。
X,Y座標などを指定しなければならないのかとも思いましたが、
定義した時点でサブフォームの座標はメインフォームに記憶されているはずだとも思いますから、
そんなはずはないと思いながらも訳が分からなくなってしまいました。
どうかよろしくお願いします。

20300 フッタ部の画面表示のオン・オフ 悲しげ 2003/05/12-13:29
記事番号20295へのコメント
どもっ、沼田さん、
再現できました。ちょっと変わった使い方ですね。(^^;)
ま、不具合と云えば不具合でしょうけどね。
多分、フォームの画面上の表示位置はフォームオープン時に決めているのだと思います。
それを途中で、画面の半分ほどにもなるサイズの(サブフォームと云うより)フッタ部そのものを出現させるのは、
ちょっと酷なような気がしないでもありません。(^^;)
私ならフッタ部は予め表示させておいて、サブフォームのみの画面表示オン・オフをさせると思います。
その方が見た目もずっと自然な感じがします(私の感覚では)。

あと、これもまた好みの問題になるかもしれませんが、
当該レコードのデータが、常に下部等にカード表示されるって方法もあります
(当然ながらレコード移動に連動して)。
フッタ部に常に表示されるカードは、サブフォームでもいいし、
なんなら(サブとしてのカードではなく)必要な各項目をテキストオブジェクトとしておくことでも
同様の結果は得られます。
もちろん、これらの画面表示のオン・オフも可能です(フッタ部自体は最初からオンを前提として)。

20301 Re:フッタ部の画面表示のオン・オフ 悲しげ 2003/05/12-13:37
記事番号20300へのコメント
常に表示する場合、今回の沼田さんのは「上下」ですが、
http://mokuchan.hp.infoseek.co.jp/download/dl-list1.htm
の「092n」には類似のことを「左右連動フォーム三態」として
まとめてあります。(v8sp6での作品ですが)
20303 Re:フッタ部の画面表示のオン・オフ 沼田政治 2003/05/12-14:09
記事番号20300へのコメント
どもっです、悲しげさん。ありがとうございます。沼田です。
いろいろと、あれやこれやと試してるんですが、なかなかしっくり来なくて...。
前提が、まずはデータの一部分のみで構成されているデータの固まりを見たいのです。
表形式編集を行えば画面の3倍近くになるほどの量のデータを1画面程度に押さえて一覧する、ということです。
で、各行の全データを確認する必要が出てきた場合に、1画面に全データを表示/編集したい、ということが狙いです。
だから、ここで問題になっているフッタ部を常に表示させておくと”画面の領域がもったいない”ことになります。
フッタ部がなければその分多くのデータを一覧で見ることができますから。
で、必要なときに全データを表示させる方法を考えてみたのです。
別に全データを表示/編集できるカード型フォームを作っておいて切り替えるなどです。
V5世代の[HOME]キーの使い方ですよね。
ただ、このフォーム自体を切り替える方式は、一瞬画面が黒くなり見苦しいとか、
全データと言ってもたかだか画面半分ほどでしかないので、画面の使い方として”もったいない”と感じてしまうのと、
何よりも前後の項目内容を参考にしながら編集することもあるので、
その際には”不便だ”ということなどなどで、違う方法にチャレンジしている、ということなんです。
フッタ部表示をON/OFFする方法は、最初は画面いっぱいに一覧表示されているデータの詳細を見たいと思ったときに
クリック一発で瞬時に確認することができる、さらに上部の一覧でも編集できるし下部の詳細画面でもできる、
と言う点で、結構気に入ってしまいました。
表示がズレると言う点だけ除けば....。
もう少し、あれやこれやとがんばってみます。
20304 Re:解決しました 沼田政治 2003/05/12-15:07
記事番号20301へのコメント
悲しげさん、お忙しいのにありがとうございました。
解決しました。何のことはない、フォームの形式を一覧表形式から伝票形式に変えるだけでした。
データを一覧で見たいから一覧表形式でなければ...、というのが頭の中から離れなかったみたいです。
何という頭のカタサでしょう。
悲しげさんから紹介いただいた「左右連動フォーム三態」をボーっと眺めていたら、”何で自分のはできないんだろ”っと、
フッと気が付いてしまいました。試しに、伝票形式にしてサブフォームを”それなりに配置”し、
非表示にしておいてからイベント処理で表示をオンにしたところ、
自分の狙っていたとおりの状態にすることができました。
伝票形式フォームの中にサブフォームを置く、という基本的な使い方ではなかったかと、
改めて愕然としています。
でも、プログラムを作るってこんなものなのかなと、改めて思っています。
ありがとうございました。
20305 Re:フッタ部の画面表示のオン・オフ 悲しげ 2003/05/12-15:20
記事番号20303へのコメント
なるほど、私ならそのようにはしないと思いますが(^^;)、どうしても
そうしたいと云うのなら、ちょっと考えてみました。
まず、フッタ位置とかは、途中では駄目で、フォームオープン時にしか
決められないようなので、定義時にはフッタの画面表示あり、
即ちフォーム開始時には、ヘッダありで開かせるようにします。
こうすると、桐の方でフッタ位置をキープできると思います。
このキープは「フォーム開始」イベントでは駄目で、その次の時点となりますから、
苦肉でこれは「タイマー」イベントを使います。
例えば、「タイマー1」イベントにチェックを入れて「タイマー値1」を「0.1」としておきます。
その上で、kevの記述ですが
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
手続き定義開始 フォーム::タイマー1()
 オブジェクト操作 @フォーム.タイマー1="0"
 オブジェクト操作 @フォームフッタ部.画面表示="0"
手続き定義終了

*↓以下はコマンド牡丹の「手続き実行」のつもり
proc フッタオン()
 オブジェクト操作 @フォームフッタ部.画面表示="1"
 オブジェクト操作 @某サブフォーム.画面表示="1"
end

proc フッタオフ()
 オブジェクト操作 @フォームフッタ部.画面表示="0"
 オブジェクト操作 @某サブフォーム.画面表示="0"
end
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
これで何とかうまく行ったような・・・・。


20306 Re:フッタ部の画面表示のオン・オフ 悲しげ 2003/05/12-15:27
記事番号20305へのコメント
ありゃ、#20304では解決済みとのことですか。(^^;)
ちなみに#20305は一覧表形式です。

ただ、途中で文章が変になっていますから、そこだけ訂正を入れておきます。

>ーム開始時には、ヘッダありで開かせるようにします。こうすると、桐
>の方でフッタ位置をキープできると思います。
>このキープは「フォーム開始」イベントでは駄目で、その次の時点とな
>りますから、苦肉でこれは「タイマー」イベントを使います。例えば、
              ↓
このキープは「フォーム開始」イベント辺りまでの過程で行われるようですから、
その変更は「フォーム開始」イベントでは駄目で、その次の時点・・・・


これで意味が通じると思います。

20308 Re:フッタ部の画面表示のオン・オフ 悲しげ 2003/05/12-15:36
記事番号20305へのコメント
ああ、#20305では、まだタイプミスがありました。(^^;)

>決められないようなので、定義時にはフッタの画面表示あり、即ちフォ
>ーム開始時には、ヘッダありで開かせるようにします。こうすると、桐
          ↑
         フッタ

20309 Re:やっぱり、ダメでした 沼田政治 2003/05/12-15:43
記事番号20304へのコメント
沼田です。自己レス....、ということになるのでしょう....。
伝票形式フォームの明細部下部に置いたサブフォームは、その下のデータを隠してしまうんですよね。
フォームが左右に分かれている場合などは、もともとそれぞれのフォームを表示したり非表示にしたり、
などという使い方は想定されていないのでしょう。ところが私がやりたいことは、
一覧表示で見ていながらその”時”が来たらサブフォームででも編集したい、
ということですから、開いたフォームで元のデータが隠れてしまうようでは困るのです。
これに比べると、フッタ部に置いたサブフォームではデータが隠れてしまうことはありませんから、
やっぱり前の方式の方が良いかも....。
でも、表示が思ったように行かないし....。
20312 Re:できました 沼田政治 2003/05/12-18:56
記事番号20308へのコメント
悲しげさん、できました。ありがとうございました。
フォーム開始時に表示オンにしておいて、フォームが開いてからオフにする、
というのは気づかなかったこともなかったんですが、
それだけではサブフォームの座標を取得することはできていなかったようです。
タイマーイベントというのがあったんですね。イベントの種類は、とにかく多すぎて、
どれがどんな働きをするのか、連想ゲームをするにも疲れてしまいそうです。
タイマーイベントも2つもあるんですね。きっと、2つとも定義しないといけないような
処理の方法があるってことですよね。これから、少しずつですが見ていこうと思います。
イベントの処理にそのように書いているので当然のことですが、
フォーム開始時に一瞬フッタ部が表示された後、私の希望通りの動作をしてくれています。
この”一瞬表示される”状態をも改善してやろうという意気込みで、これからもう少し、
あちこち見ていこうと思っています。
これは、編集表を切り替えたり使うフォームを切り替えたりするときでも現れますよね。
一瞬、黒い画面が目の奥に焼き付くような....。これさえ何とかできるような気がしてきました。
ホントにありがとうございました。

戻る