過去の桐井戸端BBS (桐ver.8)
7606 フォーム作成中のオブジェクトコピー 石井 2000/09/12-21:26
こんばんは。是非みなさんのお知恵を拝借いたしたく・・・。
表に[○○入金日][○○入金進捗][××管理日][××進捗]…と
2項目が対になって延々140項(70のチェック項目)があります。
[○○入金日]には"2000/09/10"の様に日付が入ります。
[○○入金進捗]には"未定","予定","済","無し"の四択。
101項目目に[前回チェック日][今回チェック日]と2つの日程チェック日があります。
この入力用フォームの[○○入金日]の編集属性式に

#条件選択(([○○入金進捗]="")+([○○入金進捗]="予定")*([]<=[前回チェック日]),"前景モード'指定色'前景色'赤'",([○○入金進捗]="予定")*([]<=[今回チェック日]),"前景モード'指定色'前景色'紺色'",1,"'前景モード'継承'")

と入力しました。又、
[○○入金進捗]の編集属性式にも同様に
#条件選択(([]="")+([]="予定")*([○○入金日]<=[前回チェック日]),"前景モード'指定色'前景色'赤'",([]="予定")*([○○入金日]<=[今回チェック日]),"前景モード'指定色'前景色'紺色'",1,"'前景モード'継承'")
と入力しました。

進捗欄が空欄だったり前回のチェック日を過ぎても"予定"のままのデータは"[赤]"、
前回のチェック日を過ぎて今回のチェック日までの間の"予定"は[青]にと表示されます。

日程のチェックの中で「おいおいまだ予定のままかよ」
「あれ?その項目って先日終わったんじゃなかったっけ?」という部分が色で識別できるというものです。

さて、10項ぐらいならそのオブジェクトを複写してテキストを[××管理日]にし
編集属性式をひとずつ[○○入金日]を[×○管理日]に・・とやればいいのですが
70項ともなると結構トホホ・・です。
表の項目名のルールは1項目は必ず[〜日]で終わり次項は必ず[〜進捗]で終わる一対です。
このあたりを利用して1つのオブジェクトをコピーしたあとテキストを変えるだけで同じ様な結果になる・・
編集属性式なんて出来ないものでしょうか。
そうすればその1個(1対)の入力オブジェクトを70個コピーしてテキストだけを
変えていくだけで思ったとおりの入力フォームができあがります。
どなたかお知恵を貸してください。
7607 Re:フォーム作成中のオブジェクトコピー 宮城 2000/09/12-22:40
記事番号7606へのコメント
石井さん、凄まじいチェックをされるものですね。
となると、すさまじい表定義入力もやむを得ないかなと思います。

各定義式・関係項目名自体を項目値とする表を作られてはいかがですか。
定義式は項目計算式で書きあげる。

これが仮にうまくいっても、70回のn倍だけ、コピー・貼付が発生しますが。


7608 Re:フォーム作成中のオブジェクトコピー 石井 2000/09/12-23:10
記事番号7607へのコメント
宮城さん。早速のレス、どうもです。
>各定義式・関係項目名自体を項目値とする表を作られてはいかがですか。定義式
>は項目計算式で書きあげる。

実は定義式を[○○入金額ch]という70個の項目を作ってそこに計算式で
#条件選択(([○○入金進捗]="")+([○○入金進捗]="予定")*([]<=[前回チェック日]),2,([○○入金進捗]="予定")*([]<=[今回チェック日]),1,1,0)
と入れればいいなと考え、ここまでは作ってあります。
この2と1の部分が何らかの入力をしなくてはいけない行ですから、
あとでここだけ抜き出す時に使えるな・・と思って作成済です。
ですから前述の入力用フォームの[○○入金日]の編集属性式は
#CASE([○○入金額ch]+1,"'前景モード'継承'", "前景モード'指定色'前景色'紺色'","前景モード'指定色'前景色'赤'")
と1個だけに出来る・・・というところまでは出来ているんです。
で、あと[○○入金額ch]さえなんとかなれば・・・何ですが・・・
既に表の項目は210項目以上と凄い事になってるんで、
出来ればダイエットしたいな..と。

7618 Re:フォーム作成中のオブジェクトコピー きりぎりす 2000/09/13-10:48
記事番号7608へのコメント
ダイエットしたいということであれば、とりあえず別の観点から
"前景モード'指定色'前景色'赤'"などの編集属性式を文字列の配列変数にあらかじめ設定しておくというのもあります。
メンテナンスのことも考えると、いい手でしょ?
7619 Re:フォーム作成中のオブジェクトコピー hidetake 2000/09/13-11:26
記事番号7618へのコメント
>編集属性式

私の場合も、えらく複雑な判定の条件があり、最初はテーブルに持たせていたのですが、
実際に稼働させると、えらく重くなってしまい編集属性式に移してしまった事があります。

編集属性式にそのまま移したのでは設定があまりに面倒なので、
KEV 内に記述して、フォーム開始イベントで制御するようにしました。
オブジェクト操作ですね!
ついでに、あまりに重くなってしまうことも考えて、チェックボックスで、
その属性式による判定を使うか使わないかの制御も加えてもいます。

1つ1つのオブジェクトにしこしこと書き込むより、KEV 内に式書いて、
一挙にオブジェクト操作した方が、書くのは簡単だし、間違いも少なくなり、
またメンテナンスも簡単になると思います。

7632 Re:フォーム作成中のオブジェクトコピー 石井 2000/09/13-18:51
記事番号7619へのコメント
hidetakeさんへ。石井です。
>KEV 内に記述して、フォーム開始イベントで制御するように

なるほど。さっそくフォーム開始イベントを書いてみました。

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
オブジェクト操作 @○○入金日.編集属性式="#CASE([○○入金ch]+1,""前景モード'継承'"", ""前景モード'指定色'前景色'紺色'"",""前景モード'指定色'前景色'赤'"")"
オブジェクト操作 @○○入金進捗.編集属性式="#CASE([○○入金ch]+1,""前景モード'継承'"", ""前景モード'指定色'前景色'紺色'"",""前景モード'指定色'前景色'赤'"")"
手続き定義終了
これでちゃんと目的通りの表示が出来ました。
これを70回繰り替えすわけですね。
**********************
とすると、「○○入金」の部分だけが変化する繰り返しなのでこれを
繰り返し文かなにかで処理できたらすっきりしそうです。
文字列配列で表の項目名を読み込んで項目名が「日」で終わる時と「進捗」で終わる時に
その項目についてオブジェクト操作をすればいい・・・
と考えたまではいいのですが、
kevファイルの中での記述で
&色属性="@○○入金進捗.編集属性式=""#CASE([○○入金ch]+1,""前景モード'継承'"", ""前景モード'指定色'前景色'紺色'"",""前景モード'指定色'前景色'赤'"")"" "
オブジェクト操作 &色属性
は"=がありません"とはじかれました。
オブジェクト操作 のあとを変数の中身を式として評価させねのって出来るんでしょうか?
7633 Re:フォーム作成中のオブジェクトコピー 石井 2000/09/13-18:58
記事番号7618へのコメント
きりぎりすさんへ レスどうもです。
>"前景モード'指定色'前景色'赤'"などの編集属性式を文字列の配列変数
>にあらかじめ設定しておくというのもあります。
>メンテナンスのことも考えると、いい手でしょ?

さっそく&項目名[]と&色属性[]を使って組んでみました。
ただ、このあとのレスにも書きましたけど

オブジェクト操作 &色属性

がはじかれてしまいます。
具体的にはどんな記述をしたらいいか、教えていただけませんか?(^-^)


7653 Re:フォーム作成中のオブジェクトコピー きりぎりす 2000/09/14-13:39
記事番号7633へのコメント
なんか編集属性式を開始イベントで設定するあたりから混乱してきましたね

編集属性式を設定すべき項目名が&項目名[]に設定されているとして、
対応する[○○入金ch]が&chk項目名に設定されたものとします。

  &色属性[1] = "前景モード'継承'"
  &色属性[2] = "前景モード'指定色'前景色'赤'"
&色属性[3] = "前景モード'指定色'前景色'青'"

  * 編集属性式[]には "&色属性([○○入金ch]+1)" が設定されるようにする
  *                 <== 私が意図したのはこの部分だけ^-^;

  繰り返し &カウント = 1, &項目数
    オブジェクト操作 &項目名[&カウント].編集属性式 = \
"&色属性["+&chk項目名[&カウント]+"+1]"
  繰り返し終了

こんなところかな、ごめんなさい未検証です

7688 Re:フォーム作成中のオブジェクトコピー解決! 石井 2000/09/16-11:23
記事番号7606へのコメント
ご指導のたまものです。
ちょっと ["]の扱いに苦労したりしましたが、動き出しました。
前提
項目名は[○○日]、[○○進捗]、[○○CH]と3項目1セットで複数連なっている.
[○○CH]には[日]と[進捗]から文字色(継承、青、赤)の3種類として、1,2,3が計算式で計算されている
フォームの編集属性式を一度に設定するkevファイル内の記述

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
変数宣言 共通,文字列{&項目名[255],&CHK項目名,&色属性,&色属性式},整数{&列番,&CHK項目データ}
*色属性には[CH]項目のデータが1の時、2の時3の時の属性を記述する
&色属性 = """前景モード'継承'"",""前景モード'指定色'前景色'青'"",""前景モード'指定色'前景色'赤'"""

繰り返し &列番=17,255
 &項目名[&列番]=#項目属性(&列番,1)
 ケース開始
*   項目名に"日"又は"進捗"という文字を含んでいる時のみケース処理する  
   ケース ((#文字位置(&項目名[&列番],"日")>=1)+(#文字位置(&項目名[&列番],"進捗")>=1))
*    &CHK項目名は処理中の項目名の日と進捗を[ch]に変更した項目名
     &CHK項目名=#文字置換(#文字置換(&項目名[&列番],"日","ch"),"進捗","ch")
*  &色属性式はケース文部分
     &色属性式=#連結("#CASE([",&CHK項目名,"],",&色属性,")")
   オブジェクト操作 &項目名[&列番].編集属性式 = &色属性式
   ケース終了
繰り返し終了
手続き定義終了
以上です
又、いろいろ教えて下さいませ。

戻る