他ウインドウのインスタンスからAssignするには

解決


るるとん@K  2004-04-23 19:17:51  No: 8553  IP: 192.*.*.*

SDIテキストエディタにテンプレート挿入機能を実装しています。
他のウインドウで、テンプレートが編集されても対応できるよう、
起動時のみでなくアプリケーションがアクティブになった時もテンプレートを読み込みます。
読み込み処理では、TTreeViewにアイテムをAddしていき、非常に時間がかかります。
ためしたところ、TreeViewのItemsをAssignさせれば非常に高速です。
他ウインドウにあるTreeViewのItemsを参照するにはどうしたらよいでしょうか?

編集 削除
つっか  2004-04-23 19:43:16  No: 8554  IP: 192.*.*.*

テンプレートってなんですか? Delphi5には無いですけど。
Delphi6以降にはあるんですか?

編集 削除
るるとん@K  URL  2004-04-23 20:02:17  No: 8555  IP: 192.*.*.*

私の作っているテキストエディタの機能です

編集 削除
つっか  2004-04-23 20:22:49  No: 8556  IP: 192.*.*.*

あっ、そうですか。それじゃ誰にも分かりませんね。

編集 削除
るるとん@K  2004-04-23 20:25:48  No: 8557  IP: 192.*.*.*

いぇいぇ、だから、タイトルからも分かるように、TreeViewのItemsを他のウインドウからAssignする方法はないかと?

編集 削除
つっか  2004-04-23 20:56:01  No: 8558  IP: 192.*.*.*

> TreeViewのItemsを他のウインドウからAssignする方法はないかと?

他のウィンドウって、ほかのプロセスからってことですか?
それなら Assign する方法はありません。

編集 削除
るるとん@K  2004-04-23 21:04:04  No: 8559  IP: 192.*.*.*

そうですか

編集 削除
るるとん@K  2004-04-23 21:06:46  No: 8560  IP: 192.*.*.*

他のプロセスですが同じ実行ファイルです。
無理ですか?

編集 削除
るるとん@K  2004-04-23 21:12:18  No: 8561  IP: 192.*.*.*

では複数のプロセスで同じTTreeNodesを使用する事はできませんか?

編集 削除
つっか  2004-04-23 22:00:46  No: 8562  IP: 192.*.*.*

> 他のプロセスですが同じ実行ファイルです。

はい、メモリ空間はプロセス毎に割り当てられますので、同じ exe ファイルの
違うプロセスどうしでは、VCL のプロパティーにアクセスできません。

> では複数のプロセスで同じTTreeNodesを使用する事はできませんか?

上と同じ理由で、できません。VCL は、言語上のライブラリであって、Windows は
そのことを知りません。したがって、Delphiアプリであっても OS を通して異なる
プロセス間のあいだで、クラスのインスタンスを共有することはできません。

Windows のコモンコントロールとして見えるだけです。

編集 削除
にしの  2004-04-23 22:24:41  No: 8563  IP: 192.*.*.*

> 読み込み処理では、TTreeViewにアイテムをAddしていき、非常に時間がかかります。

BeginUpdate, EndUpdateしていますか?
ほかのプロセスの場合、TREEVIEW_*系のAPI(実態はメッセージ)で1アイテムずつ取得できますが、やはり1つずつ読み込むのと同じくらいかかると思います。
BeginUpdate,EndUpdateをしていないと、1アイテムをAddするたびに描画が更新されるため遅いです。

編集 削除
るるとん@K  2004-04-23 23:05:20  No: 8564  IP: 192.*.*.*

beginUpdateとかしてませんでした

編集 削除
るるとん@K  2004-04-23 23:19:50  No: 8565  IP: 192.*.*.*

凄く早い

編集 削除