名前 題名 ▼ 宮さん > ▼ Mr.XRAYさん > >> > > 分かったところで,実用的には結局はソートが必要かも知れませんから. > > 最近のテレビ番組の「... ムダな知識」とか「雑学」としてであれば > > 調べる価値はあるかも知れません.(^^) > > もやもやしていたことが払拭されました。 > 有り難うございました。 > エクスプローラみたいなプログラムに少し首をつっこんだのですが > とても奥が深いですね。 > リストビューも仮想方式と現実方式?(普通に書き込んで表示する方法) > をなんと呼ぶのか知りませんが、試してみました。 > 仮想方式はとても早いですがメモリーを食うようです。 > また、TreeViewをデスクトップをルートに下にドライブなど表示するように > 改造したのでフルパス取得が難しくなったので > 構造体を利用して > PBookMarkItem = ^TBookMarkItem; > TBookMarkItem = record > URL:string; > 個々のノードに要素名をファイル名、実際のパスをURLに持たせるようにしました。 > テストしているドライブに20万ファイル、7000フォルダがあり > 4時間かけてノードの展開縮小、リスト表示を繰り返すと > 512MBしかない小生のPCでは > 文言は忘れましたが、メモリー不足(リソース不足)の警告がでました。 > demoのTShellTreeViewではでません。 > そこで、いま、OnCollapsedしたとき > ぶら下げていたノードを毎回解放するようにしようかと > 考えています。効果があるか知りませんが。 > 構造体も破棄しなくてはならないので > 結構私には難しいです。 > 次のようにしてみました。 > 登録 > var > P:PBookMarkItem; > begin > New(P); > P^.URL := Path+ SearchRec.Name; > AddNode:=TreeView3.Items.AddChildObject(Node,SearchRec.Name,p) > 削除(あたり自身がないですが)どこかのサンプル参考。 > procedure TForm1.pNodeDelleteClick(Sender: TObject); > var > Node1,Node2:TTreeNode; > strURL:string; > begin > if TreeView1.Selected=nil then exit; > Node1 := TreeView1.Selected; > if Node1 <> nil then > begin > Node2 := Node1; > while Node2.HasChildren = True do > begin > Node2 := Node2.GetLastChild; > end; > > while Node2 <> Node1 do > begin > Node2 := Node2.GetPrev; > end; > Node1.Delete; > end; > //パスの削除処理 > end > これって、結構プログラミングの基本ですね。勉強になります。 > 有り難うございました。 > > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link