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

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

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

イベント初心者講座第1弾 (^^ゞ - 藤野 2002年01月22日 23時07分
Re:イベント初心者講座第1弾 (^^ゞ - ONnoji 2002年01月23日 10時58分
作りなおしてみます。 - 藤野 2002年01月23日 21時57分
Re:作りなおしてみます。 - ONnoji 2002年01月25日 12時04分
改良 その1 - 藤野 2002年01月25日 22時32分
Re:改良 その1 - ONnoji 2002年01月25日 23時45分
見事にエラー発生しました (^^ゞ - 藤野 2002年01月26日 18時14分
Re:見事にエラー発生しました (^^ゞ - ONnoji 2002年01月26日 21時25分
今度は成功?? - 藤野 2002年01月27日 00時06分
Re:今度は成功?? - 【多遊】 2002年01月27日 17時00分
思いどうりになりました。 - 藤野 2002年01月27日 17時57分
Re:別のツリーに続きを作りました - ONnoji 2002年01月27日 18時45分
イベント初心者講座第1弾 つづき - ONnoji 2002年01月27日 18時37分
なるほど・・ - 藤野 2002年01月28日 20時52分
これで完成(^o^)丿 でも待てよ・・・ - 藤野 2002年01月29日 19時49分
Re:これで完成(^o^)丿 でも待てよ・・・ - ONnoji 2002年01月29日 21時33分
それでは第2章へ (今整理中です) - 藤野 2002年01月29日 22時08分
Re:呼び出しモードでじゃじゃじゃじゃ〜ん - pokopon 2002年01月29日 22時47分
Re:呼び出しモードでじゃじゃじゃじゃ〜ん - 藤野 2002年01月29日 23時37分


イベント初心者講座第1弾 (^^ゞ - 藤野 2002年01月22日 23時07分

すみません、かってに講座にしてしまいました。私が今作っている簡単シリーズ第一弾です。(イベント勉強用)
写真展用案内状発行システムを作ってみようと思いました。
表は住所。要綱。保存住所。保存要綱と作りました。
フォームはメニューがNULLフォームでコマンドボタンで住所を押すと左クリックイベントで回が置き換わり住所入力フォームが表示されるようにしました。
下記にイベント書いておきますが、これでいいのですか?

なおコマンドボタンには
1 開く   KEV
2 開く   住所.Frm
としています
以下 イベントです
手続き定義開始 コマンドボタン_1::マウス長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
表 "写真展住所録.TBL"
書き出し条件登録 表,条件名="保存写真展住所","保存写真展住所.tbl",追加,ファイル名変更=しない,{[回数],[氏名(名字)],[氏名(名前)],[ふりがな(名字)],[ふりがな(名前)],[氏名],[ふりがな],[連名1],[連名2],[連名3],[性別],[〒],[都道府県],[住所],[住所2],[TEL],[FAX],[Mail],[登録年月日],[更新年月日]}
書き出し 表,条件名="保存写真展住所"
表 "写真展要綱.tbl",モード=専有
書き出し条件登録 表,条件名="保存写真展要綱","保存写真展要綱.tbl",追加,ファイル名変更=しない,{[回数],[会期(開始日)],[曜日(開始)],[時間(開始)],[会期(終日)],[曜日(終日)],[時間(終日)],[会場],[会場住所],[会場電話],[出品者],[会員名1],[会員名2],[会員名3],[会員名4],[会員名5],[会員名6],[会員名7],[会員名8],[会員名9],[会員名10],[会員名11],[会員名12],[コメント・,[コメント・,[事務局住所],[事務局電話]}
書き出し 表,条件名="保存写真展要綱"
終了 表
名札 回訂正 
表 "写真展要綱.tbl",モード=専有
置換 [回数]=[回数]+1
終了 表
表 "写真展住所録.TBL"
置換 [回数]=[回数]+1
終了 表
手続き定義終了
※ 回数は第何回の時に使用するため、ボタンを押すと次回がセットされるようにしてみました。
よろしくお願いします

Re:イベント初心者講座第1弾 (^^ゞ - ONnoji 2002年01月23日 10時58分

藤野さんへ>
> フォームはメニューがNULLフォームでコマンドボタンで住所を押すと
> 左クリックイベントで回が置き換わり住所入力フォームが表示される
> ようにしました。
> 下記にイベント書いておきますが、これでいいのですか?

といわれましても…(^^ゞ
このイベントハンドラはエラーしないで実行できるのでしょうか???

プログラムにはいろいろな結果がありますよ。
(a)エラーで止まる
対策:行番号が表示されるのでどのコマンドがエラーか判るはずです。桐の一括ヘルプを確認する。
(b)実行できるが、思ったとおりの結果が得られない。
(c)実行できるが、その後の操作でエラーが表示される。
(d)実行できるが、処理に時間がかかる

手続き定義開始 コマンドボタン_1::マウス左クリック(…省略…)

 表 "写真展住所録.TBL"
 書き出し条件登録 …省略…
 書き出し 表,条件名="保存写真展住所"

 表 "写真展要綱.tbl",モード=専有
 書き出し条件登録 …省略…
 書き出し 表,条件名="保存写真展要綱"
 終了 表

 名札 回訂正
 表 "写真展要綱.tbl",モード=専有
 置換 [回数]=[回数]+1
 終了 表

 表 "写真展住所録.TBL"
 置換 [回数]=[回数]+1
 終了 表

手続き定義終了

私が気が付いたことを箇条書きにします。参考にしてください。

・"名札 回訂正" は不用です。名札を使わずに構造化手法を使ってください。
・"終了 表" は パラメータを省略したので全ての編集表を保存します。
 "終了 表 編集対象表" で一つ一つ確実に保存終了したほうがいいのではないでしょうか?ヘルプを参照してください。
・コマンドボタン_1というオブジェクト名は意味のあるオブジェクト名のほうがいいと思いました。
 私のコマンドボタンの命名規則は次のようなものです。

  1:接頭辞 "cmd" と標題を連結する
  (例)標題:ヘルプ オブジェクト名:cmdヘルプ
  2:標題が記号文字の場合には接頭辞 "cmd" と任意の名称を用いる
  (例)標題:▼  オブジェクト名:cmdDown
  3:標題が空の場合には接頭辞 "cmd" と任意の名称を用いる
  (例)標題:なし  オブジェクト名:cmdProcedureSort

 ※イベント処理の清書ユーティリティ第1.0版プログラム仕様ノート:utx_list_note.txtより引用
 
・コマンドボタンをクリックして実行するのなら、マウス左クリックイベントの代わりに、
 コマンドボタンの[機能名]手続き実行で[パラメータリスト]で一般手続きを呼び出したほうがいいと思います。
 ピクチャオブジェクト等ならマウス左クリックでもしかたありませんが…
 コマンドボタンではマウス左クリックイベントは止めたほうがいいです。
 コラム1 コマンドボタンの手続き実行 をご一読ください。

 <例>
 標題:書き出し置換
 オブジェクト名:cmd書き出し置換
 機能名      機能パラメータリスト
 [1]表示
 [2]手続き実行 cmd書き出し置換Click
 [3]なし
 [4]なし

 私の一般手続きの命名規則は次のようなものです。

 コマンドボタンから呼び出す一般手続き名はコマンドボタンのオブジェクト名に接尾辞 "Click" を用いる
 (例)cmdヘルプClick

 コマンドボタンから呼び出さない一般手続き名には接頭辞 "prc" を用いる
 (例)prcReform

 ※イベント処理の清書ユーティリティ第1.0版プログラム仕様ノート:utx_list_note.txtより引用

 ・その他のオブジェクトの接頭辞

  テキスト     … txt (例)txt会社名
  ラベル      … lbl (例)lbl会社名
  ピクチャ     … pic (例)pic写真
  オプションボタン … opt (例)opt選択
  チェックボックス … chk (例)chk並替
  ファミリ     … fam (例)famCmdChoice

作りなおしてみます。 - 藤野 2002年01月23日 21時57分

やっぱり。こんなのできるかなから始まったので、あまり整理していませんでした、お手数おかけしました。
 実行すると上手く動いているので、これで良いと錯覚してしまいます。
初めに変に覚えると後で苦労するので、と思い欠点だらけのプログラム
を公開しました。
 これからも、飽きずにご指導お願します。
どうもありがとうございました。

Re:作りなおしてみます。 - ONnoji 2002年01月25日 12時04分

藤野さんへ>

> やっぱり。こんなのできるかなから始まったので、あまり整理していませんでした、お手数おかけしました。

いえいえ、あまり恐縮しないでください。
イベント初心者講座第1弾(イベント勉強用)は名案ですね。
藤野さんと同じようにイベントの勉強を始める人にも参考になると思います。
ですから、第二第三弾と続けていこうではありませんか!
残念ながらこの掲示板をご覧になっている人は少ないと思いますけれど(^^ゞ…だって!かっこう=閑古鳥の意味ですから。

> 実行すると上手く動いているので、これで良いと錯覚してしまいます

前回の例では"終了 表"コマンドを連発していますよね。
これが危ないのです。
おそらく、藤野さんはメニューフォームでコマンドボタンをクリックして前回のプログラムを実行したと思います。
メニューフォームには編集対象表がなかったのではないでしょうか(つまりNULLフォーム)。
この場合には"終了 表"コマンドを実行しても問題は表面化しないのです。

ところが編集対象表があるフォームで前回のプログラムを実行すると、
「KU1066:イベントハンドラでは表示中の表を閉じることはできません」というエラーになるのです。
是非とも、実際に試してみてください。
プログラムは頭で理解するだけでは上達しません!
どちらかというと小さなプログラムをたくさん試して、山ほどエラーを体験することこそ上達への道といえます。

そこで
> "終了 表 編集対象表" で一つ一つ確実に保存終了したほうがいいのではないでしょうか?
とご返事したわけです。
決して意地悪をしたのではありませんよ、そういう意味だったのです。

> 初めに変に覚えると後で苦労するので、と思い欠点だらけのプログラムを公開しました。

コマンドボタンでプログラムを実行する場合には、[機能名]の"手続き実行"を使うのが基本ですよ。
ですから、コマンドボタンで呼び出すのはイベントハンドラではなくて一般手続きになるのです。
通常のフォームではイベントを使うことは皆無ということも覚えてください。
一番よく使うのはコマンドボタン+一般手続きです。
それではイベントはどういう場合に使うのか?という疑問がわくと思いますが…
その答え:イベントは必要なときだけ使うが鉄則です。

初心者の場合には、
イベントを駆使することが凄いプログラム!というふうに誤解されている人が多いのではないかと心配しています。
上級者は必要がなければイベントは使用しないものです。
それではどういうときにイベントが必要になるのだろうか?という疑問がわくと思いますが…
その答え:フォームを使う人にとって親切なフォームを作る場合です。
別のいい方をすれば優れたユーザーインターフェースを構築する場合にイベントを使うのです。
プログラム作りでは、あくまでも使う人の気持ちを中心に考えることが大切です。
ですから、使う人が必要としていない機能を作って自慢したりしてはいけないのです。

桐に組み込まれている機能は優れているので、大抵の場合にはイベントを作る必要はないことも覚えてください。
しかし、桐に元々ある機能だけではやりたい機能が実現できない場合に初めてイベントを検討するというわけです。

もう一度基本に戻って…
コマンドボタンでプログラムを実行する場合には、[機能名]の"手続き実行"を使うのが基本です。
当分の間はこの練習に専念してください。

これは一括処理を実行するのとほとんど同じです。
すでに出来あがっている一括処理を機能ごとの単位に分類して、
それらの機能のひとつ一つを一般手続きに仕上げてそれをコマンドボタンで呼び出す!
な〜んだ簡単だ!と気が付いていただけるとすごく嬉しいのですが…(^^ゞ

もっといろいろ書こうと思いましたが、長文になってしまいましたのでこの辺で終わりにします。

> これからも、飽きずにご指導お願します。

こちらこそ!どうぞよろしくお願いします。(^^ゞ
リプライ(英語:返信)をお待ちしています。

改良 その1 - 藤野 2002年01月25日 22時32分

アドバイスを元に早速、改良しました。
改良点 1・・・処理の前にコメントを付けてみる
    2・・・表番号をふってみる
    3・・・一般手続きにする
    4・・・行番号で先頭行にしてから書き出してみる
としてみました、結果は良好です。
ボタン名は今回準備です、ここでは前回の住所と要綱を保存し
さらに開催回数に1を加え今年の開催回数にします。

下記のようにしてみました。

名札 メイン

手続き定義開始 今回準備()
メッセージボックス "今回の写真展資料を作ります,よろしいですか?"
*住所録を保存する
表 "写真展住所録.TBL",表番号=1
位置指定 行番号=先頭
書き出し条件登録 表,条件名="保存写真展住所","保存写真展住所.tbl",追加,・・・・省略
書き出し 表,条件名="保存写真展住所"
終了 表 1

*写真展要綱を保存する
表 "写真展要綱.tbl",表番号=2
位置指定 行番号=先頭
書き出し条件登録 表,条件名="保存写真展要綱","保存写真展要綱.tbl",追加,・・・・省略
書き出し 表,条件名="保存写真展要綱"
終了 表 2

*要綱及び住所録の開催回数を変更する
表 "写真展要綱.tbl",表番号=3
置換 [回数]=[回数]+1
終了 表 3
表 "写真展住所録.TBL",表番号=4
置換 [回数]=[回数]+1
終了 表 4
手続き定義終了

いかがでしょうか?、アドバイスよろしくお願いします

今、住所WRMの設計に着手しました、出来たら初心者講座第2弾で
書き込みます。でもまず第一歩のこの処理を完成させなければ・・・。
一般手続きはなるほど割と簡単に出来ました。(処理させることが
簡単すぎるせいもありますよね (^^ゞ)

Re:改良 その1 - ONnoji 2002年01月25日 23時45分

藤野さんへ

> ところが編集対象表があるフォームで前回のプログラムを実行すると、
> 「KU1066:イベントハンドラでは表示中の表を閉じることはできません」というエラーになるのです。
> 是非とも、実際に試してみてください。

と申し上げましたが、実際に試していただいてないようですね。(T_T)
"〜するとエラーになる"という情報は聞いて理解したつもりになってはいけません。
どれどれ本当にエラーになるのかな…試してみよう!という手間を惜しまず挑戦する姿勢が大切です。
ちょっと残念な気分です。(^^ゞ

おそらく[今回準備]コマンドボタンが配置してあるフォームはNULLフォームのままですね。
このフォームのフォームの属性で[編集対象表]タブの[参照表]と[編集対象表]に
"写真展住所録.TBL"と"写真展住所録.TBL"以外の表(なんでもよい)を指定して実行してみてください。
今回は必ず試してください。

そして、どういう結果になったかをリプライしてください。

> 改良点 1・・・処理の前にコメントを付けてみる
>     2・・・表番号をふってみる
>     3・・・一般手続きにする
>     4・・・行番号で先頭行にしてから書き出してみる
> としてみました、結果は良好です。

位置指定 行番号=先頭 はこの場合には不用です。
書き出しは必ずその表の先頭行(絞り込んであればその先頭行)から書き出されます。

見事にエラー発生しました (^^ゞ - 藤野 2002年01月26日 18時14分

昨日はあせっていたので実験できませんでした。
 早速、実験開始
@ 編集対象表を保存写真展TBLに設定すると
  イベントハンドラー処理の実行中にエラーが発生しました
  KU1176 指定の表番号1は使用中です
A 編集対象表を住所TBL(ほかのもの)にすると
  
  KU1066:イベントハンドラでは表示中の表を閉じることは
  できません
となりました。
なるほど、NULLフォームで実行したのでまったく気がつきませんでした

とすると。コレを回避する方法は何かと言うことになりますね。
実は別の処理でもNULLフォームを使って作ってしまったものもあるのですが・・・・。

解決方法はどうするのでしょうか?

Re:見事にエラー発生しました (^^ゞ - ONnoji 2002年01月26日 21時25分

藤野さんへ

> 昨日はあせっていたので実験できませんでした。
>  早速、実験開始
> @ 編集対象表を保存写真展TBLに設定すると
>   イベントハンドラー処理の実行中にエラーが発生しました
>   KU1176 指定の表番号1は使用中です
> A 編集対象表を住所TBL(ほかのもの)にすると
>   KU1066:イベントハンドラでは表示中の表を閉じることは
>   できません
> となりました。
> なるほど、NULLフォームで実行したのでまったく気がつきませんでした
> とすると。コレを回避する方法は何かと言うことになりますね。
> 実は別の処理でもNULLフォームを使って作ってしまったものもあるので
> すが・・・・。
> 解決方法はどうするのでしょうか?

苦戦していますね。(^^ゞ
ヒントを参考にしてもう一度チャレンジしてください。

・表コマンドのこと
 表番号 = <整数>オプション
 開いた表に割り当てる番号を、整数で指定します(計算式)。
 指定できる番号は、1 〜 40 です。すでに開かれている表の表番号を指定してはいけません。
 このパラメータを省略した場合は、使用されていない表番号の中で、もっとも小さい番号を割り当てます。

基本:表を表コマンドで開く時、表番号を指定してはいけない。
理由:すでに開いている表の番号を指定してしまう可能性がある。
   「KU1176:指定の表番号 1 は使用中です」というエラーになる。

解決策:表番号 = <整数>オプションを省略する
    表番号を指定しなければ桐が自動的に表を開いて使用されていない表番号の中で、もっとも小さい番号を割り当てます。

・終了 表 コマンドのこと
 * すべての表を閉じます。
 <表番号> ,… 指定した表番号の表を閉じます(定数または変数)。複数の表を閉じる場合は、半角または全角のコンマで区切ります。
 編集対象表 編集対象表の表を閉じます。

基本:"終了 表"または"終了 表 *"は使ってはいけない。表番号も使わない。
理由:フォームの編集対象表を閉じるわけにはいかないので
   「KU1066:イベントハンドラでは表示中の表を閉じることはできません」というエラーになる。

解決策:"編集対象表"オプションを使う。
    注意:本当に"編集対象表"と書きます。"○○○○.tbl"と書くとエラーです。
    (例)終了 表 編集対象表

すぐにギブアップしないでくださいね。(^^ゞ
もしも、どうしても降参の場合でも一般手続きの内容を見せて下さい。

成功を祈ります。

今度は成功?? - 藤野 2002年01月27日 00時06分

アドバイスのように書換えてみたらフォームに編集対象表が
設定されていても、エラーも無くできました。

下記に手続き書きます

名札 メイン
変数宣言 局所 整数{&確認}

手続き定義開始 今回準備()
確認 "今回の写真展資料を作ります,よろしいですか?",&確認


*住所録を保存する
表 "写真展住所録.TBL"
書き出し条件登録 表,条件名="保存写真展住所","保存写真展住所.tbl",追加,ファイル名変更=しない,{[回数],[氏名(名字)],[氏名(名前)],[ふりがな(名字)],[ふりがな(名前)],[氏名],[ふりがな],[連名1],[連名2],[連名3],[性別],[〒],[都道府県],[住所],[住所2],[TEL],[FAX],[Mail],[登録年月日],[更新年月日]}
書き出し 表,条件名="保存写真展住所"
終了 表 編集対象表

*写真展要綱を保存する
表 "写真展要綱.tbl"
位置指定 行番号=先頭
書き出し条件登録 表,条件名="保存写真展要綱","保存写真展要綱.tbl",追加,ファイル名変更=しない,{[回数],[会期(開始日)],[曜日(開始)],[時間(開始)],[会期(終日)],[曜日(終日)],[時間(終日)],[会場],[会場住所],[会場電話],[出品者],[会員名1],[会員名2],[会員名3],[会員名4],[会員名5],[会員名6],[会員名7],[会員名8],[会員名9],[会員名10],[会員名11],[会員名12],[コメント・,[コメント・,[事務局住所],[事務局電話]}
書き出し 表,条件名="保存写真展要綱"
終了 表 編集対象表

*要綱及び住所録の開催回数を変更する
表 "写真展要綱.tbl"
置換 [回数]=[回数]+1
終了 表 編集対象表
表 "写真展住所録.TBL"
置換 [回数]=[回数]+1
終了 表 編集対象表
手続き定義終了

このようにしてみましたがいかがでしょうか?
もう1つ確認をしようしてみましたがYESの時は当然OK
ですがNOの時も手続きが実行されてしまいます。
NOを押されたとき中止したいのですが。
変数宣言 {&中止}を宣言して
条件(&確認=0)
代入 &中止=1
としたらこのようになったのですが?
こんなときケース分を使うのですかそれとも手続きで
中止()
・・・
・・・
と書くようなのでしょうか?

Re:今度は成功?? - 【多遊】 2002年01月27日 17時00分

藤野さんこんにちは。【多遊】と申します。
よろしくお願いいたします。

お話の途中に割り込みで恐縮ですが、

>もう1つ確認をしようしてみましたがYESの時は当然OK
>ですがNOの時も手続きが実行されてしまいます。
>NOを押されたとき中止したいのですが。
>変数宣言 {&中止}を宣言して
>条件(&確認=0)
>代入 &中止=1


名札の下4行目の確認を中止させる方法でよろしいでしょうか?
特に
>変数宣言 {&中止}を宣言して
>条件(&確認=0)
>代入 &中止=1
など変数宣言しなくても
条件(&確認<>1)手続き終了
これで、手続きから戻れます。お試しください。

参考までに、(&確認<>1)と(&確認=0)は同じような意味ですが
「0」の時だけ戻るより、「1」以外は戻るの方が安全ですね
不意に間違ったキー操作を行うこともありますので、
進む方が本人の意思が入ってる作り方です。

思いどうりになりました。 - 藤野 2002年01月27日 17時57分

多遊さんどうもありがとうございます。
条件(&確認<>1)手続き終了
これで初めのメニューに戻りました。
&確認の書き方でもいろいろあるのですね。
これでまた桐が面白くなりました。
 一括、イベントを修行しようと思って始めたものですから
プログラミングの経験もほとんど無いので、皆さんにお世話に
なります、今後ともよろしくおねがいします。
 多遊さんのホームページにはほとんど毎日行っています、
イベントをダウンロードしたりBBSをのぞいたりしています。
また井戸端BBSでも以前お世話になりました、其のときのものは
いま上手くいって会社で活躍しています(自動で月を変える方法)
 今後ともよろしくお願い申し上げます。

Re:別のツリーに続きを作りました - ONnoji 2002年01月27日 18時45分

藤野さん>
【多遊】さん>

> 多遊さんどうもありがとうございます。
> 条件(&確認<>1)手続き終了
> これで初めのメニューに戻りました。

【多遊】さん、参加ありがとうございます。
> 条件(&確認<>1)手続き終了
ところで条件文で手続きから脱出するのは悪いことではありませんが(^^ゞ、
今回は構造化プログラミングで講義したいと思っています。
別のツリーに続きを作りましたので、よろしくお願いいたします。m(__)m

イベント初心者講座第1弾 つづき - ONnoji 2002年01月27日 18時37分

藤野さんへ

> アドバイスのように書換えてみたらファームに編集対象表が
> 設定されていても、エラーも無くできました。

名札 メイン
変数宣言 局所 整数{&確認}

手続き定義開始 今回準備()
確認 "今回の写真展資料を作ります,よろしいですか?",&確認

*住所録を保存する
表 "写真展住所録.TBL"
書き出し条件登録 表,…
書き出し 表,条件名="保存写真展住所"
終了 表 編集対象表

*写真展要綱を保存する
表 "写真展要綱.tbl"
位置指定 行番号=先頭 /* この行は不用です */
書き出し条件登録 表,…
書き出し 表,条件名="保存写真展要綱"
終了 表 編集対象表

*要綱及び住所録の開催回数を変更する
表 "写真展要綱.tbl"
置換 [回数]=[回数]+1
終了 表 編集対象表
表 "写真展住所録.TBL"
置換 [回数]=[回数]+1
終了 表 編集対象表
手続き定義終了

> このようにしてみましたがいかがでしょうか?
> もう1つ確認をしようしてみましたがYESの時は当然OK
> ですがNOの時も手続きが実行されてしまいます。
> NOを押されたとき中止したいのですが。
> 変数宣言 {&中止}を宣言して
> 条件(&確認=0)
> 代入 &中止=1
> としたらこのようになったのですが?
> こんなときケース分を使うのですかそれとも手続きで中止()
> と書くようなのでしょうか?

表のオープンとクローズに関しては一応卒業ですね。
他にもバリエーションがあるのですが、今のところはこれだけ知っていれば十分です。

次へ進む前にちょっとお願いです。

・コマンドボタンのオブジェクト名の "今回準備" を "cmd今回準備" に変更してください。

標題:今回準備
オブジェクト名:cmd今回準備     <------(1) 変更してください
機能名     機能パラメータリスト
[1]表示
[2]手続き実行 cmd今回準備Click  <------(2) 変更してください
[3]なし
[4]なし

・一般手続き名の "今回準備()" を "cmd今回準備Click()" に変更してください。

このように少し名前の付け方を工夫するとプログラムが読みやすくなります。
これは必ず実行してください。
※cmd はコマンドボタンの意味です。一括処理のことではありません。
※Click はクリックの意味です。
今後は必ずこのように名前を付けてください。
こうゆう習慣は必ずプログラムの上達への助けになるはずです。必ず習慣にしてください。

確認コマンドに変数を指定したので、[OK][キャンセル]のふたつのボタンが現れましたね。
[OK]の時に実行して、[キャンセル]の時に何もしない・・・というわけですね。

・確認コマンドのこと
 メッセージボックスを閉じるときにクリックしたボタン番号を取得する変数名を指定します。
 変数のデータ型は、長整数、数値、通貨、実数でもかまいません。
 このパラメータを指定すると[OK]ボタンと[キャンセル]ボタンが配置されます。
 省略すると[OK]ボタンだけが配置されます。
 <変数名> には、つぎのボタン番号が代入されます。
  戻り値 ボタン番号
  1    [OK]
  0   [キャンセル]

ならば、if…else…end を使うといいですよ。

手続き定義開始 cmd今回準備Click()  <------(3) 手続き名を変更してください
変数宣言 自動,数値{&ans}
変数宣言 自動,文字列{&msg}
&msg = "今回の写真展資料を作ります,よろしいですか?"

確認 &msg,&ans

if ( &ans )
 *住所録を保存する
 表 "写真展住所録.TBL"
 書き出し条件登録 表,…
 書き出し 表,条件名="保存写真展住所"
 終了 表 編集対象表

 *写真展要綱を保存する
 表 "写真展要綱.tbl"
 書き出し条件登録 表,…
 書き出し 表,条件名="保存写真展要綱"
 終了 表 編集対象表

 *要綱及び住所録の開催回数を変更する
 表 "写真展要綱.tbl"
 置換 [回数]=[回数]+1
 終了 表 編集対象表

 表 "写真展住所録.TBL"
 置換 [回数]=[回数]+1
 終了 表 編集対象表
 &msg = "完了しました"
 確認 &msg
else
 &msg = "キャンセルしました"
 確認 &msg
end

手続き定義終了

アレ?、答を書いちゃいました!
これは見本ですよ〜。
コピー貼りつけしないで、自力で作ってください。

・整数型の変数のこと
 整数型の変数は使わないようにしてください。代わりに数値型を使ってください。
 整数型では扱える数値の範囲が狭いので思わぬ失敗の原因になります。

・自動変数のこと
 自動変数は使い捨て紙コップのようなものです。手続きが終了すると消えてしまいます。
 局所変数は陶器のカップのようなものです。
 今回は自動変数を使ってください。

・変数名のこと
 &ans は Answer:返事 の意味です。ファイナルアンサー?と同じ。(^^ゞ
 &msg は Message:メッセージ の意味です。これはもう日本語ですよね。
 私は変数名に漢字を使うことに慣れていないのでこのような調子ですが、漢字でもOKですよ。

ところで、日本語入力はMSIME98?どれですか?
入力モードはローマ時入力?、かな入力?どちらですか?

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

なるほど・・ - 藤野 2002年01月28日 20時52分

早速プログラムを書き直して見ました、見事に動きました、メツセージ
が表示されるたびに なるほど・なるほど・・・何故 の連続でした。

コーピー&ペーストはしません自分でちゃんと入力しました。
ミスは全角、半角のミスだけでした。答えがあるのに ^_^;
質問です
 @ 確認 &msg,&ans ですが
    解説には 確認 文字列 変数名
     上記では&msgは文字列で変数宣言してるので""でくくらな
     くてもいいのですか?
 A if(&ans)
解説ではif(条件式)・・・ のはずですが
   そうすするとif(&ans=1)となると思うのですが
   この辺はどうでしょうか?

入力モードはローマ字ですFEPはIME2000です。

それでは、よろしくお願いします。

Re:なるほど・・ - ONnoji 2002年01月28日 22時41分

藤野さんへ

> 早速プログラムを書き直して見ました、見事に動きました、メツセージ
> が表示されるたびに なるほど・なるほど・・・何故 の連続でした。

確認コマンドの応答に対して、[OK]なら実行するわけですね。
[キャンセル]ならどうするか?

考え方はいろいろありますが、このような二者択一の場合には構造化コーディングでは else で処理します。
構造化コーディングでは強制的に手続きを終わらせようとは考えないのです。
むやみに脱出すると「ひとつの入り口ひとつの出口」という原則から逸脱します(※お手元の資料を確認してください)。

これは武術のようなものでして、 else の場合は受け流すということなのです。
if ではまともに応接します、しかし else で受け流します。
一見すると別々のことしているようですが、この流れ(シーケンス)は end を過ぎれば合流します。
構造化コーディングでは if…else…end の範囲では分流しますが、
if…else…endに突入する前も一本の流れであり、この範囲をすぎれば合流し、再び一本の流れになるのです。
途中で分流することがあっても、流れは最初から最後まで一本であること…これが構造化コーディングです。

> コーピー&ペーストはしません自分でちゃんと入力しました。

すいませんでした、お疲れ様です。(^^ゞ

> ミスは全角、半角のミスだけでした。答えがあるのに ^_^;
> 入力モードはローマ字ですFEPはIME2000です。

おそらく、全角と半角の入力に苦労するのではと予想していました。(^^ゞ
半角文字を入力する場合には、[漢字]キーを押してIMEをon/offすると便利ですよ。

> 質問です
>  @ 確認 &msg,&ans ですが
>     解説には 確認 文字列 変数名
>      上記では&msgは文字列で変数宣言してるので""でくくらな
>      くてもいいのですか?

二重引用符(")で前後を囲む必要があるのは、文字列を指定する場合です。

例えば、&msg = "今回の写真展資料を作ります,よろしいですか?" の場合では、
&変数名 = 文字列 ということですね。
この場合には 文字列 の前後を二重引用符(")で前後を囲む必要があるのです。
しかし、変数 &msg の中身を見ると二重引用符(")は入っていません。

> 上記では&msgは文字列で変数宣言してるので""でくくらな
> くてもいいのですか?

変数のデータ型が文字列であったとしても、変数には違いありません(変数は文字列ではありません)。
したがって、&msg の前後を二重引用符(")で前後を囲んではいけないのです。

>  A if(&ans)
> 解説ではif(条件式)・・・ のはずですが
>    そうするとif(&ans=1)となると思うのですが
>    この辺はどうでしょうか?

おっしゃるとおりです、if (&ans=1) とするのがもっとも素直な方法です。
これも正解です。
ところで、if (&ans) も正解なのです。
ここで説明すると長くなりますので、これに関しては「コラム3 論理値のこと」をご一読下さい。

いい調子です!。だんだんプログラムらしくなってきましたね。(^^ゞ
リプライをお待ちしています。

これで完成(^o^)丿 でも待てよ・・・ - 藤野 2002年01月29日 19時49分

上から下まで流れなおかつシンプルで処理が分かりやすいと
言うことですね。了解しました。

第一章完成 と思ったときふと考えました、確か桐は保存終了
するたび、ファイルが大きくなると聞いたことがあります。
だとすれば、最後の行に

表整理 か 圧縮を入れる必要があるよな気がしてきました。

これはどうでしょうか?

Re:これで完成(^o^)丿 でも待てよ・・・ - ONnoji 2002年01月29日 21時33分

藤野さんへ

> 上から下まで流れなおかつシンプルで処理が分かりやすいと
> 言うことですね。了解しました。

以前ご紹介した構造化プログラミングの書籍は現在入手可能になりました。
ただし、ネット注文か書店取り寄せでないと入手できません。
※昨年の4月ごろに増刷したようです。

ストラクチャード・プログラミング入門〔改訂2版〕 
出版社名 :オーム社
シリーズ名 :図解コンピュータシリーズ
出版年月 :1988年 01月 出版
サイズ :258 A5
発行形態 :単行本
ISBNコード :4274074072
価格 :\2700
著者名:國友 義久

ネット検索のデータを貼り付けましたが、
定価は少し違っていると思います。

pokoponさん>いくらでしたか?、今自宅なので判りません。

> 第一章完成 と思ったときふと考えました、確か桐は保存終了
> するたび、ファイルが大きくなると聞いたことがあります。
> だとすれば、最後の行に
> 表整理 か 圧縮を入れる必要があるよな気がしてきました。

書き出しコマンドで出力した表は既に表整理した状態になります。
この場合には関係ありません。

該当するのは、表に行を追加でなく、行をやたらと挿入(挿入で読みこみ)した場合などです。
または、空っぽの項目へ文字をたくさん入力(または置換)した場合などです。
※こうなることをデータページの分割が起きるといいます。
表編集が目に見えて遅く感じる場合には表整理してみるといいでしょう。
普通に行を追加している場合などでは、表整理する必要はほとんどありません。

> これはどうでしょうか?

ですから、表整理も圧縮もしなくていいです。

表整理に関してはかなり誤解があるようです。

・通常は余白率10%でします。これで十分です。

・フロッピーなどにコピーする場合には余白率0%でします。ただし、余白率0%の表は編集すると再び大きくなります。
 アッ!そうか〜。いつも余白率0%で表整理する人なら「ファイルが大きくなる」と感じるはずですね。
 これは悪循環ですね〜最悪の状況です。こうならないように通常は余白率10%で表整理するのが妥当です。

・20〜50%は併合:置換を行う場合です。50%の方が10%より処理時間が早くなることがあります。

ただ…稀に毎月、全行削除して一度も表整理したことのない人がいますね。
削除行が何千何万もあって、削除されていない行が数行なんて笑えない状況の場合があります。
こういうのを「ファイルが大きくなる」というならそうですけれど…きっと違いますよね。

DOS時代にはハードディスクの容量はメガ単位でしたが、いまやギガ単位のご時勢です。
こういうことに神経を使うことには感心できません。(^^ゞ。

さあ!第二弾出発しましょう。
第二弾は新規投稿でお願いします。

それでは第2章へ (今整理中です) - 藤野 2002年01月29日 22時08分

本 早速主文してきました。以前は絶版ですとか言われたのに
良かったです。もしかしてPokopokさんは入手済みですか?
 
表整理は無視していきます。これで第一章完成とします。
明日、第二章書き込みます。

今度はフオームです。

よろしくお願いします。

Re:呼び出しモードでじゃじゃじゃじゃ〜ん - pokopon 2002年01月29日 22時47分

> pokoponさん>いくらでしたか?、今自宅なので判りません。

と呼ばれて出てきました。藤野さん、お久しぶりです。
値段ですが、3,300円でした!!
改定2版第9刷です。多分、今はこのタイプかと・・・。

それにしても、このスレッド、長いですね〜。
ず〜っとROMしていました。まるで、公開授業を受けているみたいでした。

ONnojiさんが明解に解説されているので、私が出る幕はなさそうですね。(^^ゞ

藤野さん、フォーム、頑張って下さい。マスターすれば、桐の捕らえ方というか印象が一変しますよ。

Re:呼び出しモードでじゃじゃじゃじゃ〜ん - 藤野 2002年01月29日 23時37分

Pokoponさんお久しぶりです。
"桐が好き"なのでならばプログラムも覚えよーと思っています。
あまり出来のいい生徒ではないので、ONnjiさんが大変かもしれません
 今まで、自己流に桐を扱ってきました、なんせ、コマンドを一行
一行順番に打ち込むと、思いどうりに動くもので(~_~;)
間違いに気がつかないことがあります。(動く=正確なんだという
思い込みでした。)これではいけないとおもい書きこみしたわけです。
 一からの出発なので、おおいに勉強になります、本も読みながら勉強しようと思います。
よろしくお願いします。


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