自作イベントの発生方法

解決


AO  2002-07-03 19:45:13  No: 1061

例えばForm1にあるButton1が押下された時
Button1.OnClickが発生して
Form1.Button1Clickが実行されますが、
そのForm1.Button1Click内でもイベントを発生させて
(例えばOnAAA)
何か処理を行いたいのですが(例えばForm1.AAA)、
どのような方法をとればよいのでしょうか?
そのようなことが可能な場合Form1.AAAがコールされるのは
Form1.Button1Clickの処理が終わった後になるのでしょうか?
以上、よろしくお願い致します。


たかみちえ  URL  2002-07-04 01:47:16  No: 1062

まず、イベントは
procedure TForm1.Button1Click(Sender:TObject);
みたいになってるのは、わかりますよね?

  そして、他のコントロールのイベントも、
みんな同じように、pasファイル内に手続き(procedure)として書きこまれます。

  なので、たとえば、
Button1のClickイベント(Button1Click)で、
MenuItem1のClickイベント(MenuItem1Click)を実行させるには、
Button1Clickの関数のなかで、
  MenuItem1Click(Sender);というふうに、手続きを呼べばいいんです。

  あとは、Senderを、手続きが引数として必要としているので、
同じようにSenderを送っておきます。
SenderはTObject型の変数(普通イベントを発生させたオブジェクト本体)なので、
Self、nilなど、なんでもいいです。

> そのようなことが可能な場合Form1.AAAがコールされるのは
> Form1.Button1Clickの処理が終わった後になるのでしょうか?
  これは手続きをどんなタイミングで呼んだかによります。

  イベントとして設定したものも、自分でprocedureと書いたものも、
usesで指定したユニットに書かれているものも、
どれも手続きです。
  覚えておくといいですよ。
  
  あと、手続きのことについては、
ヘルプで"手続き"とでもいれて調べてみてください。


AO  2002-07-04 19:29:47  No: 1063

たかみちえさんご回答ありがとうございました。
すいません。
説明不足でした。
再度説明させてください。
例えばButon1Clickの中でForm1のメンバー変数aの値を
チェックしているとします。
その値がある値になったら自作のイベントを発生させたいのです
(例えばOnAChange)。
そしてそのイベントの処理をForm1.AChangeとがで処理したいのですが、
どのような処理を書けばよいでしょうか?
そのようなことが可能な場合Form1.AChangeがコールされるのは
Form1.Button1Clickの処理が終わった後になるのでしょうか?
以上、よろしくお願い致します。


たかみちえ  URL  2002-07-05 02:41:51  No: 1064

要はどっちもおなじです。

  手続きを新しく作って、それをif文の中とかで実行します。
あ、でもtypeのところに手続きを追加することをお忘れなく。

ヘルプでは…。"Delphi プログラマーズガイド"あたりかなぁ。

  ちなみに、へんすうがTStringsなどだったら、
たしか、OnChangeイベントを設定することができたはずです。


おせっかい者  2002-07-05 09:59:16  No: 1065

何で面倒な「自作のイベント」にこだわるのでしょうか?
手続きや関数の呼び出しではダメなんですか?

どうしても自前の変数のOnChangeイベントを発生させたいのなら、
TEdit(VisibleプロパティをFalseにして隠す)のTextプロパティを
変数として使う裏技もありますよ。(^^ゞ
これなら簡単に実現可能で、見えないEditのTextを変えれば OnChangeイベントが発生します。
OnChangeイベントは、Application.ProcessMessagesを入れておけば、その時点で処理されるでしょう。


にしの  2002-07-05 11:25:36  No: 1066

AOさんがやりたいこととはずれるかもしれませんが、

> 何で面倒な「自作のイベント」にこだわるのでしょうか?
> 手続きや関数の呼び出しではダメなんですか?

リポジトリに登録したいのなら、イベントにする必要があります。
通常は必要ないのでしょうが、たとえばいつも同じ仕様のフォームを作りたいのなら、リポジトリに登録しておけば、新規作成で使えます。


AO  2002-07-05 18:46:04  No: 1067

みなさま、ご意見多数ありがとうございました。
結論からいえばSendMessageとPostMessageを使用すれば
私のやりたいことはほぼ解決できました。
1.自作イベントにこだわる理由(手続きや関数でだめな理由)。
    その手続きの処理時間は短い必要があるので、ある判定をしたら
    ポンポン他に処理を渡したい
2.TstringでOnChange
    これはいけそうですね。またテクニックとして覚えておきます。
3.TEditのOnChange
    CheckBoxを使っても同じようなことができるのは偶然プログラミング中に
    発見したのですがでもなんか個人的に気分がよくないのでやめてました。

お忙しいところみなさんありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加