SDIテキストエディタにテンプレート挿入機能を実装しています。
他のウインドウで、テンプレートが編集されても対応できるよう、
起動時のみでなくアプリケーションがアクティブになった時もテンプレートを読み込みます。
読み込み処理では、TTreeViewにアイテムをAddしていき、非常に時間がかかります。
ためしたところ、TreeViewのItemsをAssignさせれば非常に高速です。
他ウインドウにあるTreeViewのItemsを参照するにはどうしたらよいでしょうか?
テンプレートってなんですか? Delphi5には無いですけど。
Delphi6以降にはあるんですか?
私の作っているテキストエディタの機能です
あっ、そうですか。それじゃ誰にも分かりませんね。
いぇいぇ、だから、タイトルからも分かるように、TreeViewのItemsを他のウインドウからAssignする方法はないかと?
> TreeViewのItemsを他のウインドウからAssignする方法はないかと?
他のウィンドウって、ほかのプロセスからってことですか?
それなら Assign する方法はありません。
そうですか
他のプロセスですが同じ実行ファイルです。
無理ですか?
では複数のプロセスで同じTTreeNodesを使用する事はできませんか?
> 他のプロセスですが同じ実行ファイルです。
はい、メモリ空間はプロセス毎に割り当てられますので、同じ exe ファイルの
違うプロセスどうしでは、VCL のプロパティーにアクセスできません。
> では複数のプロセスで同じTTreeNodesを使用する事はできませんか?
上と同じ理由で、できません。VCL は、言語上のライブラリであって、Windows は
そのことを知りません。したがって、Delphiアプリであっても OS を通して異なる
プロセス間のあいだで、クラスのインスタンスを共有することはできません。
Windows のコモンコントロールとして見えるだけです。
> 読み込み処理では、TTreeViewにアイテムをAddしていき、非常に時間がかかります。
BeginUpdate, EndUpdateしていますか?
ほかのプロセスの場合、TREEVIEW_*系のAPI(実態はメッセージ)で1アイテムずつ取得できますが、やはり1つずつ読み込むのと同じくらいかかると思います。
BeginUpdate,EndUpdateをしていないと、1アイテムをAddするたびに描画が更新されるため遅いです。
beginUpdateとかしてませんでした
凄く早い
ツイート | ![]() |