FindComponentについて

解決


かなこ  2002-08-01 23:29:10  No: 1196

質問ばかりで申し訳ないです。
今回はFindComponentについてです。
コンポーネントがTEditのときに
『TEdit(FindComponent(TEditのName)).Text:='〜'』っていう処理を
したんですけど、『TEdit(〜』のところが『TMemo(〜』でも問題なく
処理されます。なんでだか知りませんか?
ちなみに『TEdit()』という表記で実際どういう処理になっているのかも
わからないです。

問題は特にないんですけど、教えてほしいです。
よろしくお願いします。


にしの  2002-08-02 00:24:31  No: 1197

TEdit()は、簡単に言えば、「括弧の中をTEditと見なす」です。
たぶん、括弧の中がTButtonのオブジェクトでも動くと思います。
# 未確認です
キャストといって、オブジェクトをサブクラス(またはスーパークラス)のオブジェクトにキャストできます。
# 型があまりにも違いすぎると、キャストできないはず
As演算子でも同じことができます。

Is演算子で、TEditかどうかを判断するとよいです。As演算子と組み合わせると、使いやすいです。

Comp := FindComponent(....);
if Comp Is TEdit then with Comp As TEdit do
begin
  ...
end;


たかみちえ  URL  2002-08-02 09:38:27  No: 1198

ちなみに、それを使って確認したいものが、
たとえばTComponent以下のオブジェクトにはすべてある"Tag"プロパティだとしたら、
そのコンポーネントが何であろうと、TComponent()で十分です。(確認済み)
  ええと、口で説明するのは難しいですけど、
もし参照したいのが、TEditの継承もとのオブジェクト、TControlにあるAlignなら、
TControl()でもいいんです。
  にしのさんの解説と合わせて読んでもらえれば、多分わかると思います・・・^^;(説明べたですから、わたしのじゃわからないかも…)

  TMemoは、たしかTEditと継承図が似ています。
だから、どちらの祖先でもあるオブジェクトに存在するプロパティを、キャストで参照しようとしているのなら、
どちらでもいいわけです。
  TMemoとTEditは、ウィンドウズコントロールとしてはほぼ同じものだと思うので、
多分ほとんど同じでしょうね。


にしの  2002-08-02 18:05:31  No: 1199

追記
TEditとTMemoは、TCustomEditを継承しています。
この2つは、WindowsのEDITというクラス(VCLとは別)を使っていて、WM_GETTEXTメッセージでテキストを取得しています。
# EM_GETTEXTだったかも

これらは、特に気にする必要はないです。


かなこ  2002-08-05 22:21:08  No: 1200

なんとなく感じとしては、つかめました。
TMemoとTEditのもとになってるコントロール(コンポーネント?)が
似ていて、どっちでも同じだよっていうことですね?
実は『継承』というのも、よくわかっていなかったのですが、
今回で少し理解できました。

ありがとうございます!


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








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