喫茶XRAYトップページ

[スレッド全体
]

[2429] 検索順序は本当はどうなるのでしょうか?返信 削除
2009/6/10 (水) 23:36:16 宮 〔HomePage
おじゃまします。winXP Delphi6Personalです。

本当はエクスプローラーを勉強するために
Mr.XRAYさんの簡易エクスプローラを参考に解析始めたのですが
とても高度で難しくて読めませんでした。
そこでサンプルプログラム集の
790−03 ファイル一覧・仮想リストビュー(システムのイメージリストを使用)
800−03_フォルダの一覧表示 フォルダ・ファイル順に表示
別々にすこしづつ勉強してあとで自分でくっつけたのですが、
しげしげ、じっくり見ていくと、いままで気づかなかったことが、
気になりだして、質問してもいいでしょうか。

たまたま、デスクトップに次のようなフォルダとファイルがあります。
エクスプローラーの表示で
●サムネイル                (Folder)
●ななサムネイル            (Folder)
サムネイル                (Folder)
ななサムネイル                (Folder)
●サムネイル.txt                (File)
●ななサムネイル.txt        (File)
サムネイル.txt                (File)
ななサムネイル.txt        (File)

合体作業が終わり出来具合を見ているとなんか違和感を覚えるのでじっくり見ると
●ななサムネイル、●サムネイル、ななサムネイル、サムネイル、
●ななサムネイル.txt、●サムネイル.txt、ななサムネイル.txt、サムネイル.txt
の順になります。
フォルダツリーもリストビューもこのよう順番になります。

800−03フォルダ一覧では
procedure TForm1.SetFolderListToTreeView(APath:String;Node:TTreeNode;Flag:Boolean);
で検索するままだし、
ファイル一覧では
procedure TForm1.Button1Click(Sender: TObject);の
      //ソート
      if FFileList.Count>0 then begin
        FFileList.Sort(Addr(SortFFileList));
      end;
でソートされているようだし、解決できませんでした。

ただ
簡易エクスプローラでは、ツリービューの方は
エクスプローラと同じに表示します。
何か解決方法があるのでしょうか、
しかし、リストビューの方は逆さまのままです。

//----------------
後一つ質問よろしいでしょうか
790−03ファイルリスト一覧の方で開始ボタンのところにある
procedure TForm1.Button1Click(Sender: TObject);
begin
      Update;<−−−−−−−コレは何の働きをするのでしょうか?

destructor TplDataList.Destroy;
・・・
    inherited;<−−−−−−−コレは何の働きをするのでしょうか?
end;

ヘルプに書いてあることが解りません。
簡単にアバウトいいですから、出来れば教えて頂けないでしょうか。

よろしくお願いします。(^_^;)


[2432] Re:検索順序は本当はどうなるのでしょうか?返信 削除
2009/6/11 (木) 11:36:13 Mr.XRAY
▼ 宮さん

> 800−03フォルダ一覧では
> procedure TForm1.SetFolderListToTreeView(APath:String;Node:TTreeNode;Flag:Boolean);
> で検索するままだし、


ソートしていないだけです.別に他意はありません.
必要であれば,ソートしてください.
TreeViewにはSortTypeプロパティがあります.


[2433] Re2:検索順序は本当はどうなるのでしょうか?返信 削除
2009/6/11 (木) 12:02:41 Mr.XRAY
題名が「検索順序は」なんですが,ソートの問題としてレスしました.
FindFirst,FindNext等による「検索順序」ということであれば,
分かりません.
これは,Windows内部の仕様でしょう.
調べれば分かるかも知れませんが,その気はありません.

分かったところで,実用的には結局はソートが必要かも知れませんから.
最近のテレビ番組の「... ムダな知識」とか「雑学」としてであれば
調べる価値はあるかも知れません.(^^)


[2434] Re3:検索順序は本当はどうなるのでしょうか?返信 削除
2009/6/12 (金) 01:45:41 宮 〔HomePage
▼ 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
これって、結構プログラミングの基本ですね。勉強になります。
有り難うございました。




[2437] Re4:検索順序は本当はどうなるのでしょうか?返信 削除
2009/6/12 (金) 12:38:32 Mr.XRAY
▼ 宮さん

> demoのTShellTreeViewではでません。

ということは,どこかでメモリリークしているのでは?

>テストしているドライブに20万ファイル、7000フォルダがあり

自分のがどれだけあるか調べてみました.Dドライブです.
[780]の04を使ってみました.
ListViewに表示するようにしたら,中々終わらないので,
Listviewの表示行をコメントアウトにして.
上が総ファイル数,下がフォルダ(サブフォルダを含む)数です.
あるもんですね.


[2440] Re5:検索順序は本当はどうなるのでしょうか?返信 削除
2009/6/12 (金) 22:32:18 宮 〔HomePage
▼ Mr.XRAYさん
> ▼ 宮さん
>
> > demoのTShellTreeViewではでません。
>
> ということは,どこかでメモリリークしているのでは?
>

確かにメモリーリークがあるかもしれません。
テストでぱっつぱっつとやっただけですから。
一応は当てておきましたが、詳しくは見ていません。
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
    Dispose(Node.Data);
end;
ひきつづき研究します。
また、アドバイスがありましたら教えてください。
こうした方がいいよとか。
では。

[2441] メモリマネージャは返信 削除
2009/6/12 (金) 23:26:44 Mr.XRAY
▼ 宮さん

> 確かにメモリーリークがあるかもしれません。

メモリマネージャは何を使っているんでしょうか


[2447] Re:メモリマネージャは返信 削除
2009/6/13 (土) 11:17:31 宮 〔HomePage
▼ Mr.XRAYさん
> ▼ 宮さん
>
> > 確かにメモリーリークがあるかもしれません。
>
> メモリマネージャは何を使っているんでしょうか


お手数かけます。
HeapCheckerというやつでほぼ完成版になったら
入れております。
dprに下記のような宣言をして
HeapChecker.OutputClassName := True;
HeapChecker.DumpLeakMemory := True;
関連pas、dcuを入れて使うもので
面倒です。
使い方もなれていません。

何かいいツールがありましたら、教えてください。
先のテストでは使っていません。m(_ _)m


[2474] Re2:メモリマネージャは返信 削除
2009/6/18 (木) 12:52:09 Mr.XRAY
▼ 宮さん

亀レスですみません.

> 何かいいツールがありましたら、教えてください。

いいかどうかはわかりませんが,これを使っています.
http://mrxray.on.coocan.jp/Others/UsageFastMM.htm

> 先のテストでは使っていません。m(_ _)m

他の方に配布する場合は,メモリリークのチェックは必須ですね.
ただ,リークがあっても,Indy10のように増加しなければ問題は
ないと思います.
念のためにウィルスチェックもかな.




[2475] Re3:メモリマネージャは返信 削除
2009/6/18 (木) 14:26:07 宮 〔HomePage
▼ Mr.XRAYさん
>>
> いいかどうかはわかりませんが,これを使っています.
> http://mrxray.on.coocan.jp/Others/UsageFastMM.htm
>

フリーならインストールします。
今のツールはソースの「プロジェクト名.dpr」にコードを書き
pasフォルダにツールのソースを混在させなければならないのが不便です。
またたまに、メディアプレイヤーを動的に貼り付け
いきなり再生するようなとき微妙にミスをすることがあります。
そのため、つい外したままになることがあります。
 
> >
> 他の方に配布する場合は,メモリリークのチェックは必須ですね.
> > 念のためにウィルスチェックもかな.


恐れ入ります。
以後、習慣でチェックするようにします。
すみませんでした。では。

 

[2476] TWebBrowserでフォルダ表示返信 削除
2009/6/18 (木) 17:36:17 Mr.XRAY
▼ 宮さん

このスレッドとは全く関係ない話ですが,
宮さんはTWebBrowser関係が多いのですよね.

もうすぐ,IEをIE7に切替える予定です.
ブラウザにファイルなどを表示する関係はテストできなくなって
しまいますね.残念です(本当か?)

アクセス解析でも,IE7,IE8が増えているので,そろそろ.
元々このサイトにはTWebBrowser関係のサンプルはないですけどね(笑)

2009/06/14 00:01:27 〜 の解析結果

[2477] Re:TWebBrowserでフォルダ表示返信 削除
2009/6/18 (木) 20:02:20 宮 〔HomePage
▼ Mr.XRAYさん
> ▼ 宮さん
>>

FastMM4をインストールしました。
使い方は簡単ですね。
しかし使い方が悪いのかリークの明細がでないですね。

HeapCheckerはログリストを出力してくれます。
マスターのFastMMの導入(Delphi7) リスト1のリークサンプル結果です。
-----------------------------------------------------------------------------
 ADDRESS | 未解放領域1(推定クラス名:TStringList)(size:48)
-----------------------------------------------------------------------------
00158F28 | B4 9D 41 00 00 00 00 00-00 00 00 00 00 00 00 00 | エ戡?????????????
00158F38 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | エ戡?????????????
00158F48 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | エ戡?????????????
-----------------------------------------------------------------------------
もう何年もHeapCheckerを使っているせいか慣れがあります。

> もうすぐ,IEをIE7に切替える予定です.
> ブラウザにファイルなどを表示する関係はテストできなくなって
> しまいますね.残念です(本当か?)


ハイ私はWebブラウザしかないです。
話が見えないんですが?
マスターのIEを7にすると言うことでしょうか。
EmbeddedWBがどう対応するか解りませんが。
私はIE7が出てすぐから使っておりますが。
私の場合は問題なく使っていますが。
Vistaとの組み合わせはどうなるか解りませんが。
すみません外していたらごめんなさい。(^_^;)
では。




[2478] Re2:TWebBrowserでフォルダ表示返信 削除
2009/6/18 (木) 20:22:07 Mr.XRAY
▼ 宮さん

> もう何年もHeapCheckerを使っているせいか慣れがあります。

使い慣れている方がいいのではないでしょうか.

> 私はIE7が出てすぐから使っておりますが。
> 私の場合は問題なく使っていますが。


とすると,XPでは問題ないのかな.
IE7からはブラウザとエクスプローラの機能が分離されたんです.
SHDocVwのDLLのバージョンの関係かも知れません.

[2479] Re3:TWebBrowserでフォルダ表示返信 削除
2009/6/18 (木) 23:31:54 宮 〔HomePage
▼ Mr.XRAYさん
>> とすると,XPでは問題ないのかな.

そんなに私めにとっても重大なことだったんですか。
以前、マスターがこの件について書いておられましたね。
そのときは、何のことか気にしませんでした。

> IE7からはブラウザとエクスプローラの機能が分離されたんです.
> SHDocVwのDLLのバージョンの関係かも知れません.


Webコンポーネントが関係するのでしょうかね。
もっともIE7の何をどう使って動いているのか知りませんが。
知らぬが仏 心配しても始まりません。
では。




[2480] Re4:TWebBrowserでフォルダ表示返信 削除
2009/6/18 (木) 23:44:35 Mr.XRAY
▼ 宮さん

> Webコンポーネントが関係するのでしょうかね。

タハハハッ.(^^;  (汗)


[2481] Re5:TWebBrowserでフォルダ表示返信 削除
2009/6/19 (金) 12:14:11 宮 〔HomePage
▼ Mr.XRAYさん
>>
> タハハハッ.(^^;  (汗)


Internet Explorer 8 をインストールしました。

エクスプローラから種々雑多なファイルを
複数ドロップしてみました。
開かない。???
アドレス窓にローカルパスを入力してみました
表示しない???

このことですか、先におっしゃっていた内容は。
そりゃまた、とんちんかんな応答をしていました。(^_^;)

IE7からそうだったんですか?
いや〜気づきませんでした。
なんせIEなど使わないモンですから。

では。



[2482] Re6:TWebBrowserでフォルダ表示返信 削除
2009/6/19 (金) 14:33:57 Mr.XRAY
▼ 宮さん

調べてみました.
IE7から仕様が変更になったようですが,
必ずしもエクスプローラが別窓で開くわけではないようです.

ところでWebBrowserですが,これはSHDocVw.dllの機能を利用して実現
しています.Personal版でしたら,このdllを,タイプライブラリまたは
ActiveXの取り込みで,このdllを使用可能にするユニットを作成したハズ
です.

このdllはIEが使用しているものです.
つまり,WebBrowserは,IEが使用可能な環境でないと使用できません.
そして,そのPCで現在使用しているIEのバージョン,つまりHDocVw
のバージョンにより,動作仕様が決まります.

これはWebBrowserに限ったことではありません.
Delphiは,Windowsのこれらのdll等の機能を使っています(カプセル化).
Delphiは,Windowsがインストールされていない環境では,
Windowsのプログラムは開発できないということです.
(インストールもできませんが...)

つまり.WebBrowserを使っているということは,

>なんせIEなど使わないモンですから。

ということはないんです.メチャクチャ使っているんです.
もちろん,他の方のように直接ではなく,IEの機能をという意味です.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82