過去の桐井戸端BBS (桐ver.8)
6327 サブフォーム選択コマンドについて 今村 誠 2000/06/08-16:38
m&sのサブの編集対象表に届先tblを指定して、メインの依頼主wfmに
サブフォームとして、1届先住所wfmと、2届先請求wfmを同じ大きさで
張り付けました。
 住所を、入力するときは、1のwfmをサブフォームに、売上商品や数量
運賃を入力するときは、2のサブフォームを使用して入力したいと思っています。
 サブフォーム選択コマンド(マニュアルを読みましたが、見つけられませんでした)
に変わるよい方法がありましたら、ご指導してください。
モーダルフォームでも良いと思いますが、同じ場所に指定する方法があったら教えてください。

6331 Re:サブフォームの切り換え 悲しげ 2000/06/08-17:31
記事番号6327へのコメント
どもっ、今村さん、
サブフォームの切り換えをするコマンドは無いと思います。
で、このような場合は、通常はイベント(kev)を使って、切り換えます。

設定の仕方は、メインwfmの中にまずサブフォームオブジェクトを貼りつけます。
オブジェクト名を仮にsub1とします。で、サブフォーム名には
それ用のwfmを記述します。ここまでは出来ていると思います。
次、全く同じ場所に、もうひとつサブフォームオブジェクトを貼りつけます。
これは先に設定したsub1を「複写」するといいでしょう。
こうすると、サブフォームオブジェクトが同じ場所に重なったことになります。
あとのオブジェクト名を仮にsub2とし、サブフォーム名を該当するwfmにします。
sub2オブジェクトの方は、オブジェクト属性/表示タブで「画面表示する」のチェックを外しておくことがポイントです。
(逆にsub1の方を予め画面表示させないようにすることも有りです)

さて、このようにしてメインwfmをオープンした時は、sub1のみが画面表示されていることになります。
で、何らかのイベント※が生じた時に、「オブジェクト操作」コマンドでsub1の画面表示を0として、
sub2の方の画面表示を1にすると云うような使い方が一般的です。

※どのようなイベントが発生した時に、このような処理をさせるかは、
お好みですが、例えば牡丹「売上」の左クリックイベントで、sub2を
オモテに出し、牡丹「売上等」のそれでsub1を出す、と云うようなやり方なんかもあります。

このようにサブフォームの画面表示オン・オフで切り換えて行く例は随所にあったと思いますが、
ちょいと用途は違うものの、例えば
http://www8.freeweb.ne.jp/animal/mokuchan/download/dl-list.htm
の拙作058でも同様の手法を使っています。
6334 Re:サブフォームの切り換え 今村 誠 2000/06/08-19:53
記事番号6331へのコメント
悲しげさんは No.6331「Re:サブフォームの切り換え」で書きました。
素早いご返事ありがとうございます。
早速ダウンロードして試したいと思います。
半日かけて考えていましたが、私では無理でした。

解決ができると意欲満々です。
がんばります。
6336 Re:サブフォームの切り換え hidetake 2000/06/08-20:54
記事番号6334へのコメント
サブフォームの切り替えって、私は項目が多い時、次の様に
オブジェクト操作でフォーム名を切り替えて使っている部分もありますが、
そんな話しでは無いのですか?
-----------------------------------------------------------
proc サブフォーム設定(文字列 &subform)
  if (&subform)
   オブジェクト操作 @サブフォーム.サブフォーム=&subform
  else
   オブジェクト操作 &subform=@サブフォーム.サブフォーム
   if   (#uc2(&subform)="ミスロスSUB1.WFM")
    オブジェクト操作 @サブフォーム.サブフォーム="ミスロスSUB2.WFM"
   else if (#uc2(&subform)="ミスロスSUB2.WFM")
    オブジェクト操作 @サブフォーム.サブフォーム="ミスロスSUB1.WFM"
   end
  end
  call サブフォーム切換ボタン設定()
end
-----------------------------------------------------------

6337 Re:サブフォームの切り換え hidetake 2000/06/08-20:56
記事番号6336へのコメント
おおっ! ここは半角カナで間違って送信しても全角カナに直して登録されるのですね! ヽ(^。^)ノ
6338 Re:サブフォームの切り換え 悲しげ 2000/06/08-21:55
記事番号6336へのコメント
どもっ、hidetakeさん、
ははぁ、そうか。文字どおり、サブフォームを切り換えるって訳ですね。
私は実はオブジェクト操作(取得)コマンドの方は使ったことがありませんでしたので、
この手の発想はありませんでした。
でも、なるほど、こちらの方が何だか自然な感じがしますね。
画面表示のオン・オフを使うのもいいのですが、あんまし重ねすぎると、
だんだん煩雑な感じがしてきますから、ある程度以上だと
スパッとサブフォームを切り離す(切り換える)方が有利かもしれません。
となると、今まで作ったのも根本的な見直しが必要になりそうなものがありそうで、
ちと怖いですけど。(^^;)

ついでに、解説します。(^^;)
この処理は、ある処理から(引き数としてのサブフォーム名付きの)
手続き実行で呼び出されたものです。引き数は手続き定義の
入口で&subformなる変数で受理されています。
この値が空でなければ、オブジェクト操作(設定)コマンドで、
変数で受理されたサブフォーム名に変更されます。
逆にこの値が空の時は、
  オブジェクト操作 &subform=@サブフォーム.サブフォーム
として、オブジェクト操作(取得)コマンドで現在使われている
サブフォーム名を変数に取得しています。
この値(サブフォーム名)が某SUB1であれば某SUB2に、
逆に某SUB2であれば某SUB1にそれぞれ、
オブジェクト操作(設定)で変更すると云う訳です。
この際に、細かい配慮として、フォーム名拡張子名が大文字であっても
小文字であっても共用して対応できるように#us2で変換してから判断していると云う訳で。
その後の
  call サブフォーム切換ボタン設定()
ってのは、きっとこの後、牡丹の構成でも変えてるんでしょうね。
解説おわり。
6342 Re:サブフォームの切り換え 今村 誠 2000/06/09-09:25
記事番号6334へのコメント
半分うまくいきました。
絞込状態を次のフォームに引き継ぐことができません。
悲しげさんのサンプルも試してみましたが一緒でした。
作業数という項目を作ってフォーム切り替えのボタンに
  置換  [作業数]=99
  オブジェクト操作 ハンドル=&hwindow,@sw得意先副.@sw届先請求.画面表示
="0",@sw得意先副.@sw届先.画面表示="1"
  絞り込み [作業数]=99,部分一致検索=しない
  置換  [作業数]=""
としてみたのですが、最初の切り替えでは変化なし
2回目の切り替えではレコード件数0となり3回目以降も0となります。
私の予想ではオブジェクト操作の後に描画更新のメソッドと
再描画のメソッドがあればよいのではと思いますが。
メソッドは得意ではありません(わかりません)ので試していません。
また良いアドバイスがありましたらお願いします。

朝からみたらhidetakaさんからもコメントがあったのですが、
またもう一度検討しています。
一応昨日の結果と言うことで。
6347 Re:サブフォームの切り換え 悲しげ 2000/06/09-11:12
記事番号6342へのコメント
どもっ、今村さん

>絞込状態を次のフォームに引き継ぐことができません。

これはそもそもできませんのです。
その理由は、ひとつの表を別なwfmでは「多重化」してオープンしているからです。
多重化して開かれた表は、元の表とは全く独立していまして、
基本的には並べ替えも絞り込みもされていない
スッポンポンの基本状態にあります。ただしwfmの定義で、
並べ替えは指定できますが、絞り込みの自由度はあまり高くないように思います。
ですから、この辺りは意識的に対処してやる必要があります。

で、対処方法としては、基本状態で表示させた後に絞り込みさせて再描画云々と云うよりは、
フォーム開始時に絞り込みをさせてしまう方がいいと思います。
すなわち、「フォーム開始」イベントで必要な絞り込み(場合によっては並べ替えが先)
をさせてしまうと云うものです。

「フォーム呼出し」コマンドで使うのなら「編集表=する」と
して指定できそうですが。
6354 ありがとうございました 今村 誠 2000/06/09-18:36
記事番号6347へのコメント
悲しげさんうまくできました。
列固定項目に名前がありますがそこに整理番号をプラスするとうまくいくと思います。
私の場合、届先を受注順に並べ替える枝番があるのですが、
そこを連番で置換して、フォームを切り替えます。
そして枝番絞込というボタンを付けました。
一度ではできませんが、絞り込みした状態でフォーム切り替えを押すと
c置換.実行()と隠しボタンを押すと枝番を連番で置換してくれます。
次に悲しげさんに教わった、画面表示コマンドでフォームを切り替えます。
私の場合、切り替えボタンがメインフォームにあるので操作ボタンも切り替えました。
フォームが切り替わったら、枝番絞込で最初のフォームと同じレコードが絞り込まれます。
 最初非表示の[作業数]でしてみたのですがうまくいきませんでした。
表示項目ですると画面に更新されてますので、うまくいくみたいです。
すっきりできてうれしいです。
手続き定義開始 サブフォーム届先()
     メソッド呼び出し ハンドル=&hwindow,@sw得意先副.@sw届先請求.@c置
換.実行()
     オブジェクト操作 ハンドル=&hwindow,@sw得意先副.@sw届先請求.画面表
示="0",@sw得意先副.@sw届先.画面表示="1"
     オブジェクト操作 ハンドル=&hwindow,@c追加.画面表示="0",@c請求.画面
表示="1"
手続き定義終了
手続き定義開始 サブフォーム請求()
     メソッド呼び出し ハンドル=&hwindow,@sw得意先副.@sw届先.@c置換.実
行()
     オブジェクト操作  ハンドル=&hwindow,@sw得意先副.@sw届先.画面表示
="0",@sw得意先副.@sw届先請求.画面表示="1"
     オブジェクト操作 ハンドル=&hwindow,@c請求.画面表示="0",@c追加.画面
表示="1"
手続き定義終了
ありがとうございました。
6377 Re:メソッド呼び出しの変数の書き方 今村 誠 2000/06/11-11:59
記事番号6336へのコメント
hidetakeさんもうちょっとレベルアップしたら使えるようになると
思いますが、今回は、悲しげさんの方法画面表示のonnoffでして
みたいと思います。
でも使ってみたい手続きと思うので、親切な悲しげさんの説明が
あったにもかかわらずまだ解らないところがたくさんの私に教えてください。
>proc サブフォーム設定(文字列 &subform)
(文字列 &subform)の意味ですが、その前の段階で&subformには
文字が入っていると思うんですが、どんな意味があるのでしょうか。

今回の私の場合同じtblを明細行が違うのでサブフォームごと切り替えたのですが、
hidetakeさんの場合は、絞り込み状態の引継などはどうなるのでしょうか

オブジェクト操作 @サブフォーム.サブフォーム=&subform
このコマンドはマニュアルを見ましたがどこにあるかわかりません。
悲しげさんの説明では、サブフォームを&subformにするとありますが。
私の場合
メソッド呼び出し @sw得意先副.@sw届先.@c届先追加.実行()………1
と3階層に分かれていますので、その辺はどうなのでしょうか。
現在も、上のコマンドを変数にして実行できないかと4時間ぐらい検討しています。
&form="@sw得意先副.@sw届先.@c届先追加"     
&form="sw得意先副.@sw届先.@c届先追加"
メソッド呼び出し &form.実行()             ………2
代入 &form="@sw得意先副.@sw届先.@c届先追加.実行()"
メソッド呼び出し &form                 ………3
&form=#cat("sw得意先副.@",&form,".@c届先追加.実行")
メソッド呼び出し &form ()              ………4
1だと追加ができますが他の場合
指定のオブジェクトは登録されていませんとなります。  ………2
()がありません                    ………3
指定のメソッドはありません              ………4
となってうまくいきません

>オブジェクト操作 &subform=@サブフォーム.サブフォーム
でフォームの名前が変数にはいるのかなと実験しましたが
ku1241@サブフォーム指定のオブジェクトは登録されいていませんでした
笠原さんの本 名刺管理と販売管理 を購入予定ですが地方なので
3週間かかるとのことで首を長くして待っています。
悲しげさんの方法で画面切り替えをしたので切替ボタンに変数を代入させて
フォームの名前を&formにいれて行追加させたいのですがうまくいきません。
よろしくご指導してください。

6394 Re:メソッド呼び出しの変数の書き方 hidetake 2000/06/12-09:20
記事番号6377へのコメント
>proc サブフォーム設定(文字列 &subform)

この &subform にはフォームファイル名を入れます。
任意のファイルを指定したい場合は入れれば良いし、現在の状態の
トグルで良い場合はそのまま NULL 値で呼びだせば良いようにしただけです。


>表の引き継ぎ

これはサブフォームを変更しようとしまいと、桐のサブフォームを
使った動きとなんら変わりは無いと思います。
サブフォームの設定の「グループ値リスト」や「表の引き継ぎ」に
よるだけだと思います。


>オブジェクト操作 @サブフォーム.サブフォーム=&subform

最初のサブフォームが自分で付けたサブフォームのオブジェクト名で、
後のサブフォームがサブフォーム名を入力する項目の属性名となっています。

桐はオブジェクトの属性では「サブフォーム名」となっているけど、
オブジェクトのリストでは「サブフォーム」と名が抜けていますね!


あと、サブフォームを含む操作では、次の様に変数で指定できますが、
変数にはオブジェクト名そのもので@は付けません。

proc フォーカス設定()
  cond (&Menu .and &SubOBJ) \
     method 戻り値=&SelFocus \
        ,&Menu.&SubOBJ.フォーカス設定検査()
  cond (&SelFocus) \
     method &Menu.&SubOBJ.フォーカス設定()
end

ヘルプは html ヘルプであれば、フォーカス設定のところでもご覧下さい...

6395 Re:メソッド呼び出しの変数の書き方 hidetake 2000/06/12-09:36
記事番号6394へのコメント
げげっ! (^_^;ゞ
上の「proc フォーカス設定()」ってとんでもないコードですね!
最初の条件が通らなかった時、次で設定するフォーカス設定が
&SelFocus の値だけに影響されるではないか! これでは前の
状況によってエラーになってしまう...

6428 Re:メソッド呼び出しの変数の書き方 今村 誠 2000/06/14-08:38
記事番号6395へのコメント
*フォームのコマンドボタン「c追加」のボタンに変数を設定すること!!
*#計算(#代入(&sub2wfm,"sw届先"),#代入(&sub3wfm,"sw届先請求"),#代入
(&obj2,"c追加"),#代入(&obj3,"c請求"))
*フォームのコマンドボタン「c請求」のボタンに変数を設定すること!!
*#計算(#代入(&sub2wfm,"sw届先請求"),#代入(&sub3wfm,"sw届先"),#代入
(&obj2,"c請求"),#代入(&obj3,"c追加"))
*………画面の表示のon"1",off"0"でサブフォームを切り替える処理
手続き定義開始 サブフォーム切替 ()    /* サブフォーム画面切替手続きメ
インフォームにボタンあり*/
条件 (&X2<2 .OR &X2="") &X2=1,&選択深さ=1      /* 絞り込み状
態にないか変数が未定義値の時*/
  代入 &sub1wfm="sw得意先副",&obj1=c置換,&obj4=c枝番絞込
  メソッド呼び出し ハンドル=&hwindow,&sub1wfm.&sub3wfm.&obj1.実行() 
  /* 絞込状態の時は枝番を置換*/
  オブジェクト操作 ハンドル=&hwindow,&sub1wfm.&sub3wfm.画面表示
="0",&sub1wfm.&sub2wfm.画面表示="1"
オブジェクト操作 ハンドル=&hwindow,&obj2.画面表示="0",&obj3.画面表示
="1" /* 上でサブフォームを左はボタンを*/
  メソッド呼び出し ハンドル=&hwindow,&sub1wfm.&sub2wfm.&obj4.実行() 
 /* フォーム切替後に枝番を絞込*/
手続き定義終了hidetakeさんに何度も教えていただいてありがとうございます。
コメントの書き方は、悲しげさんのをまねしました。上手じゃないですけど。
あんまり手続きが続くので書くのはどうかと思いました、ご指導いただいた方には
つまらない手続きかもしれません。
ありがとうございますとだけ書いてもいいのかもしれませんが。
でもすごくこの掲示板助かります。
次の質問用意しています。でもあんまり立て続けで、自分で考えろと言われそうで、
先生方のご意見ありましたらお願いします。
PShidetakeさんに今回は悲しげさんの方法を採りました。まだ解らない私ですが、
hidetakeさんの手続きの
場合切替時間はどうなるのでしょうか。届先のファイルは2万件あって10Mになっています。
現在でもこのフォームを表示すると亀さんが出てきます(待つこと13秒)。
でも切替は瞬時にできるんです。
使えないのに聞くのも変なのですが、使用感があったらお願いします。

戻る