(現在 過去ログ5 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■738 / inTopicNo.1)  サブフォームにリアルタイムで表示させたい
  
□投稿者/ 沼田 -(2005/12/13(Tue) 09:54:20)
    いつも質問ばかりの沼田です。桐Ver9 sp1を使っています。
    
    メイン/サブ共に同じ項目を配置しているフォームで、行追加状態の途中でも、同時に表示させる方法はありますでしょうか。
    
    悲しげさんの左右連動フォーム3態のJushoBm.wfm と JushoBs.wfmで例示してみます。
    JushoBs.wfmに[氏名]を追加します。
    行追加を行い、メインの[氏名]に沼田と入れると[ふりがな]にカーソルは飛びますが、この時点でサブフォームの[氏名]に沼田と表示させたいのです。
    
    JushoBs.wfmはグループ項目を置いて多重化で表示させています。使用の条件はこのままとしたいと思っています。
    カーソルが次の項目に移動するということは[氏名]の&編集文字列(一時的な格納場所という意味です)に沼田という文字列が代入されているに過ぎず、次行にカーソルが移るまではレコードに書き込まれていないのだと理解しています。そのために、サブ内の[氏名]にも表示させることができないはずだと思っています。
    ここで、編集対象表は多重化で開いていますから、始めの表の[氏名]に入れた文字列を、例えば変数に取り込んでおき、多重化で開いた表(サブフォームで使っている表)の[氏名]に書き込めば、もしかすると表示してくれるかも、と思いましたが、メイン側で編集中ですからそうもいきません。
    何か方法はありますでしょうか。
    過去ログから探し出すことができませんでしたので、よろしくお願いします。
    

引用返信 [メール受信/OFF] 削除キー/
■747 / inTopicNo.2)  Re[1]: サブフォームにリアルタイムで表示させたい
□投稿者/ うにん -(2005/12/14(Wed) 12:16:41)
    >次行にカーソルが移るまではレコードに書き込まれていない
    
    「更新モード設定」で確定させたらよいのでは?(入力のキャンセルが面倒になりますが)
    
    >始めの表の[氏名]に入れた文字列を、例えば変数に取り込んでおき
    
    サブ側は項目値でなく変数値の表示にしてしまう手もありそうです。
    

引用返信 [メール受信/OFF] 削除キー/
■748 / inTopicNo.3)  Re[2]: サブフォームにリアルタイムで表示させたい
□投稿者/ 沼田 -(2005/12/14(Wed) 19:11:10)
    うにんさん、ありがとうございます。
    
    メインフォーム内に配置している項目に入力された値を使って、いくつかの計算作業を定義しています。
    この計算作業は編集対象表の表定義内で計算項目にしているわけではなく、
    別の表で表引き計算させた結果を編集初期値にして、その後の訂正にも対応できるようにしています。
    その項目数が多いので、必要最低限の項目をメインフォームに置き、全ての項目をサブフォームで表示
    させるようにしているのです。
    さらに、項目によっては、表引き計算による計算結果によって入力するべき値が変わる項目もあります。
    そのため、1行の入力が終わっていないタイミングでも、計算結果を表示したいのです。
    
    計算結果は、それぞれの項目の&編集文字列に代入して、その項目の入力時に初期値として表示させます
    から、変数に取り込むことは可能です。
    この変数をサブフォーム内に表示させることはできると思いますが、表示されている文字列を項目値として
    訂正することもありますから、変数値を訂正したものを改めて項目に書き込む、という作業が必要になります。
    これらの作業を、項目毎にイベントで定義して、「更新モード設定」メソッドで、
    表示モードで書き込み、フォーカスを移動し、訂正モードに切り替えて次の項目の入力に備える、
    ということになるかと思いますが....。
    やはり、それ位しかないでしょうか。
     

引用返信 [メール受信/OFF] 削除キー/
■751 / inTopicNo.4)  Re[3]: サブフォームにリアルタイムで表示させたい
□投稿者/ 佐田 守弘 -(2005/12/15(Thu) 23:28:26)
http://www.m-sada.com
    沼田さん
    状況が良く把握し切れていませんが、書かれている様な事を目的に1レコードの編集の途中で、
    サブフォームにそれを反映する事はかなり難しいかと思います。
    なぜなら、1レコードの入力が確定した段階で、表データに反映されるはずだからです。
    項目値については、桐の内部エディタで入力や訂正などの編集が行われ、入力が確定した段階
    (イベントで言うソース値更新のタイミング)で表に書き込まれます。
    
    ここで「表に書き込まれます」と表現しましたが、本当に表ファイルに書き込まれるかどうかは
    やや疑問があり、書き込むためのバッファに書き込む準備がされているだけではないかという
    気もします(検証したわけではありませんが)。
    
    つまり表ファイルにきちんと書き込まれた状態(あるいはそれと同等の状態)になるのは、1レコード
    の全データが確定して別のレコードに移動するか、表示モードになった時ではないかと思います。
    
    従って、入力中の項目はもとより、入力途中のレコードは、別のフォームに表示する事は難しいと
    思います。
    
    ただし、
     > この計算作業は編集対象表の表定義内で計算項目にしているわけではなく、
     > 別の表で表引き計算させた結果を編集初期値にして、その後の訂正にも対応できるようにしています。
     > その項目数が多いので、必要最低限の項目をメインフォームに置き、全ての項目をサブフォームで表示
     > させるようにしているのです。
     > さらに、項目によっては、表引き計算による計算結果によって入力するべき値が変わる項目もあります。
    という目的なら、ソース値更新のイベントでソース値を取得して、この値で何か処理をするといった
    別の考え方で対応できる可能性があります。
    

引用返信 [メール受信/OFF] 削除キー/
■752 / inTopicNo.5)  Re[1]: サブフォームにリアルタイムで表示させたい
□投稿者/ アックン -(2005/12/16(Fri) 11:48:16)
    沼田さん、こんにちは。
    下のようなイベントでやってみたらどうでしょう。
    グループ追加開始イベント中だと使えないと思いますけど。
    
    ・メインフォームのソース値更新イベント
     method @フォーム.更新モード設定( 0 )
     method @フォーム.更新モード設定( 2 )
    
    ・サブフォームのソース値更新イベント
     method ハンドル=&hwindow, @フォーム.更新モード設定( 0 )
     method @フォーカスを設定したいサブフォームのオブジェクト名.フォーカス設定()
     method @フォーム.更新モード設定( 2 )
    
    アックン(=^・^=)

引用返信 [メール受信/OFF] 削除キー/
■753 / inTopicNo.6)  Re[1]: サブフォームにリアルタイムで表示させたい
□投稿者/ ONnoji -(2005/12/16(Fri) 12:24:42)
    スイマセン、内容を全く理解していないのですが…(^^ゞ
    
    強制的にサブフォームを再描画する方法としては、
    [表示倍率の設定]メソッドを使うことが考えられます。
    一度、試してみたらいかがでしょうか。
    
    タラレバの話でスイマセン。
    

引用返信 [メール受信/OFF] 削除キー/
■759 / inTopicNo.7)  Re[2]: サブフォームにリアルタイムで表示させたい
□投稿者/ 沼田 -(2005/12/18(Sun) 12:50:37)
    ONnojiさん、ありがとうございました。
    
    > [表示倍率の設定]メソッドを使うことが考えられます。
    
    しかし、ヘルプに「このメソッドは、メインフォームに対してのみ有効です。」と説明されているとおり、
    "無反応"でした。
    サブフォーム内の項目のソース値更新イベント内に書いてみましたが、エラーを出すこともなく"無反応"でした。
    使えないイベントの場合はそのようにメッセージを返してくるのが常だと思っていますが、
    多分次のようなことが原因ではないかと思っています。
    ・このイベントはメインフォームにのみ有効
    ・定義されているのはサブフォーム内のため、
     同じ項目であってもメインフォーム内の項目を訂正しただけではサブフォーム内の項目を訂正したことにはならない
    ・従って、サブフォーム内のソース値更新イベントは発生していない
    ・だから、このメソッドも呼び出されていない
    ・結果、エラーメッセージが表示されない
    ということでしょう。
    
    質問の目的は、同じ項目をメインとサブに置き、
    メインに置いた項目の入力が確定したタイミングでサブフォーム内の項目値も表示させたい
    ということですから、
    残念ですが、このメソッドの使用では目的を達成できそうもありません。
    
    別に、アックンさんからもアイデアをいただいていますが、こちらは希望通りの動きをしてくれそうです。
    また、これからもよろしくお願いします。
    
    
    > スイマセン、内容を全く理解していないのですが…(^^ゞ
    > 
    > 強制的にサブフォームを再描画する方法としては、
    
    > 一度、試してみたらいかがでしょうか。
    > 
    > タラレバの話でスイマセン。
    > 

引用返信 [メール受信/OFF] 削除キー/
■760 / inTopicNo.8)  Re[2]: サブフォームにリアルタイムで表示させたい
□投稿者/ 沼田 -(2005/12/18(Sun) 13:12:05)
    アックンさん、ありがとうございました。
     
    > ・メインフォームのソース値更新イベント
    >  method @フォーム.更新モード設定( 0 )
    >  method @フォーム.更新モード設定( 2 )
    > 
    > ・サブフォームのソース値更新イベント
    >  method ハンドル=&hwindow, @フォーム.更新モード設定( 0 )
    >  method @フォーカスを設定したいサブフォームのオブジェクト名.フォーカス設定()
    >  method @フォーム.更新モード設定( 2 )
    
    端的に言えば、メインフォームのソース値更新イベント内にそのように記述するだけで動作しました。
    
    メインフォームでは行訂正終了イベントを定義し、ある入力値に基づいて別の計算用表で表引き計算などを行い、
    その結果を目的の項目に「行訂正」で代入しながら入力を進めていくように定義しています。
    この定義によって、
    >  method @フォーム.更新モード設定( 0 )
    のタイミングで計算し、表示モードになっていることからサブフォームでも表示します。
    続いて、
    >  method @フォーム.更新モード設定( 2 )
    によって、次の項目の入力を準備してくれるようになりました。
    最後の項目に、
    method @フォーム.更新モード設定( 6 )
    を定義することによって、行の追加を続けていけるようにもなりました。
    これで課題の動作は、全く希望通りに叶うことになりました。
    ありがとうございました。
    
    後は、項目毎に一々表示モードにして計算しながら項目を移動していくことになりますので、
    1行のデータ入力のスピードに、これから先で不満が出てくるかもしれない、ということが課題でしょうか。
    尤も、それはイベント内で#表引きが使えないことが大きく影響していることになりますが、
    それはこれから挑戦してみることにします。

引用返信 [メール受信/OFF] 削除キー/
■762 / inTopicNo.9)  Re[3]: サブフォームにリアルタイムで表示させたい
□投稿者/ うにん -(2005/12/18(Sun) 21:22:27)
    >>[表示倍率の設定]メソッドを使うことが考えられます。
    
    > サブフォーム内の項目のソース値更新イベント内に書いてみましたが、エラーを出すこともなく"無反応"でした。
    
    試してませんけど、メインフォームで[表示倍率の設定]を実行すればよい、という話では?
    

引用返信 [メール受信/OFF] 削除キー/
■763 / inTopicNo.10)  Re[4]: サブフォームにリアルタイムで表示させたい
□投稿者/ ONnoji -(2005/12/18(Sun) 21:53:00)
    > >>[表示倍率の設定]メソッドを使うことが考えられます。
    >>サブフォーム内の項目のソース値更新イベント内に書いてみましたが、エラーを出すこともなく"無反応"でした。
    > 試してませんけど、メインフォームで[表示倍率の設定]を実行すればよい、という話では?
    
    確かにそうだと思いますが…
    今回の内容は、テキストボックスのエディタで編集中の値を、
    項目に書き込んで、再描画したいということのようですね。
    
    [表示倍率の設定]メソッドは、
    テキストボックスのエディタを終了することは出来ないと思うので、
    今回の用途として向いていないと思います。
    
    代案としては、[編集文字列変更]イベントで、
    [編集文字列取得]メソッドを使い編集文字列を取得して、
    普通に[項目値代入]コマンドを実行すれば、
    テキストボックスのエディタを終了しなくても項目値は更新できると思います。
    この場合は、普通に[描画更新]メソッドでOKじゃないかと思います。
    試したわけではありませんけれど。(^^ゞ

引用返信 [メール受信/OFF] 削除キー/
■764 / inTopicNo.11)  Re[4]: サブフォームにリアルタイムで表示させたい
□投稿者/ 沼田 -(2005/12/19(Mon) 10:32:04)
    > 試してませんけど、メインフォームで[表示倍率の設定]を実行すればよい、という話では?
    
    アドバイスを受けたのはその通りなんですが、この措置の目的は、
    メインフォーム内の一つの項目を更新したタイミングで別のテキストオブジェクトに表示する、
    のような使い方になると思います。
    今回の課題は、表示させたいテキストオブジェクトがサブフォームにありますので、
    メインからの操作でサブの表示を制御する、という課題になります。
    表示倍率の設定メソッドは、サブフォームの大きさを制御することを想定していないのではないでしょうか。

引用返信 [メール受信/OFF] 削除キー/
■765 / inTopicNo.12)  Re[5]: サブフォームにリアルタイムで表示させたい
□投稿者/ 沼田 -(2005/12/19(Mon) 10:49:46)
    > この場は、普通に[描画更新]メソッドでOKじゃないかと思います。
    
    描画更新メソッドが使えそうな気がしているんですが、
    メインフォームからサブフォームのウィンドウハンドルを取得できないで困っています。
    このメソッドのハンドル指定はサブからメインへの説明がありますので、
    逆にメインからサブのウィンドウに働かせることもできそうな気がしているんですが、
    #ウィンドウハンドル取得関数を使ってもメインのハンドルしか取得できません。
    従って、サブフォーム内の各項目に再描画を予約することもできないし、描画更新を働かせることもできません。
    
    やはりメインの項目の1つずつで表示モードと訂正モードを繰り返して、
    強制的に表示させていくしかないのかもしれません。
    これをすると恐ろしく処理に時間がかかってしまい、実用的でなくなるかも....。
    
    所詮、エクセルのようにリアルタイムに計算結果を表示させていきたいという要求は、
    1つのフォーム内での処理で済む場合の他は、望むべきでないのかもしれないですね。

引用返信 [メール受信/OFF] 削除キー/
■766 / inTopicNo.13)  Re[6]: サブフォームにリアルタイムで表示させたい
□投稿者/ ONnoji -(2005/12/19(Mon) 11:18:34)
    2005/12/19(Mon) 11:19:58 編集(投稿者)
    > > 普通に[描画更新]メソッドでOKじゃないかと思います。
    > メインフォームからサブフォームのウィンドウハンドルを取得できないで困っています。
    > #ウィンドウハンドル取得関数を使ってもメインのハンドルしか取得できません。
    
    それは無理ですよ。
    なぜならば、サブフォームにはウィンドウハンドルがありません。
    正確には、サブフォームのウィンドウハンドルはメインフォームと同じです。
    なぜなら、ひとつのウィンドウだからです。
    
    > このメソッドのハンドル指定はサブからメインへの説明がありますので、
    > 逆にメインからサブのウィンドウに働かせることもできそうな気がしているんですが、
    
    サブフォームの[フォーム]オブジェクトが利用できるメソッドを実行する場合には、
    
    メソッド呼び出し @サブフォーム名.@フォーム.メソッド名( )
    
    という具合にすると出来ると思います。
    
    > 描画更新メソッドが使えそうな気がしているんですが、
    
    私の前言を覆すようですが、
    サブフォームの再描画というのは結構曲者でして、
    描画更新メソッドが使えるのかは分かりません。
    それでも駄目なら、最後の手段としてメインフォームの倍率設定というところでしょう。
    
    > やはりメインの項目の1つずつで表示モードと訂正モードを繰り返して、
    > 強制的に表示させていくしかないのかもしれません。
    > 所詮、エクセルのようにリアルタイムに計算結果を表示させていきたいという要求は、
    > 1つのフォーム内での処理で済む場合の他は、望むべきでないのかもしれないですね。
    
    テキストボックスを編集している時、
    つまり、キャレットが点滅している場合に、
    テキストボックスのソース、つまり項目を直接編集していると勘違いする人が多いですね。
    
    テキストボックスを編集している時は、一種のバッファをエディットしているので、
    これをエディタと呼んでいるわけです。
    
    したがって、
    テキストボックスの編集が終わらなければ、項目値は書き換わらないのです。
    ※テキストボックスの編集を終わらせないで、項目値を書き換える方法は前回書きました。
    
    > これをすると恐ろしく処理に時間がかかってしまい、実用的でなくなるかも....。
    
    同じ結果を出すためには何通りかの方法があります。
    アックンさんの方法ですでに解決されているのですから、それでよいと思いますよ。
    
    心配するほど遅くなることは無いと思いますけれど。

引用返信 [メール受信/OFF] 削除キー/
■767 / inTopicNo.14)  Re[7]: サブフォームにリアルタイムで表示させたい
□投稿者/ ONnoji -(2005/12/19(Mon) 11:41:23)
    > 同じ結果を出すためには何通りかの方法があります。
    > アックンさんの方法ですでに解決されているのですから、それでよいと思いますよ。
    
    アックンさんの方法では、
    一度表示モードにして、項目値を確定しているのですから、
    さすがに桐側でも再描画をサボることは出来ない筈だろうと思います。
    
    したがって、描画更新やその他のメソッドにこだわる必要はないと思いますが…
    

引用返信 [メール受信/OFF] 削除キー/
■768 / inTopicNo.15)  Re[5]: サブフォームにリアルタイムで表示させたい
□投稿者/ ONnoji -(2005/12/19(Mon) 11:51:26)
    > アドバイスを受けたのはその通りなんですが、この措置の目的は、
    > メインフォーム内の一つの項目を更新したタイミングで別のテキストオブジェクトに表示する、
    > のような使い方になると思います。
    > 今回の課題は、表示させたいテキストオブジェクトがサブフォームにありますので、
    > メインからの操作でサブの表示を制御する、という課題になります。
    > 表示倍率の設定メソッドは、サブフォームの大きさを制御することを想定していないのではないでしょうか。
    
    うにんさん、横レスで失礼します。
    
    [表示倍率の設定]メソッドの言い出しっぺは私( ONnoji )なので、
    コメントいたします。
    
    これは、私( ONnoji )がよく読まないで書き込んだのがいけませんでした。(^^ゞ
    
    テキストボックスの編集との関連では、
    [表示倍率の設定]メソッドはまったく有効ではないと思います。
    
    私の発言の真意は、
    「万一、桐がサブフォームの再描画をサボった場合に有効ですよ」ということでした。
    ※でも、編集中の値までは無理ですから…、残念!

引用返信 [メール受信/OFF] 削除キー/
■769 / inTopicNo.16)  Re[5]: サブフォームにリアルタイムで表示させたい
□投稿者/ うにん -(2005/12/19(Mon) 12:07:30)
    > 今回の課題は、表示させたいテキストオブジェクトがサブフォームにありますので、
    > メインからの操作でサブの表示を制御する、という課題になります。
    
    そうじゃなくて、「表示倍率の設定」をすればメイン全体が再表示されるから「大は小を兼ねる」はず
    という話です。
    サブフォームをどうこうしようというわけではありません。
    
    ただ、ONnojiさんも書いてますが、再表示してもソース値自体が変更されてない状態では
    この件に関してはうまくいかない気がします。
    

引用返信 [メール受信/OFF] 削除キー/
■776 / inTopicNo.17)  Re[7]: サブフォームにリアルタイムで表示させたい
□投稿者/ 沼田 -(2005/12/20(Tue) 14:10:15)
    > 正確には、サブフォームのウィンドウハンドルはメインフォームと同じです。
    > なぜなら、ひとつのウィンドウだからです。
    
    そうですね。サブフォームはメインフォーム内に置かれた普通のオブジェクトでしかないはずですね。
    
    > 描画更新メソッドが使えるのかは分かりません。
    > それでも駄目なら、最後の手段としてメインフォームの倍率設定というところでしょう。
    
    結果的には、どちらもうまく行きませんでした。
    
    >>これをすると恐ろしく処理に時間がかかってしまい、実用的でなくなるかも....。
    > 心配するほど遅くなることは無いと思いますけれど。
    
    プログラムなるものを書いていますと、
    できるだけ行数は少なく、できるだけ同じ処理は避けて、特にファイルのオープン/クローズは少なく、
    などと考えてしまいます。
    DOS時代のプログラムの作り方は、ファイルサイズなども気にしていましたから、ことさらにそうなんでしょう。
    変数の個数さえ気にしないといけませんでしたから、同じ変数を場面場面で違う用途に使い回してみたり...。
    今回の件でも、訂正モードと表示モードの切り替えを繰り返すことに、変な抵抗を感じてしまいました。
    1行の入力が完成するまでは訂正モードや挿入モードだけでいいじゃないか、この中で何とかならないのか、
    というような、よく考えれば大して意味もない感情の問題でした。
    
    アックンさんに頂いたアイデアでは、確かにどのタイミングで「行追加」の中止を動作させるか
    という問題は残りそうですが、
    こちらの方は何とかなりそうです。
    
    その後の作業の中で、全く別の問題が出てきましたので、
    それはまた別のスレッドを立ててお尋ねしたいと思っています。

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■778 / inTopicNo.18)  Re[8]: 多重化でもリアルタイムで表示させたい?
□投稿者/ ONnoji -(2005/12/20(Tue) 16:07:04)
    この質問の冒頭に書いてある
    > メイン/サブ共に同じ項目を配置しているフォームで、行追加状態の途中でも、
    > 同時に表示させる方法はありますでしょうか。
    の部分を、すっかり見落としていました。
    大変失礼しました。
    
    [行挿入]となるとかなり難しいというか、
    無理そうな気がします(出来たらスゴイと思いますが…)。
    
    さらに、よく考えてみると…
    メインフォームとサブフォームで、
    同じ編集対象表を使用しているということですから、
    多重化されたふたつの表の、
    
    ・一方の表の更新中の内容を、
    ・他方の表でも同時的に反映させる
    
    ということが可能か???という問題と同等のような気がします。
    
    試しに、任意の表を表編集で開き、
    [ウィンドウ]メニュー→[新しいウィンドウを開く]を選び、
    多重化したとします。
    
    仮に一方をAウィンドウ、他方をBウィンドウと呼ぶことにします。
    この時、Aウィンドウの項目の訂正、あるいは行の挿入が、
    Bウィンドウに同時的に反映されるでしょうか?
    
    おそらく、レコードが確定した時に反映されると思います。
    つまり、多重化するということは、同一ユーザの共有状態みたいなものですから、
    排他制御されると思われます。
    
    表編集でこういう状態なのですから、
    フォームでも同じになるだろうと考えるのが自然な気がします。
    
    従って、以前タラレバで書いた私のさまざまな妄想…
    
    > 代案としては、[編集文字列変更]イベントで、
    > [編集文字列取得]メソッドを使い編集文字列を取得して、
    > 普通に[項目値代入]コマンドを実行すれば、
    > テキストボックスのエディタを終了しなくても項目値は更新できると思います。
    > この場合は、普通に[描画更新]メソッドでOKじゃないかと思います。
      ↑は、まったく的外れであったと反省しています。(^^ゞ
    
    >>描画更新メソッドが使えるのかは分かりません。
    >>それでも駄目なら、最後の手段としてメインフォームの倍率設定というところでしょう。
      ↑も、まったく的外れであったと反省しています。(^^ゞ 

引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -