イベント初心者講座 その9 または The Compleat Angler For Kiri 桐V8の釣魚大全

「かっこう」掲示板の投稿記事から、主に藤野さんとONnojiの問答集を作りました。何か役に立つ話が見つかるカモ?

トップページに戻る あらすじ その1 その2 その3 その4 その5 その6 その7 その8 その9

「ちょいタイマー」はそこそこにして、次へ進みましょう - ONnoji 2002年03月01日 15時16分
付け足しの説明を少々 - ONnoji 2002年03月01日 16時04分
Re:付け足しの説明を少々+さらにつけたし - pokopon 2002年03月01日 21時17分
なるほど・なるほど・納得です - 藤野 2002年03月01日 23時42分
Re:これも試して下さい - pokopon 2002年03月02日 01時56分
Re:あ〜、勘違い - pokopon 2002年03月02日 02時29分
添削しました。チャレンジしてください。 - ONnoji 2002年03月02日 07時43分
じっくり観てみました。(おはようございます) - 藤野 2002年03月03日 10時30分
論理値を利用しない方法を試して下さい。 - ONnoji 2002年03月03日 14時11分
Re:論理値を利用しない方法を試して下さい。 - 藤野 2002年03月03日 14時49分
Re:[回数]という項目は何のために? - ONnoji 2002年03月03日 15時59分
Re:[回数]という項目は何のために? - 藤野 2002年03月03日 17時30分
変数&m回数を追加 - ONnoji 2002年03月03日 18時53分
変数&m回数を追加しました - 藤野 2002年03月03日 22時48分
全リストを見せていただけませんか? - ONnoji 2002年03月03日 22時59分

「ちょいタイマー」はそこそこにして、次へ進みましょう - ONnoji 2002年03月01日 15時16分

藤野さんへ

> ONnojiさん今晩は
> 早速、試してみましたがもう少しいろいろやってみます。
> 2.3日試したらこの件はまた書き込みます。

「ちょいタイマー」はそこそこにして、次へ進みましょう。

さて、一般手続き:cmd登録Click( )に未入力をチェックする部分を作ってください。(^^ゞ
流れは次の擬似コードを参考にしてください。m(__)m

-------------------------------------------
手続き定義開始 cmd登録Click( )
 ** コマンドボタン:cmd登録を実行したら

 未入力のテキストボックスがあるか調べる
 ※変数の値を調べれば良い


┌if ( 未入力でなければ ) ※条件式を考えてください

│ 表 ”写真展住所録”
│ 行追加 [氏名]=&m氏名,[ふりがな]=&mふりがな,…省略… [住所]=&m住所,[住所2]=&m住所2
│ 終了 表 編集対象表
│ 手続き実行 prcVariableDefault( )

├else

│ メッセージボックスを表示する "○○が未記入です [OK]"
│ ※未記入のテキストボックスが複数ある場合でも最初のひとつだけを指示すること

│ 未入力のテキストボックスへフォーカスを移動する
│ ※メッセージボックスで示したテキストボックスへフォーカスを移すこと

└end

手続き定義終了
-------------------------------------------

なお、「コラム3 論理値のこと」を参考にしてもいいですよ。
参考にする時には、デバッグ用のテキストボックスは不用なので真似して作らないでください。

では、ご健闘を祈ります。(^^ゞ

付け足しの説明を少々 - ONnoji 2002年03月01日 16時04分

藤野さんへ

付け足しの説明を少々いたします。

> メッセージボックスを表示する "○○が未記入です [OK]"
> ※未記入のテキストボックスが複数ある場合でも最初のひとつだけを指示すること

例えば、未記入のテキストボックスが三つあったとしても、
どれか一つのテキストボックスをメッセージボックスに表示してください。

これは、次の理由からです。
(1) この種のミスは多くない
(2) もしも、未記入のテキストボックス名をすべて表示するとメッセージボックスが大きくなってしまう
(3) フォーカスを移せるテクストボックスはひとつだから(当然ですが…)
(4) ユーザは残りの入力ミスに自分自身で気が付く可能性がある(特に操作に慣れてくると…)

特に(4)は重要です。誰でも操作に慣れてくると気転が利くようになるものです。
人間は機械と違って学習します。
ですから、すべてのエラーを延々と表示するようなことは止めるべきです。
このように高飛車なメッセージを出すより、ユーザ自身が気が付くチャンスを与えるべきです。
ユーザは学習するということを忘れないようにしてください。m(__)m
そうすれば、ユーザが満足感を得られるプログラムになります。

以前、競馬のシミュレーションゲームで遊んでいた時、このような高飛車なメッセージを体験したことがあります。
レースに出走するすべての馬データを入力しないで実行させようとしたら、
だって全部入力するは大変だったんです〜、
未入力の馬の頭数分のエラーメッセージが延々と表示されました。

馬の名前が入力されていません!
馬の性別が入力されていません!
馬の年齢が入力されていません!
 :
 :
馬の脚質が入力されていません!

なんとなんと〜!、馬の頭数分ですよ〜。(T_T)
しかたなしに[OK]ボタンを連打して、とても指が疲れました。

このようなデザインをすると、
ちょっと試してみようという気を起こさせなくしますから、こういうデザインはよくありません。
従って、もうこのゲームでは遊ばないようになりました。

では、ご健闘を祈ります。(^^ゞ

Re:付け足しの説明を少々+さらにつけたし - pokopon 2002年03月01日 21時17分

藤野さん こんばんは
いつも二人のやり取りを楽しんで?ROMしています。

今回ONnojiさんが書かれていること、


> (4) ユーザは残りの入力ミスに自分自身で気が付く可能性がある(特に操作に慣れてくると…)
> 特に(4)は重要です。誰でも操作に慣れてくると気転が利くようになるものです。
> 人間は機械と違って学習します。
> ですから、すべてのエラーを延々と表示するようなことは止めるべきです。
> このように高飛車なメッセージを出すより、ユーザ自身が気が付くチャンスを与えるべきです。

この意見には大賛成です。

さすがに競馬ゲーム・・・・ではなく、(^^ゞ
実用アプリを職場で開発しているとき、エラーメッセージだけでなはく、懇切丁寧に「入力方法」や「ガイダンス」を表示するようにしました。
(これって、イベントの作成は簡単ですが、文字を入れるのが結構面倒です)。
最初は「親切だね」と重宝がられましたが、1ヶ月もしないうちに「煩わしい〜〜〜」と大ひんしゅく、削除をみんなに懇願されました。
おまけに「エラー音」までつけていたので、うるさがって、みんなでパソコンのボリュームを下げられました。
こうなると、肝心な時に音が出なくなるわけで、これまた大ひんしゅく。

結果的に、さっぱりしたアプリに成長(マイナーチェンジですけど)させられました。
最初からそうであれば、作る時に面倒が無かったのですが。
(エラー音にも気をつかって、やさしい感じのWAVファイルを再生してあげてたのですけど。かえってここに手間がかかりました)。

ユーザー(クライアント)は成長していきます。確実に。
最初はまごまごしていても、そのうち慣れてくれます。

最近はデータチェックルーチンを最後にもってきて、
「さ〜て、どこかが間違っていますよ。さがせるかな〜」なんて
メッセージボックスで全てを代表して表示させています。
これをはじめてから、クレームはこなくなりました。 (^o^)丿

「学ぶより慣れろ」が鉄則かな?

なるほど・なるほど・納得です - 藤野 2002年03月01日 23時42分

ONnojiさん、pokoponさん、納得です。
 実は今日似たようなことがありました、親切のつもりが
 ここ飛ばして出来ないのなどと言われ、直したら、この
 方が簡単だよ!の一言、先週までは使いやすいとか言って
 いたのに・・・?
  (ユーザーは成長(慣れる)を実感いたしました)m(__)m

さて、最終的に”未入力の項目があります”のメッセージ1本
にするとして。今回は勉強なので下記のようにイベントを作り
ました。ほとんど理論値のところのままですね (^^ゞ

名札 メイン
 変数宣言 局所,文字列{&mObjcmd}
 変数宣言 局所,文字列{&m文字列,&m郵便番号}
 変数宣言 数値,数値{&mLogicalNull,&mLogical氏名,&mLogical〒}
オブジェクト操作 @フォーム.タイマー1=”0”
 手続き定義開始 cmd登録Click()
 &mLogical氏名=(&m氏名=#U)
 &mLogical〒=(&m〒=#U)
 &mLogicalNull=(&mLogical氏名 .or&mLogical〒)
if (.not&mLogicalNull)
 表 ”写真展住所録”
 行追加 [氏名]=&m氏名,[ふりがな]=&mふりがな,[性別]=&m性別,[連名1]=&m連名1,[連名2]=&m連名2,[連名3]=&m連名3,[〒]=&m〒,[都道府県]=&m都道府県,[住所]=&m住所,[住所2]=&m住所2
else  
 ケース開始
  ケース( &m氏名=#U)
   メソッド呼び出し @t氏名 .フォーカス青蝓福法
   メッセージボックス ”注意”,”氏名が未記入です”,制御文字展開=する,アイコン=i
   
  ケース( &m〒=#U) 
   メソッド呼び出し @t〒 .フォーカス青蝓福法
   メッセージボックス ”注意”,”〒が未記入です”,制御文字展開=する,アイコン=i
  ケース終了
end
終了 表 編集対象表
手続き実行 prcVariableDefault( ) 
手続き定義終了

これだとフォーカスは移動するのですが、入力しようとすると次行にいってしまいます。
(カードが次のカード入力状態になる)
ためしに項目値代入を使って見ましたが、編集表がありませんと
しかられました。
 質問ですif(&m氏名≠#U or&m〒≠#U)と書いてはだめですか?

よろしくお願いします。

Re:これも試して下さい - pokopon 2002年03月02日 01時56分

藤野さん 頑張っていますね〜。

まず、

>   ケース( &m氏名=#U)
>    メソッド呼び出し @t氏名.フォーカス設定() ←ここも文字化けしていました。半角カタカナはご法度です。
>    メッセージボックス ”注意”,”氏名が未記入です”,制御文字展開=する,アイコン=i

ですが、
>    メッセージボックス ”注意”,”氏名が未記入です”,制御文字展開=する,アイコン=i
>    メソッド呼び出し @t氏名.フォーカス設定()

と逆の方が良いのではないかと思います。単に好みかもしれませんけど、エラー表示してから、目的のオブジェクトにカーソルが移動する方が自然かと思いますね。まあ、どっちでも良いと思いますが。


さて、
>これだとフォーカスは移動するのですが、入力しようとすると次行に
>いってしまいます。(カードが次のカード入力状態になる)
これは、データエラーでも「行挿入」が発生しています。if文ではじかれていないという事です。

>&mLogicalNull=(&mLogical氏名 .or&mLogical〒)

ここ辺りが怪しいんですけど。 (^^ゞ


>  質問ですif(&m氏名≠#U or&m〒≠#U)と書いてはだめですか?
> if (.not&mLogicalNull)
この部分ですか?
これだと、&m氏名と&m〒のうち、最低どちらかが未定義の場合に行挿入の作業がおこなわれませんね? if文ではじかれます。

「どちらかが未定義ではない」では判定できませんね。「どちらも未定義ではない」が正解です。

if (.not&mLogicalNull)

を使う場合には

>&mLogicalNull=(&mLogical氏名 .or&mLogical〒)

が怪しかったわけです。

であれば、

if (&m氏名<>#U .and &m〒<>#U)

が正解かと思います。 .or (理論和) ではなく .and (理論積)ですね。

両方にデータが入っていなければ「駄目よ」という式ですからね。
ちなみにこれも好みですが、私の場合には「≠」ではなく「<>」を使っています。「≠」を探すのがめんどうですから。
「><」でも同等です。

それと、and、or は最初に「.」を付けて下さい。notだって.notですので。


さて、&m氏名と&m〒に何かしらのデータが入ってif文で場合分けをしていますが、
if (&m氏名<>#U .and &m〒<>#U)
で「真」の場合には行挿入、「偽」の場合は「必ずエラーデータ」ですので、私だったら、ケース文を使わず、次のようにします。

if (&m氏名<>#U .and &m〒<>#U)
行挿入〜〜〜〜
else
 メッセージボックス ”入力エラー”,”氏名 または 郵便番号 が未入力です。[OK]”
 条件 (&m氏名 = #U)        メソッド呼び出し @t氏名.フォーカス設定()
 条件 (&m氏名 <> #U .and &m〒=#U)  メソッド呼び出し @t〒.フォーカス設定()
end

両方とも未入力の場合には、最初の氏名欄に移動するという訳です。
単に行数稼ぎですけど。
この時、最初から@t氏名と@t〒のオブジェクトの背景を「桜色」にしておけば、「あっ、ここが必須の項目だな?」とユザーに注意を促せます。ちなみに「桜色」も私の好みです。赤系統の色は「強い注意」をイメージさせます。

おっと、
決して藤野さんの「ケース」コマンドがいけないという訳ではありませんよ。こっちの方が「場合分けがはっきりする」ことになりますので。


注意:これらはあくまで「私の場合には」ということです。師匠のONnojiさんはまた別の方法を提示するかもしれません。色々な記述をみるのもその人らしさがでて良いかもしれませんね。

割り込みモードですいませんでした>ONnojiさん

Re:あ〜、勘違い - pokopon 2002年03月02日 02時29分

あ〜、勘違い!!

ロジック的には正しいんだけど、

>&mLogicalNull=(&mLogical氏名 .or&mLogical〒)
>ここ辺りが怪しいんですけど。 (^^ゞ

.or の後に空白はありますか?

> if (.not&mLogicalNull)

ここも。

この辺かな〜 おかしいのは。

確認方法として、

確認 #STR(&mLogicalNull)

と1行加えてみて下さい。

1が表示されていれば、「どれかが未入力」です。

でもって、

if (.not &mLogicalNull)

で、1→0 と入れ替わって、if文にはじかれます。

ONnojiさん>斜め読みはいけませんですね。 m(__)m

添削しました。チャレンジしてください。 - ONnoji 2002年03月02日 07時43分

藤野さんへ

> さて、最終的に”未入力の項目があります”のメッセージ1本
> にするとして。

ケースの条件ごとに「メッセージボックス」コマンドを書いた場合には、
メッセージボックスは該当する条件の1回のみ表示されますよ。
ですから無理やり一本にしなくてもいいです。

> 今回は勉強なので下記のようにイベントを作り
> ました。ほとんど理論値のところのままですね (^^ゞ

あの〜、「理論値」ではなくて「論理値」なんですけど〜、意味が全然違ってしまいます。(T_T)

添削前と添削後のプログラムを示しますのでチャレンジしてください。(^^ゞ

<添削前>
--------------------------------------------------------------------------------
名札 メイン
 変数宣言 局所,文字列{&mObjcmd}
 変数宣言 局所,文字列{&m文字列,&m郵便番号}
 変数宣言 数値,数値{&mLogicalNull,&mLogical氏名,&mLogical〒}
 オブジェクト操作 @フォーム.タイマー1=”0”

手続き定義開始 cmd登録Click()
 &mLogical氏名=(&m氏名=#U)
 &mLogical〒=(&m〒=#U)
 &mLogicalNull=(&mLogical氏名 .or&mLogical〒)
 ┌if (.not&mLogicalNull)
 │ 表 ”写真展住所録”
 │ 行追加 [氏名]=&m氏名,[ふりがな]=&mふりがな,…省略…,[住所]=&m住所,[住所2]=&m住所2
 ├else
 │┌ケース開始
 │├─ケース( &m氏名=#U)
 ││  メソッド呼び出し @t氏名 .フォーカス設定( )
 ││  メッセージボックス ”注意”,”氏名が未記入です”,制御文字展開=する,アイコン=i
 ││
 │├─ケース( &m〒=#U)
 ││  メソッド呼び出し @t〒 .フォーカス設定( )
 ││  メッセージボックス ”注意”,”〒が未記入です”,制御文字展開=する,アイコン=i
 │└ケース終了
 └end
 終了 表 編集対象表
 手続き実行 prcVariableDefault( )
手続き定義終了
--------------------------------------------------------------------------------

<添削後>
--------------------------------------------------------------------------------
名札 メイン
 変数宣言 局所,文字列{&mObjcmd}
 変数宣言 局所,文字列{&m文字列,&m郵便番号}
 変数宣言 数値,数値{&mLogicalNull,&mLogical氏名,&mLogical〒}
 オブジェクト操作 @フォーム.タイマー1 = "0”

手続き定義開始 cmd登録Click()

 &mLogical氏名 = ( #trim(&m氏名,3) = #U )
 &mLogical〒  = ( #trim(&m〒,3) = #U )
 &mLogicalNull = ( &mLogical氏名 .or &mLogical〒)

 ┌if ( .not &mLogicalNull ) /* ( #trim(&m氏名,3) <> #U .and #trim(&m〒,3) <> #U ) */
 │
 │ 表 ”写真展住所録”
 │ 行追加 [氏名]=&m氏名,[ふりがな]=&mふりがな,…省略…,[住所]=&m住所,[住所2]=&m住所2
 │ 終了 表 編集対象表
 │ 手続き実行 prcVariableDefault( )
 │
 ├else
 │┌ケース開始
 │├─ケース ( &mLogical氏名 )
 ││  メソッド呼び出し @t氏名.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”氏名が未記入です”,制御文字展開=する,アイコン=i
 ││
 │├─ケース ( &m〒=#U )
 ││  メソッド呼び出し @t〒.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”〒が未記入です”,制御文字展開=する,アイコン=i
 │└ケース終了
 └end
手続き定義終了
--------------------------------------------------------------------------------

<書き方の注意>
ifの後ろに空白文字を挿入するようになったのはいいのですが、
まだまだお行儀が悪い書き方が目立ちます。
特に論理演算子の前後に空白文字を挿入しないと結果が異なる場合があります。

下線("_")は空白文字を表す。

悪い &mLogicalNull=(&mLogical氏名 .or&mLogical〒)
良い &mLogicalNull=(&mLogical氏名_.or_&mLogical〒)

悪い if (.not&mLogicalNull)
良い if (_.not_&mLogicalNull)

悪い メソッド呼び出し @t氏名_.フォーカス設定( )
良い メソッド呼び出し @t氏名.フォーカス設定( )

> これだとフォーカスは移動するのですが、入力しようとすると次行に
> いってしまいます。(カードが次のカード入力状態になる)

「手続き実行 prcVariableDefault( )」を書く場所が不適切です。
添削前では必ず prcVariableDefault( ) が呼び出されます。
添削後では表にデータを追加した後に prcVariableDefault( ) が呼び出されます。


<メッセージボックス>

アイコン=i としたのはいいことです(写しただけ???)。
アイコン=! とすると「注意マーク」になって冷たい印象を与えます。

メッセージボックス ”注意”,”氏名が未記入です”,制御文字展開=する,アイコン=i

でもいいですが、
タイトルバーにわざわざ "注意" と表示しなくても、ユーザには注意ということが分るはずです。
それより、タイトルバーに手続き名を表示しておくと、
どの手続き(モジュール)がメッセージボックスを出しているのか分って便利です。
こうすると、DEBUGの助けになります。
メッセージボックスの本文はユーザが理解しやすい文言にするべきですが、
タイトルバーまで気を使う必要はありません(誰もタイトルバーを見てはいません(^^ゞ)。
ですから、次のようにしてください。

メッセージボックス "cmd登録Click”,"氏名が未記入です”,制御文字展開=する,アイコン=i


> ためしに項目値代入を使って見ましたが、編集表がありませんとしかられました。

そのとおり、NULLフォームには編集対象表はありません。

> 質問ですif(&m氏名≠#U or&m〒≠#U)と書いてはだめですか?

この質問自体はいい所をついていますね。
しかし残念ながら不正解です。
これはpokoponさんの if (&m氏名<>#U_.and_&m〒<>#U) が正解です。

添削後に応用するなら、
if ( #trim(&m氏名,3) <> #U_.and_#trim(&m〒,3) <> #U )
です。
早い話が、どっちもダメ!ということです。だから .and (どっちもということ)。

藤野さんの if (&m氏名≠#U_.or_&m〒≠#U) では
両方が未定義ならばOKですが、どちらか一方に文字が入力されていると偽です。
これではチェックしたことにはなりません。
早い話が、どっちかでOKしちゃうのが甘いのです。 .or は甘い時に使います。

論理演算は慣れていないと難しいです。
プロのプログラマでさえよく間違えてBUGを作っているのですから(本当です)。
頭が固くなりましたか?、プロでさえ間違えるのですから…あまり気にしないことっス。(^^v

プログラムの利用者つまりユーザはブール代数を知っている必要がありませんが、
プログラムの作成者つまり藤野さんはブール代数を一応勉強しなければいけません。

書店の数学コーナーに「論理と集合のはなし」といったタイトルの本がありますから、
ちょっと立ち読みしていただければ結構です。

今回のことはド・モルガンの法則と関係しています。
数学の授業を思い出してしまいましたか?
大丈夫、そんなに難しくないです。
ちなみに、いつも私の数学の成績は赤点でした。(^^ゞ

リプライをお待ちしています。

じっくり観てみました。(おはようございます) - 藤野 2002年03月03日 10時30分

ONnojiさん pokoponさん おはようございます。

いろいろためしまいした

pokoponさん
 ケース と 条件 の件 ですが 条件をどのように使用するか
 わからなかったので、助かりました。
 
 ≠と<>の件も 調べました。<>の方法で行きます。
 .and .or .not の件、昨夜、調べあげました。少し
 頭の中、ぐるぐるしてますが、OKです。
 注意項目の色づけ、すみません、アイデア頂戴します。
 視覚に訴えるのは納得です、普段何気なく使っているのに
 今回は気づきませんでした
 そういえば、今日は ”桃の節句” ということで桃色
 で 試してみよう---ト (^^ゞ
 色々なことが可能になって楽しいのです、またよろしくおねがいします。

ONnoji さん
 いろいろお手数おかけしました。
 
 メッセージボックスの アイコン=i はヘルプで確認して
 iは情報 !は警告 ?は問い合わせ Eエラーとでていたので
iを記入しました。

 添削後の例を見ながら、一行づつ、手直ししました。
 空白文字挿入の件は、十分注意して書きたいとおもいます。

 理論値と論理値の書き違い、申し訳ありません、まったく違う
 意味になってしまいますね m(__)m

 昨夜、論理演算子は調べました、論理和 . and 、論理積 . or、
否定 .not ややこしくて、頭のなか ぐるぐる状態ですが、
 図を見ながら、理解しようとつとめました、やや分かってきました

添削で気づいたこと、
 単なる #Uで はなく 3文字以下とかいうように、入力文字が
 もし途中で止まっていたときも注意を促すということですね。
 気づきませんでした。  
 
質問です
 ケース ( &m〒=#U ) ←ここですが (&mLogical〒)
              としてもいいのですか?

    メソッド呼び出し @t〒.フォーカス設定( )

ますます、楽しんでいます。
でも昨夜は論理演算を調べたので、書き込みできませんでした。

論理値を利用しない方法を試して下さい。 - ONnoji 2002年03月03日 14時11分

藤野さんへ

論理値を利用すた例と、論理値を利用しない例を示します。(^^ゞ

※論理値が理解しにくい場合には、論理値を利用しない方法を試して下さい。
※中途半端は止めましょう。

<添削1 論理値を利用した方法>
--------------------------------------------------------------------------------
名札 メイン
 変数宣言 局所,文字列{&mObjcmd}
 変数宣言 局所,文字列{&m文字列,&m郵便番号}
 変数宣言 数値,数値{&mLogicalNull,&mLogical氏名,&mLogical〒}
 オブジェクト操作 @フォーム.タイマー1 = "0”

手続き定義開始 cmd登録Click()

 &mLogical氏名 = ( #trim(&m氏名,3) = #U )
 &mLogical〒  = ( #trim(&m〒,3) = #U )
 &mLogicalNull = ( &mLogical氏名 .or &mLogical〒)

 ┌if ( .not &mLogicalNull ) /* ( #trim(&m氏名,3) <> #U .and #trim(&m〒,3) <> #U ) */
 │
 │ 表 ”写真展住所録”
 │ 行追加 [氏名]=&m氏名,[ふりがな]=&mふりがな,…省略…,[住所]=&m住所,[住所2]=&m住所2
 │ 終了 表 編集対象表
 │ 手続き実行 prcVariableDefault( )
 │
 ├else
 │┌ケース開始
 │├─ケース ( &mLogical氏名 )
 ││  メソッド呼び出し @t氏名.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”氏名が未記入です”,制御文字展開=する,アイコン=i
 ││
 │├─ケース ( &mLogical〒 )
 ││  メソッド呼び出し @t〒.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”〒が未記入です”,制御文字展開=する,アイコン=i
 │└ケース終了
 └end
手続き定義終了
--------------------------------------------------------------------------------

<添削2 論理値を利用しない方法>
--------------------------------------------------------------------------------
名札 メイン
 変数宣言 局所,文字列{&mObjcmd}
 変数宣言 局所,文字列{&m文字列,&m郵便番号}
 オブジェクト操作 @フォーム.タイマー1 = "0”

手続き定義開始 cmd登録Click()

 ┌if ( #trim(&m氏名,3) <> #U .and #trim(&m〒,3) <> #U )
 │
 │ 表 ”写真展住所録”
 │ 行追加 [氏名]=&m氏名,[ふりがな]=&mふりがな,…省略…,[住所]=&m住所,[住所2]=&m住所2
 │ 終了 表 編集対象表
 │ 手続き実行 prcVariableDefault( )
 │
 ├else
 │┌ケース開始
 │├─ケース ( #trim(&m氏名,3) = #U )
 ││  メソッド呼び出し @t氏名.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”氏名が未記入です”,制御文字展開=する,アイコン=i
 ││
 │├─ケース ( #trim(&m〒,3) = #U )
 ││  メソッド呼び出し @t〒.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”〒が未記入です”,制御文字展開=する,アイコン=i
 │└ケース終了
 └end
手続き定義終了
--------------------------------------------------------------------------------

<書き方の注意>
ifの後ろに空白文字を挿入するようになったのはいいのですが、
まだまだお行儀が悪い書き方が目立ちます。

悪い ケース( &m氏名=#U)
良い ケース_( &m氏名=#U)

リプライをお待ちしています。

Re:論理値を利用しない方法を試して下さい。 - 藤野 2002年03月03日 14時49分

論理値はもう少し勉強してからにします
 今回は論理値を使用しない方法でためしてみます。

 ここまで何とかたどり着きました。

そこで、また疑問が出てきました。
  @ [回数]のところはどうするか
     ※ 回数は写真展開催回数です (例 第30回写真展)
  A [ふりがな]は自動入力できない件はどうするか
    ふりがなは、今回、自動入力出来ないといわれて
    いましたが (^^ゞ
@は 以前、グループ項目にしていたので勝手に入力されて
いました、今回はグループ無しですのでどうしよう。と思ったのです。

 私の考えは cmd登録Click のボタンを押した時
 [回数]に直前値を書き込む
 あるいは
 住所追加フォームが開く時に
 行挿入して 
 [回数]に直前値を書き込む

Aは地道に入力する
 ここまで来ると、何とか方法があるな?とか考えてしまうのです。
 無理なら、無理でいいのですが。

よろしくおねがいします。

Re:[回数]という項目は何のために? - ONnoji 2002年03月03日 15時59分

藤野さんへ

> 論理値はもう少し勉強してからにします
> 今回は論理値を使用しない方法でためしてみます。
> ここまで何とかたどり着きました。
> そこで、また疑問が出てきました。
>  @ [回数]のところはどうするか
>     ※ 回数は写真展開催回数です (例 第30回写真展)
>  A [ふりがな]は自動入力できない件はどうするか
>    ふりがなは、今回、自動入力出来ないといわれて
>    いましたが (^^ゞ
> @は 以前、グループ項目にしていたので勝手に入力されて
> いました、今回はグループ無しですのでどうしよう。と思ったのです。

> 私の考えは cmd登録Click のボタンを押した時
> [回数]に直前値を書き込む
> あるいは
> 住所追加フォームが開く時に
> 行挿入して 
> [回数]に直前値を書き込む

写真展住所録.tblに[回数]という項目があることが不思議なんですけれど…
個人プロフィールと"第30回写真展"には何の関係もないと思うのですが???

"第30回写真展" とは "2002年書中見舞い" と同じような意味ですか?

ハガキに印刷するただの題名ですか?
それとも、"第30回写真展"の行を絞り込む必要があるのですか?

> Aは地道に入力する
> ここまで来ると、何とか方法があるな?とか考えてしまうのです。
> 無理なら、無理でいいのですが。

テキストボックスのソースが変数だと「ふりがな」機能は無理ですね。
地道に入力してください。m(__)m

リプライをお待ちしています。

Re:[回数]という項目は何のために? - 藤野 2002年03月03日 17時30分

[回数]という項目は案内ハガキを出す時に案内ハガキレポート
(複合レポート)でリンクして、来場者全員に案内状をだす為
に設定しました。
 この方法だと、写真展要綱、.tblが一行でも、写真展来場者
 が300人いても全員に出せることになります。
  レポートは
    ハガキ表面は
     上部は住所、名前 
     
     下部は要綱

     が印刷されます

    ハガキ裏面は全面写真となっています 


住所録にも[回数]が必要でした。
(住所録と写真展要綱、.tblの回数でリンクするためでした)

変数&m回数を追加 - ONnoji 2002年03月03日 18時53分

藤野さんへ

> [回数]という項目は案内ハガキを出す時に案内ハガキレポート
> (複合レポート)でリンクして、来場者全員に案内状をだす為
> に設定しました。
>  この方法だと、写真展要綱、.tblが一行でも、写真展来場者
>  が300人いても全員に出せることになります。
>   レポートは
>     ハガキ表面は
>      上部は住所、名前 
>      
>      下部は要綱
>
>      が印刷されます
>
>     ハガキ裏面は全面写真となっています 
>
> 住所録にも[回数]が必要でした。
> (住所録と写真展要綱、.tblの回数でリンクするためでした)

(1) まず、フォーム定義の変数管理で、m回数 を定義してください。スコープは"局所"です。
  データ型は 写真展住所録.TBL の[回数]と同じにしてください。

(2) 次に二箇所変更してください。"← ※これを追加" と書いてあるところです。

名札 メイン
 変数宣言 局所,文字列{&mObjcmd}
 変数宣言 局所,文字列{&m文字列,&m郵便番号}
 オブジェクト操作 @フォーム.タイマー1 = "0”

手続き定義開始 cmd登録Click()

 ┌if ( #trim(&m氏名,3) <> #U .and #trim(&m〒,3) <> #U )
 │
 │ 表 ”写真展住所録”
 │ &m回数 = [回数] ← ※これを追加
 │ 行追加 [氏名]=&m氏名,…省略…,[住所2]=&m住所2,[回数]=&m回数 ← ※これを追加
 │ 終了 表 編集対象表
 │ 手続き実行 prcVariableDefault( )
 │
 ├else
 │┌ケース開始
 │├─ケース ( #trim(&m氏名,3) = #U )
 ││  メソッド呼び出し @t氏名.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”氏名が未記入です”,制御文字展開=する,アイコン=i
 ││
 │├─ケース ( #trim(&m〒,3) = #U )
 ││  メソッド呼び出し @t〒.フォーカス設定( )
 ││  メッセージボックス "cmd登録Click”,”〒が未記入です”,制御文字展開=する,アイコン=i
 │└ケース終了
 └end

手続き定義終了

リプライをお待ちしています。

変数&m回数を追加しました - 藤野 2002年03月03日 22時48分

ONnoji さん今晩は、

早速、作りました。
上手くいきました。

住所録追加フォームはこんなところで、終了でしょうか?

全リストを見せていただけませんか? - ONnoji 2002年03月03日 22時59分

藤野さんへ

> 早速、作りました。
> 上手くいきました。
> 住所録追加フォームはこんなところで、終了でしょうか?

現在の住所録追加フォームのイベント処理(.kev)の全リストを見せていただけませんか?

ちゃんと「字下げ」してくださいね。m(__)m
※utx_listを使うと簡単ですよ。(^^v


トップページに戻る あらすじ その1 その2 その3 その4 その5 その6 その7 その8 その9