この人頭いいなと思ったエピソード

こんにちは。
今、BorlandC++Builder5で、PhotoShopの情報パレットのような
マウス位置などの情報を表示するパレットを作成しています。

フォームが二つあり、以下のようにしています。
Form1 → マウス位の置情報を得るフォーム
Form2 → Form1から受け取った「マウス位置の情報」を、表示するフォーム。
表示にはLabelコンポーネントを使用する

最初、Form1のOnMouseMoveから直接、
 Form2->Label1->Caption = IntToStr(X)
というように書いていました。
しかし、できることならForm1からは値だけを渡し、
Form2上でLabel1のCaptionを書き換えるようにしたいと思っています。

そこで思いついたのが、Form2に自作プロパティを作り、
・Form1からは、そのForm2上のプロパティに値を渡す
・Form2は、そのプロパティでLabel1->captionを書き換える
という方法なのですが、やり方どころか、
それか可能なのかさえよくわかっていない状況です。

プロパティを使う方法でも、それ以外の方法でも構いませんので、
どうすれば可能なのか教えていただけないでしょうか?
お手数ですが、よろしくお願いします。

A 回答 (3件)

クラスエクスプローラ(BCB personalにはないですが)でForm2を右クリック→プロパティの新規作成でプロパティ作成ダイアログが出ます。



 プロパティ名:適当につける
 型:マウスの座標ならTPointでいいでしょう
 アクセス制御:Publicでいいでしょう
 Getメソッドの作成:チェック
 Setメソッドの作成:チェック
 フィールドの作成:チェック
 このフィールドをGetメソッドで参照する:チェック
 このフィールドをSetメソッドで参照する:チェック

これでOKしたらコードの雛型が自動生成されます。
あとはこのセットメソッドのほうに代入された値をCaptionに表示するコードを追加すればよいわけです。

>情報パレットのようなマウス位置などの情報を表示するパレットを作成しています。

表示したい情報を構造体にまとめてそれをForm2のプロパティにするという手もあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
自分で書かなくても、右クリックメニューで追加できるんですね。
実際にどう書けばいいのかわからず、苦労してました。

Form1側で情報を受け取るときも、
プロパティだと型変換せずに受け取れるので
この方法を考えたんです。
実現できたので嬉しいです。
ありがとうございました。

お礼日時:2005/10/04 20:08

No.1 です。


No.2 の方の回答を見ました……。

Form2 自体もプロパティをもてるのを忘れていました。
ですので、No.1 で書いた、「用語の誤解があるようですので」云々は、取り消します。

いや、お恥ずかしい。
    • good
    • 0
この回答へのお礼

いえいえ!
関数の引数渡しの方法もわかって一石二鳥でした!
僕はすんごく初心者なので、
とにかくいろんな情報を蓄えたいので
参考になってよかったです。
ありがとうございました!

お礼日時:2005/10/04 20:10

まず、用語の混乱があるようなので……



C++ Builder では、Form に貼り付けて使う部品を「コンポーネント」と呼びます。それぞれの、コンポーネントの情報が、「プロパティ」です。

ですから、Label1 に対して、Caption がプロパティ(のひとつ)になります。

さて、方針としては、Form1 から、Form2 の Label に直接アクセスせずに必要なデータだけを渡すというのは、良いことだと思います。
そして、この目的であれば、Form2 に、ユーザー「関数」を作るだけでOKです。

具体的には、Form2 に相当する unit.h の、Public: の部分に、
void putData(int x, int y);
のようなプロトタイプを作り、その実体を、unit.cpp の中に

void putData(int x, int y)
{
Label1->Caption = x;
Label2->Caption = y;
}

こんな感じで定義するだけです。

あとは、Form1 側から、Form2->putData(x, y);
のように使えます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど、その方が簡単ですね!

こっちを採用しようかな。

お礼日時:2005/10/04 20:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!