掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
他のオブジェクトの変更を知りたい (ID:22251)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
・・・そうっすかー、、、Delphi一本でしたか・・・ まずは提案から。 普通、所有している側から 通知するようにした方がいいとは思いますが、 TSendHoge側でTListやTObjectListを使ったパラメータを用意しておいて それに対して、TGetHogeを追加してやってはどうでしょうか? …伝わるでしょうか? Gethogeがいくつあっても SendHoge1.Add(GetHoge1); SendHoge1.Add(GetHoge2); として、所有クラスを沢山もたせておくようにして procedure TSendHoge.Add(Value: TGetHoge); begin FGetHogeList.Add(Value); Value.ConnectionSendHoge := Self; end; とでもしておいて、 >TSendHogeで値の変更があれば、TGetHogeではそれを検知して表示を更新する。 という場合には、SendHoge側でタイミングは関知できるので そのときにViewメソッドを呼び出して procedure TSendHoge.View; begin for ループ TGetHoge(FGetHogeList.Item[i]).View; end; で、 procedure TGetHoge.View; begin Caption := Self.ConnectionSendHoge.Data; end; とするといいのではないでしょうか? > 提示していただいたサンプルではTSendHoge側でTGetHogeを管理しないといけないため、 > TGetHogeのようなものを追加するたびにTSendHogeを修正しなくてはいけないと思いました。 なるほど、だから TQueryとTDBGridか... まあ、VCLでもその仲介にTDataSourceを入れてるぐらいですから あんまし簡単じゃないと思うのですが、 VCLを内部まで読んでませんが、たぶんTQueryはリンクしているTDataSourceに 値を放り投げるだけで、(ここまでは私のサンプルソースと似たような仕組み) TDataSourceがTDBGridやTDBEditに値を渡している仕組みが あくあさんの知りたい事のようですね。 TDataSource側(DataSource1とする)から Form上やアプリ上に存在するコンポーネントを全てサーチして (Form.Componentsプロパティで調べる方法があります) その中にTDBHogeなクラスがあり、TDBHoge.DataSourceがDataSource1なら 更新処理を行う、、、とかやってるんじゃないかしら? ...誰か詳しく知ってたら教えてください。 "DBGrid等をFormに配置する"という時点で、 他のクラスから参照できる仕組みがあり 上記の『SendHoge1.Add(GetHoge1);』と同じ事を やっているのと同じなので VCLが便利な事ができると思ってしまいますが > データを管理しているクラス(TSendHoge)があり、そのデータを表示するクラス(TGetHoge)を作る。 > TSendHogeで値の変更があれば、TGetHogeではそれを検知して表示を更新する。 というのは、どうやってもTSendHoge側で、どこにTGetHogeがあるのか、 を関知する仕組みが必要ですね。 …って書いてきて、だいぶ私も整理できてきましたが、 あくあさんの最初の投稿の procedure TSendHoge.Setdata(AData: String); …省略… for i:=0 to Application.ComponentCount-1 do begin (Application.Components[i] as TControl).Perform(WM_SendMsg, 0, 0); end; と、書いてありますね。 ここでメッセージを投げるのではなくて Application.Components[i] に hogeプロパティがあるかどうかを調べて その場合には、hogeプロパティがTSendHogeであるSelfと一致するかどうか調べて 一致すれば TGetHoge(Application.Components[i]).Viewを呼び出す とすればいいんじゃないでしょうか? あるクラスにあるプロパティが存在するかどうか ということは、DelphiはRTTIという仕組みを使って実現できているはずです。 調べてみてください。 長文すいません。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.