喫茶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;

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

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


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

そういえばまだ,TreeViewの問題がありましたっけ.
ちょっと待ってくださいね.少し落ち着いてきたところですので,

> 気になりだして、質問してもいいでしょうか。

どうぞ,どうぞ,質問しやすいように,サンプル,全てのページに図番号と
リスト番号をつけているのですから.
ただし,時間が経過すると忘れてしまうかも(笑)

これは,ソートと表示順番の問題ですよね?

通常,FFileList.Sort(Addr(SortFFileList));
とすると,TStringList(TList)が決めたソートの順番です.

>簡易エクスプローラでは、ツリービューの方は
>エクスプローラと同じに表示します。


これはそのようになるようにしています.
シェルネームスペースを使用すると,エクスプローラと同じ順番に
リストを作成してくれますが(デフォルトでは)
一連のサンプルでは,シェルの機能を使用していません.
そのためにそのようになります.

簡易エクスプローラでは,エクスプローラ(シェル)の表示仕様を解析して
コーディングしています(結構レアなコードだと勝手に思っています).

表示の順番が気に食わないのであれば,自分でソートのルーチンを作成
して,自分なりの仕様にするしかないですね.

>procedure TForm1.Button1Click(Sender: TObject);
>begin
>      Update;<−−−−−−−コレは何の働きをするのでしょうか?


宮さんの環境では発生しないのかも知れませんが,環境によっては,
ダイアログの表示が終了した時に,画面の表示が乱れる(欠損等)こと
があります.そのために,再表示をしています.
つまり,体裁上の問題です.動作そのものには関係ありません.
ダイアログで処理に時間がかかるなど,重い処理の場合は特にそうです.
したがって,[キャンセル]で閉じた場合は必要ないようです.

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


これは,そのものズバリで,元のTListのDestroyを実行しているだけです.
ihheritedはそういう意味ですから.
inheretedを実行しないで,自前で処理するのであれば必要ありません.
(あまりそういうことはしませんが,やることも,実はあります
よっぽど詳しく本サイトのコードを読まないと分かりませんが)

このような疑問の場合,疑問に思った行を削除して実行してみるのも
1つの動作確認になるかも知れません.
ただ,単にメモリリークが発生するだけの場合もあるかも知れませんが.


ところで,シェルの機能を使用したフォルダツリー,ファイルリストは
開発中です.実は数年前からやっているのですが,他のことをやったり
して中断しています.
これは,サンプルとしてUPするには厳しいのでコンポーネントになります.
今考えている手順は以下の通りです.

1. TplPrevのVistaでの描画問題の修正
2. シェル機能のファイルとフォルダのコンポ開発
3. それを使用して,ファイル関連ダイアログコンポのVista+ Delphi2007
   の対応確認と修正
4. 他のコンポのVista+ Delphi2007への対応確認と修正
5. Delphi2009への移行

Delphi2007の動作確認は省略できませんね.どうしても.


[2431] Re2:検索順序は本当はどうなるのでしょうか?返信 削除
2009/6/11 (木) 11:23:52 Mr.XRAY
> Delphi2007の動作確認は省略できませんね.どうしても.

何回か書いていますが,ワードとエクセル操作フォームの対応が
ほぼ終了したところです.
ダウンロード数が多い提供ものですので,早くやりたかったのですが.

Vistaでは新規にPCを購入するとIE7です.この問題を解決したかった
のです.
IE7では,ブラウザとエクスプローラの機能が分離されて,TWebBrowser
上に表示されなくなったものですから(別窓表示になる)


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