喫茶XRAYトップページ

[スレッド全体
]

[4003] 947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/12 (日) 00:08:50 Sara
いつもお世話になっております。Saraです。

さて、plExplorerFolderTreeを利用させていただこうとテストしておりますが、
SelectFolderにフォルダーパスを入れてもSelectFolderに反映されません。

ソースを見る限り、SetFSelectFolderでもSetFpidlSelectFolderでも
FSelectFolderに値を入れていないためとおもわれますが、
SetFpidlSelectFolderの最後に

    SHGetPathFromIDList(FpidlSelectFolder, pFullPath);
    FSelectFolder := pFullPath;

を追加しておけば、大丈夫でしょうか?(一応これで動いてますが)

あと、隠し属性を持つフォルダーを表示するには、どのようにしたら
よいでしょうか?

度々で申し訳ございませんが、ご教示いただけたら、幸いです。

[4006] Re:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/12 (日) 15:01:24 Mr.XRAY
▼ Saraさん,おっ,いろいろやっていますね.

>FSelectFolderに値を入れていないためとおもわれますが、

ありゃ,失礼しました.m(_ _)m

> を追加しておけば、大丈夫でしょうか?(一応これで動いてますが)

すみませんね.UPしたサンプルも後で修正しておきます.

>あと、隠し属性を持つフォルダーを表示するには、どのようにしたら
>よいでしょうか?


plExplorerFolderTreeですよね.するとリスト6ですね.いや,7ですね.
えっと,属性を指定しているところだから,
function TplCNameSpaceTreeControlHost.SetRootFolder(pid....
のことろですね.ここの

  if Failed(m_pNameSpaceTreeControl.AppendRoot(
                              pShellItem,
                              SHCONTF_FOLDERS, //ここに属性追加
                              NSTCRS_VISIBLE or NSTCRS_EXPANDED,
                              nil)) then exit;

隠し属性は,確かHIDDENだから,
SHCONTF_FOLDERS or SHCONTF_INCLUDEHIDDEN,
でいいような.スミマセン,今Windows 7起動していないので,未確認です.
定数の一覧は以下にあります.
SUPERHIDDEN ってのもありますね.何だろう?

http://msdn.microsoft.com/en-us/library/bb762539%28v=vs.85%29.aspx


[4012] Re2:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/13 (月) 00:50:51 Sara
▼ Mr.XRAYさん こんばんは

> ▼ Saraさん,おっ,いろいろやっていますね.
はい(^^; やってます。

>   if Failed(m_pNameSpaceTreeControl.AppendRoot(
>                               pShellItem,
>                               SHCONTF_FOLDERS, //ここに属性追加
>                               NSTCRS_VISIBLE or NSTCRS_EXPANDED,
>                               nil)) then exit;

おぉ なるほど・・・ぢゃあプロパティーを作って・・・
おぉ、できました。(^^)

Delphi付属のShellTreeViewを使うより、数段いい感じです。(^^)V

が、Windows2000でうまく動かない・・・(^^;
いろいろ試してみているんですが・・・
どうも、IUnknown_GetWindowの取得がうまくいっていないらしく・・・

もう少しがんばってみます・・・(^^)V

[4013] Re3:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/13 (月) 08:31:05 Mr.XRAY
▼ Saraさん

> が、Windows2000でうまく動かない・・・(^^;

ヘヘヘッ,
「そいつぁ〜,無理だぜ,女将さん」だと思いますよ.
このサンプルで使用しているインターフェイスINameSpaceTreeControlCustomDraw
は,Vista以降で使えるようになっています.

http://msdn.microsoft.com/en-us/library/bb761614%28VS.85%29.aspx
(このページの下のMinimum supported client参照)

もちろん,非公開なんとかであれば,ということは多分ないでしょう (^^)


[4014] Re4:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/13 (月) 09:57:17 Sara
▼ Mr.XRAYさん こんにちは

> ヘヘヘッ,
> 「そいつぁ〜,無理だぜ,女将さん」だと思いますよ.
> このサンプルで使用しているインターフェイスINameSpaceTreeControlCustomDraw
> は,Vista以降で使えるようになっています.

な、なに? と・と言うことは、XPでもだめなの? まぢで?

げげっ、また、別の方法を考えないとだわね・・・(^^;

Windows2000上で、全くエラーは出ないで動くんだけど、ツリー表示が
全くされないんで、困っていたんですが、真相はそこにありましたが・・・(--;

情報、ありがとうございます。m(_ _)mペコリ

(VISTA,7専用バージョンとXP以前でアプリ自体を分けるのも手かな・・・)

[4015] Re5:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/13 (月) 10:11:30 Mr.XRAY
▼ Saraさん,どうも

> な、なに? と・と言うことは、XPでもだめなの? まぢで?

まぢで.ヒヒヒッ(嫌味な笑い)
(PCの画面見て,本当に笑っています)


[4019] Re6:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/15 (水) 00:02:01 Sara
▼ Mr.XRAYさん こんばんは

結局、ShellTreeViewとplExplorerFolderTreeをOSバージョンによって
動的に作成して使うという手間とバグが増える方法を選んでしまいました。(^^;


概ね動くようになりましたが、plExplorerFolderTreeにいくつかイベントを
追加したいので、改変しようと思っています。

行き詰ったら、また来ます・・・(。_°☆\(- - ) バシっ!


[4020] Re7:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/15 (水) 07:13:09 Mr.XRAY
▼ Saraさん,おはようこざいます.

> 結局、ShellTreeViewとplExplorerFolderTreeをOSバージョンによって
> 動的に作成して使うという手間とバグが増える方法を選んでしまいました。(^^;


そうですね.Windows 2000をターゲットにすると,結構面倒になりますよね.
お疲れ様です.

> 行き詰ったら、また来ます・・・(。_°☆\(- - ) バシっ!

いつでもどうぞ.解決の保証はありませんが. (^^;


[4023] Re8:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/16 (木) 20:36:08 Sara
▼ Mr.XRAYさん こんばんは

> いつでもどうぞ.解決の保証はありませんが. (^^;

との優しい言葉を真に受けて、やってまいりました。(^^;

plExplorerFolderTreeにOnMouseEnterイベントを発生させるには、
どうすればよいでしょうか?

よろしくお願いいたします。m(_ _)m

[4024] Re9:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/16 (木) 23:23:15 Mr.XRAY
▼ Saraさん,どうも

> plExplorerFolderTreeにOnMouseEnterイベントを発生させるには、
> どうすればよいでしょうか?


http://mrxray.on.coocan.jp/Delphi/plSamples/947_ExplorerBrowsert.htm#03
ですよね.
これは,
http://msdn.microsoft.com/en-us/library/bb774328%28v=VS.85%29.aspx
のリストの,INameSpaceTreeControlCustomDrawインターフェイスを
使用しています.

インターフェイスのリストから,使えそうなのを調べて,そのインターフェイス
を実装することになります.
ただし,インターフェイスの組合せによっては,正常に機能しない場合があります.

今,ちょっとみたところでは,
INameSpaceTreeControlEvents:
http://msdn.microsoft.com/en-us/library/bb761567%28v=VS.85%29.aspx

が使えそうですね.ここの
OnItemClick MethodのnsctsFlags [in]に
Indicates which button was clicked and the kind of click.
One of the following values:
という説明があります.

サンプルでは,

  TplCNameSpaceTreeControlHost = class(TInterfacedObject,
                                       INameSpaceTreeControlCustomDraw)

となっていますから,

  TplCNameSpaceTreeControlHost = class(TInterfacedObject,
                                       INameSpaceTreeControlCustomDraw,
                                       INameSpaceTreeControlEvents)
として,このINameSpaceTreeControlEventsの定義のところを開いて,
([Ctrl]+クリックでShlObj.pasの定義のところを開く)
メソッド(関数類)を全て実装します.インターフェイスでは,必要な関数だけを
実装するということはできません.全てです.
戻り値は,とりあえず,Result := S_OK などとしておいて,
MSDNの英語の記事を解読しながら,作成していくことになります.


[4025] Re10:947_ExplorerBrowser の plExplorerFolderTreeにて返信 削除
2010/12/16 (木) 23:29:23 Mr.XRAY
> 戻り値は,とりあえず,Result := S_OK などとしておいて,

イベントの検出だけですから,MSDNの該当関数の説明を全て読んだわけでは
ないですが,何もすることはないようなきがします.
(Result := S_OKでいいという意味です)

Result := E_NOTIMPL;
という,何もしないというのもあります.


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