• ベストアンサー

C++ Builder6のイベントハンドラーの参考書

C++Builder6の初心者です。 イベントハンドラーの使い方が分かりません。 確かに、例題を挙げたものが出版されておりますが 記述を読んでも何故そうなるのか理解できません。 初心者にでも参考になる本等がありましたら教えて 頂きたくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#126727
noname#126727
回答No.2

私もC++Builderのプログラミングで,イベントハンドラがそのコンポーネントを含むクラスの中で記述されているのに,どうしてコンポーネントにイベントが伝わるのだろう?と以前から疑問に感じていました。 周りに詳しい方がいないし,C++Builderの書籍の書籍って数が少なく困っていました。 いろいろ探しているうちに「C++BuilderはDelphiのC++版だ」,「VCLはDelphiで作られている」ということをネットや雑誌で見かけました。 それでDelphiの書籍を当たってみました。 書名:Delphi コンポーネント設計&開発 著者:中村拓男 発行:インプレス ISBN:4-8443-1746-6 価格:5700円 イベントハンドラの使い方も載っていますが,それよりメカニズムについて詳しく解説してあり参考になりました。 kaminarikunさんの求められているものとは違うかもしれませんが,参考までに書いてみました。(ただ,初心者むけとは言えないし,C++でなくDelphi言語だし,価格も高いし....(^_^;)

kaminarikun
質問者

お礼

有難うございます。 私も参考書を大分探しましたが、ピタッとくるものがありませんでした。 事例を見て慣れろということですね。

その他の回答 (1)

回答No.1

何がわかりませんか?  イベントハンドラは、そのイベントが発生したときに振る舞いを「扱う」(ハンドル)ものです。  例えば、ボタンコントロールにはOnCkickというイベントがありますが、これは「ボタンをクリックした」時に発生します。この発生した「イベント」を検知し、「イベント」を「扱う」のがイベントハンドラです。  なぜそうなるか?「そう」とは何を指します?イベントの発生を扱うのはOSカーネルです。「イベントの発生」といっていますが、Windowsでは「メッセージの到着」がイベントで、メッセージを発信するのはWindowsです。全てのアプリケーションは全てのメッセージを受け取っており、そこから自分に関係のあるものかどうか、取捨選択します。この辺は、BCBの場合、かってやってくれます。メッセージが自分に関係のあるものであった場合、イベントハンドラ、つまり関数ですね、これが登録されているかどうか調べ、登録されていればその関数を呼び出します。この辺はすでにコーディングされています。  使い方は、処理したいイベントを探し、処理したいイベントがあれば記述し、なければ放っておきます。イベントハンドラのないイベントは捨てられます。

kaminarikun
質問者

お礼

有難うございます。 仕組みが何となく分かったような気になりました。 知りたいことは処理すべきイベントの記述方法です。 書いてある例は沢山あるのですが、記述すべきルールはどうなっているのか、ということでした。

関連するQ&A

  • C# イベントハンドラについて

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=70546 ここで紹介されているソースをさんこうにしていたのですが、 public event EventHandler TextBox1Changed; が果たしている役割がよくわかりません。 これは何のためにあるのでしょうか? たとえば、 http://dobon.net/vb/dotnet/vb2cs/event.html コチラのサイトでは、 public event EventHandler Time; と System.Threading.Thread.Sleep(5000); if (Time != null) { Time(this, EventArgs.Empty); } のように書かれていますが、いきなりif (Time != null)を記述してエラーがでないということは、Cのプロトタイプ宣言のような機能を有しているのでしょうか? また、この例ではなにもしないので具体的な使い方もみえてこず、この次の例はすでに理解を超えていてさっぱりわかりません。 イベントハンドラはいったいどのような役割を担っているのでしょうか?

  • C#にイベントハンドラ(object sender, EventArg

    C#にイベントハンドラ(object sender, EventArgs e) に引数を追加して、 イベントハンドラに値を渡したいのですが、 どのように記述したらいいのでしょうか?

  • C++ Builderについて

    以前から、C言語、C++などをやっていて、最近になって、C++Builder(Version 5.0)を使ってみようと思いました。すこしいじってみたのですが、さまざまなことを簡単にできそうな気がしました。しかしながら、正直なところ分からないことだらけです。ネット上で初心者向けの本を購入したのですが、内容は薄く、自分が目的とするものに達するには十分ではありませんでした。探し方が悪いのか、本もさほど見つかりませんでした・・・・。 また、様々なサイトも見てみたのですが、やはりC++Builderの初歩的な使い方もいまいち分かっていないせいか、わけがわかりません。一応、購入した本で勉強しているのですが・・・・。 できることなら、初歩的なことから、詳しく様々なことが分かり易く載っている本等は無いでしょうか?C言語のときは、ぶ厚い本で勉強しました。そのような本もたくさんあったように思われます。C++Builderには無いのでしょうか?それともCやC++などをみっちりやらなければ、使えないって事なのでしょうか?

  • C++Builder初心者の勉強法

    C++Builder初心者です。 プログラムといえばVBをかじった経験しかありません。 そんな初心者がC++Builderを理解したいのですが、 C++Builderは参考書籍が少なく困っています。 VC++のものを読んでも参考になるのでしょうか? また、VC++を読んだ場合、注意点等あるでしょうか?

  • イベントハンドラに下記記述があるのですが、どういう

    ・イベントハンドラに下記記述があるのですが、どういう意味でしょうか?   if (window.event) {   event = window.event;   }

  • Borland C++Builder 6で初心者に参考になるサイトを教えてください。

    Borland C++Builder 6で初心者に参考になるプログラムの書き方が解るサイトを教えてください

  • C#でイベントハンドラを呼び出す方法

    すいませんが調べてもわからなかったのでお伺いします。 C#でイベントハンドラを呼び出す方法なのですが たとえばクリックの中のプログラムを別の所から呼び出すと言うことができるのでしょうか? 中身の一部ではなく全体です。 VBだとsubの名前を書いておけばよかったんですが..... 最近始めたばかりでよくわかりませんよろしくお願いいたします。

  • VC++ と C++Builder

    C++の基本的な構造は理解していて、Win32APIを勉強しようとVC++でプログラミングを始めた者です。参考書は猫でもわかるWindowsプログラミングを見ながら勉強しています(難しくてあまり理解出来ていませんが)。 しかし、機能が多すぎたりと使いこなす自信がありません。 C++Builderに変えてみようかと思っているのですが、VC++とC++Builderの違いを教えて下さい。漠然としすぎていてアホっぽい質問ですが・・。 VC++とC++Builderのプログラムの書き方の大きな違いなどはあるのでしょうか? また、みっちり調べたつもりですが無償のBorlandC++Builderが見あたらないのですが・・・。

  • C++Builder 6 でkeybd_event

    C++Builder 6 でkeybd_eventを使っています 文字を送るときに仮想キーコードにすると未定義と出て 文字コードにすると送れます .hが通ってないのでしょうか? けど、VK_ESCAPE などは使えます。??? そういう仕様なのでしょうか? すいませんがよろしくお願いいたします

  • イベントハンドラ処理が終了しているかどうかを確認するには?

    イベントハンドラ処理が終了しているかどうかを確認するには? 前回以下のページにて「c#でボタンのアクションが終わった後に再度同じ動作をさせるには?」 という質問をしました所、イベントハンドラ処理が終了していないのでは?という回答を頂きました。 http://okwave.jp/qa/q5833308.html しかし、残念ながら当方初心者の為、 デバッガを利用して 「LoadData()処理」や「ボタンのClickイベントに対応付けしたイベントハンドラ処理」が  ・ちゃんと最後まで終了しているか  ・無限ループに陥っていないか  ・IO入力待ちで止まっていないか というのをどのように確認してよいかすらわかりません。 どうすれば確認できるのでしょうか? 何か参考になるページなどでも結構ですので教えてください。 よろしくお願いします。

専門家に質問してみよう