過去の桐井戸端BBS (桐ver.8)
12936 共通のイベント処理を一般手続きとして参照処理したい 佐藤 靖 2001/09/04-19:34
日付の入力をする時に、入力の省力化のため共通のイベント処理をさせたいと思っています。
共通の同じ処理ですから、個々のフォームおよび個々のテキストボックス毎に記述するよりは、一般手続きとして1個記述して、
それを 手続き実行コマンドで参照処理しようと思いましたが、できませんでした。

マニュアルをよく見ると、「&編集文字列」はそのハンドラ内だけで使用できる引数ということが書いてあります。

仕方がないので、今の所は同じ処理内容をコピーして各テキストボックスのイベントとして何度も記述していますが、何か良い方法はありませんか?
コマンドの内容を修正したい場合など非常に不便です。

< 処理したい共通の日付入力イベント内容>

・入力文字から"-","/"を取り除く。
・入力が6桁だったら頭の2桁から判断して、"H" "S"を加える。
・入力が4桁だったら頭へ"H13"加える。
・入力が2桁だったら年齢と判断し、年数前の日付にする。
・最終的に"-"を加えて"S99-99-99"を返す。


12937 複数フォームで記述を共用したい場合 悲しげ 2001/09/04-21:27
記事番号12936へのコメント
どもっ、佐藤 靖さん
ひとつの案です。

イベント自体は個々のフォームと、その固有のオブジェクト名に応じたイベントハンドラ(手続き定義)で実行させるしかないと思います。
ただし、イベントハンドラ内の記述自体を共用することは、やり方次第ではかなりのところまで可能だと思います。

汎用的な処理を、例えば"汎用.cmd"の中に記述しておきます。
*---------------- 汎用.cmd --------------------------
手続き定義開始 仮称日付入力()
 ・入力文字から"-","/"を取り除く。
 ・入力が6桁だったら頭の2桁から判断して、"H" "S"を加える。
 ・入力が4桁だったら頭へ"H13"加える。
 ・入力が2桁だったら年齢と判断し、年数前の日付にする。
 ・最終的に"-"を加えて"S99-99-99"を返す。 
   ・・・のような処理
手続き定義終了
*-----------------------------------------------------

そして、各フォーム対応のkevのメイン部で

 ライブラリ "汎用.cmd"

としておけば、例えば「仮称日付入力」手続きをあたかも内部記述の
手続き実行のようにして呼び出すことができます。

&編集文字列の値を他ハンドラでも利用したければ、例えば
  &STR=&編集文字列
とか
  手続き実行 仮称日付入力(&編集文字列)
のように受け渡すことも可能かと思います(ちと自信なし)。(^^;)
ただしその場合には、受け側では
  手続き定義開始 仮称日付入力(文字列 &文字列受け用)
のようにしておく必要があります。



でも、私自身は、こと日付入力に関しては次のようなやり方をさせています。
それは日付入力に関するwfmとkevの汎用的なセットを別途用意しておいて、
他のフォームからは、そのwfmを共同して「フォーム呼出し」し、
そのwfm(kev)で得た日付の値を呼出し元フォームに返すと云う。
12938 Re:一般手続きとイベント引数の参照 ONnoji 2001/09/04-22:00
記事番号12936へのコメント

> 日付の入力をする時に、入力の省力化のため共通のイベント処理をさせ
>たいと思っています。
> 共通の同じ処理ですから、個々のフォームおよび個々のテキストボックス
>毎に記述するよりは、一般手続きとして1個記述して、それを 手続き実行
>コマンドで参照処理しようと思いましたが、できませんでした。
> マニュアルをよく見ると、「&編集文字列」はそのハンドラ内だけで使用
>できる引数ということが書いてあります。

佐藤 靖さん、こんばんは。

次のように&編集文字列を参照渡しで一般手続きを呼び出せば良いと思います。

以下は入力後イベントの例ですが、入力前イベントでも同様です。

(例)
手続き定義開始 txtObj::入力後(参照 文字列 &編集文字列,・・・・)
  :
 手続き実行 prc共通(&編集文字列)
  :
手続き定義終了

手続き定義開始 prc共通(参照 文字列 &string)
  :
 &string = "入力後イベントを実行しました"
  :
手続き定義終了

外していたらごめんなさい。
12948 Re:一般手続きとイベント引数の参照 佐藤 靖 2001/09/06-00:35
記事番号12938へのコメント
悲しげ さん、ONnoji さん 早速のアドバイスありがとうございました。

> 各フォーム対応のkevのメイン部で

> ライブラリ "汎用.cmd"

>としておけば、例えば「仮称日付入力」手続きをあたかも内部記述の
>手続き実行のようにして呼び出すことができます。

>&編集文字列の値を他ハンドラでも利用したければ、例えば
>  手続き実行 仮称日付入力(&編集文字列)
>のように受け渡すことも可能かと思います
>ただしその場合には、受け側では
>  手続き定義開始 仮称日付入力(文字列 &文字列受け用)
>のようにしておく必要があります。

「ライブラリ」コマンドというのがあったんですネ。

具体的な記述手順を示して頂きましたので、参考にしてやってみたところ思うようにできたので喜んでいます。
コマンドの記述行数がかなり減って見やすくなりました。

思った様に動いているので、問題ではありませんが、
コマンドの機能というか仕組みというのか、イベント発生によって
参照される &編集文字列 と &入力継続 が別の変数名で手続き実行コマンドへ渡され、
処理された後に、その別の変数名から元の &編集文字列や &入力継続へ値を代入して返している訳では無いのに、
どうして動くのかチョット不思議です。
(コマンドの理屈が理解できてません。)


12950 Re:一般手続きとイベント引数の参照 ONnoji 2001/09/06-10:08
記事番号12948へのコメント
>コマンドの機能というか仕組みというのか、イベント発生によって
>参照される &編集文字列 と &入力継続 が別の変数名で手続き実行
>コマンドへ渡され、処理された後に、その別の変数名から元の &編集
>文字列や &入力継続へ値を代入して返している訳では無いのに、
>どうして動くのかチョット不思議です。

佐藤 靖さん、こんにちは。

引数の参照渡しについて少し説明させていただきます。
参考になればと思います。
なお、参照渡しはイベントハンドラに限らず、
一般手続きにも適用されます。

(例)
 :
手続き実行 prc共通(&編集文字列)
 :

手続き定義開始 prc共通(参照 文字列 &string)
 *上の部分はニュアンスとして、
 *変数宣言 自動,文字列{&string=&編集文字列}と同等です。

 *以下の代入文を実行するとの一般手続きが終了するタイミングで
 *&編集文字列 へ &string の内容を渡します(代入します)。
 &string = "受取った値を書き換えました"
手続き定義終了

<参照渡し>
参照渡しの場合には変数名を同じにする必要はありません(だから便利!)。
(同じでも構いませんが、別々に扱われます)
手続きが終了するタイミングで呼び出し側の変数に値が返されます。

<値渡し>
参照を指定しないと、
値渡しになるので呼び出し側の変数に値は返されません。

<参考になる過去ログ>
11363 手続き定義開始の中に書いてある引数がよく解りません
http://www.fuku3.com/~habata/kbbs/kakov8/11363.htm
12954 Re:一般手続きとイベント引数の参照 ONnoji 2001/09/06-11:48
記事番号12950へのコメント

文章が下手で誤解があるといけないので少し訂正します。

><参照渡し>
>参照渡しの場合には変数名を同じにする必要はありません(だから便利!)。
参照渡しに限りません。値渡しでも変数名を同じにする必要はありません。
変数名が違っていてもよい所がとても便利なんです。

>(同じでも構いませんが、別々に扱われます)
同名の変数にしてもまったく問題ありません。
参照渡しの場合は、呼び出し側の変数に値が返されます。
値渡しの場合は、お互いに干渉しません。

<蛇足>
コンピュータ用語の、
[参照渡し]は call by reference または pass by reference
[値渡し]は call by value または pass by value
だそうです。

日本名もいろいろ有りまして、
[参照呼び]と[参照渡し]は同じです。
[値呼び]と[値渡し]は同じです。
他の名称もあったような...
12969 Re:参照渡し理解しました。お礼 佐藤 靖 2001/09/07-22:02
記事番号12954へのコメント
ONnojiさん 詳しい解説ありがとうございました。

過去ログの11363も見させて頂きました。

おかげさまで引数の扱いについて勉強させられました。
マニュアルでは理解し難い内容でしたが、詳しい解説に感謝しています。
この辺の桐8の解説本があればいいのですが、もっぱらこのBBSのおかげで、
素人の私でも見よう見まねでコマンド処理の恩恵にあずかれる状態です。

いつも質問ばかりで申し訳ございませんが、またの機会にもよろしくお願いします。
まずはお礼まで。

戻る