喫茶XRAYトップページ

[スレッド全体
]

[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
これって、結構プログラミングの基本ですね。勉強になります。
有り難うございました。




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

> テストしているドライブに20万ファイル、7000フォルダがあり
> 4時間かけてノードの展開縮小、リスト表示を繰り返すと
> 512MBしかない小生のPCでは


20万ファイル,7000フォルダはどうか分かりませんが,
簡易エクスプローラは,Window98( 64MB) で動作していました.
この簡易エクスプローラから,ワードやエクセル,拙作の業務アプリ
も起動していましたが,メモリ不足になることはなかったですね.

もっともノードを閉じるたびにツリー情報は削除していました.
これはメモリ対策ではなく,前回の展開状態が再現されるのが
うっとうしいからです.
結果的にこれがベターだったかは不明です.

非常に多くのファイル等であれば,もうエクスプローラの領域ではなく
データベース化の領域かも知れません.

>demoのTShellTreeViewではでません。

これはシェルの機能を使用しています.
基本的にはシェルの機能を使用した場合の方がメモリは使うような
気がします.ただ,シェルはOSの機能ですから,そこはうまくやって
くれているのかも知れません(シェルはOSのShellの意味).


[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の機能をという意味です.


[2549] Re3:TWebBrowserでフォルダ表示返信 削除
2009/7/9 (木) 22:13:45 Mr.XRAY
> IE7からはブラウザとエクスプローラの機能が分離されたんです.
> SHDocVwのDLLのバージョンの関係かも知れません.


TWebBrowser(Delphi2007-R2 Pro)とVista+IE8 Beta
で動作確認してみました.

URLにフォルダ名を指定した場合は,TWebBrowser上に表示されます.
ただし,IE8 Betaのアドレスバーにフォルダを指定した場合は
別窓で表示されます.

こういう仕様のようですね.
ワード,エクセル等,他のアプリはどちらも別窓表示でした.


[2550] Re4:TWebBrowserでフォルダ表示返信 削除
2009/7/10 (金) 18:29:10 宮 〔HomePage
▼ Mr.XRAYさん
>
> ただし,IE8 Betaのアドレスバーにフォルダを指定した場合は
> 別窓で表示されます.
>
> こういう仕様のようですね.
> ワード,エクセル等,他のアプリはどちらも別窓表示でした.


つい先日、マスターに指摘されてIE7では、ローカルフォルダは
開かないといわれて始めて知ったはずでした・・・?。
(もう記憶が定かでない(^_^;) )

なんと、今回IE8では、それでは不便すぎると文句が出たのか
別窓で開きますね。始めて知りました。
IE7は削除したので確かめようがないけど。

MSさんも定番中の定番ソフトを結構、ごそっと変えるんですねぇ〜。
もっとも、IEもエクスプローラーもそのヘルプを読んだことがないので
確かなことは解りませんが。
改めて考えてみるとヘルプを読まないで、
万人が使えるアプリはずごいですよね。

Linuxが普及しないわけ、もっとも劣っているのは、デスクトップに
このエクスプローラーに匹敵するツールが無いことだと思う。(余談)

情報有り難うございました。



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