喫茶XRAYトップページ

[スレッド全体
]

[3896] Re5:Delphi6による動作検証返信 削除
2010/11/5 (金) 19:50:06 宮 〔HomePage
▼ Mr.XRAYさん
> 少し気持ちを落ち着かせてから調査してみます.
ご無沙汰してます。

なが〜いイントロ。(グチ)
Windows7では、特殊フォルダの間では従来の上の階層という概念が無くなった?。
クスプローラーにそのボタンがない。
デスクトップでさえ、他のドライブへ移動できる。
ドキュメントも当然移動できる。
この上で、ライブラリの下のドキュメントは仮想のフォルダである。
(実態がない)
そのくせ、その下のフォルダやファイルは実体のあるファイルなので
仮想のつもりで削除したら偉い事になった。
まえは、実体上と違うがデスクトップが一番上だった。
ドキュメントから上の階層へいくとデスクトップになった。
しかし、7のエクスプローラーは上の階層へいく事はできない。
前に戻る事になる。
だから、がんばっても最初開いフォルダ以上の階層へは行けない。
まえは、ちょっと目に触れないようにフォルダに隠していた写真を、
7に移行したら、根こそぎ、ピクチャーへ引きずり出されて、泡を食った。
今までもネットワークはわかりにくかったけど、
ワークグループの他にホームグループってできてますます解らなくなった。
イージー設定で設定自体は簡単にできるかもしれないけど
何がどうなっちゃっているのと考え出したら神経衰弱になりそう。
だって、ライブラリに引きずり出された上に、
ライブラリごとデフォルトで共有モードになっているなんて知ったときは、
腰を抜かした。
何考えてるのかねえ〜msは。7のエクスプローラーのツリービューは
もう、めちゃくちゃになった。

そういうわけで、従来のエクスプローラのような自作ソフトの
フォルダツリーでは7に対応できなくなったので、
何とかしなければと考えているとき、
タイムリーにマスターがエクスプローラー関係を更新したというので
期待して取り組んだのですが・・・・・

マスターもおっしゃられているように、
これは、職場で他の変なフォルダに書き込んだり
読み込んだりしないようにルートフォルダを決めておく前提ですね。
これはこれでいいのですが、

私は希望を言えば、てっぺんからの
(7は何がてっぺんか解らなくなりましたけど。)
全ドライブ、から欲しいです。
それと、マスターのは右画面のファイルの表示がとても早くて魅力でしたので
作り込んでいったら、複数のファイルを選択できないのに気づきました。
ListView1.MultiSelect:=false;でないと動かないのですね。
これも何とかならないんでしょうね。

ツリーフォルダをしこしこ作ったのですが
私の力では、ネットワークができませんでした。
いやそれしかできなかったです。

それにしても、DemoにあるShellTreeviewは7でも使えるのだから
やはりプロが作ったのはたいしたもんですね。
これってソースもあるから改造できないのですか?
もっとも見てみたけどさっぱり解らなかったです。(^_^;)
やはり、ShellTreeviewこれでいくしかないかなあ〜。
ルートも変えられるし。
私がここ一週間没頭して挫折したエクスプローラまがいのベース部分の
試作途中です。
http://www016.upp.so-net.ne.jp/miyaindex/CustomMaidType.zip
マスターのサンプルをベースにぐちゃぐちゃにいじり回しました。
数々の失礼をお許し下さい。ご免下さい。m(_ _)m

あと、アイコンをダブルクリックするのもマスターに教えてもらったものです。
ただ、ファイル名を変更できないままです。


[3897] Re6:Delphi6による動作検証返信 削除
2010/11/5 (金) 21:30:04 Mr.XRAY
▼ 宮さん

宮さんの書いていることは,おそらく多くの人が思っていることだと思い
ますね.マイクロソフトしては,どうしも,マイピクチャーや,マイミュ
ージックというフォルダを使わせたいんだと思います.

私の周囲の人に,もちろん,この方が多いのですが,ドライブという概念,
知識がある人は少ないです,
多くの人は,マイ何とかです.当然普通にダウンロードしたり,ワードの
文書を作成した時もデフォルトでそうなっていますから.

> ListView1.MultiSelect:=false;でないと動かないのですね。
> これも何とかならないんでしょうね。


これぐらいだったら...

> http://www016.upp.so-net.ne.jp/miyaindex/CustomMaidType.zip
> マスターのサンプルをベースにぐちゃぐちゃにいじり回しました。


なるほど,動かしてみました.TWebBrowserでファイルリストですね.

ところで,
特殊フォルダを扱ったするには,ウィンドウズのシェルの名前空間という
機能を使います.項目識別子,PItemIDListというやつで管理します.
汎用的にフォルダツリーやファイルリストを作成するにはこれを使います.
Delphi付属のシェルコンポーネントもそうです.

> これは、職場で他の変なフォルダに書き込んだり
> 読み込んだりしないようにルートフォルダを決めておく前提ですね。


ということなんです.これで今のところ十分機能していますので.
詳細表示以外は無用ですし.

詳細表示は,OSが違っても間違いなく同様なコードで処理できます.
他の表示は,宮さんもご存知の通り違いがあり,OSの違いを考慮するのは
結構ややこしそうです.
エクスプローラと同じ機能を望むなら,エクスプローラそのものを使うのが
一番でしょう(笑)

宮さんのような多機能のブラウザに実装するなら,詳細表示だけにして,
画像などの表示は,それ専用のコントロールを作成して表示する,という
考え方もあるのではないかと,思うこともあります.

> やはり、ShellTreeviewこれでいくしかないかなあ〜。
> ルートも変えられるし。


でしょうね.


[3898] Re7:Delphi6による動作検証返信 削除
2010/11/6 (土) 12:26:42 宮 〔HomePage
▼ Mr.XRAYさん
>
読んで下さってありがとうございました。
実は先生に添削してもらいたかったもので。
手に負えないので、試作途中で投げましたけど。
なにかヒントがもらえるのではないかという下心もあり。(^_^;)

やはり、エクスプローラーとインターネットエクスプローラーは
msの旗艦ソフトですね。無料だから気づかないけど。

(#だって、Linuxにエクスプローラーほどの使い勝手をさせるソフトが
未だにでないのだから。
デスクトップに熱心なUbuntuさんでもまだ
sudo /etc/init.d/networking restart
などとやっているのだから100年たってもWindowsには対抗できない。)

でも、msも7でエクスプローラーにBrowserをはっきり使ってきたのですから
今後、この関連のサンプルコードもお願いします。

参考やヒントは得られました。
ありがとうございました。



[3904] Re8:Delphi6による動作検証返信 削除
2010/11/9 (火) 17:42:40 Mr.XRAY
▼ 宮さん

> 実は先生に添削してもらいたかったもので。

とんでもはっぷん,あるいてじゅっぷんです.
アドバイスさえ,ままなりません,

宮さんの場合,多機能のブラウザということで,アプリの画面でファイル
の管理もできる機能をということで,エクスプローラのような操作を実現
させるわけですよね.

TEmbeddedWBコンポーネント上に表示させると,ファイル名の変更等も
自分でコーディングしないといけないので決行大変ですね.
また,左側にフォルダツリーを表示しても,右ペインの左側にも,
Windows XP以降ではフォルダ関係のペインが表示されてしまいます.

IShellBrowserインターフェイスかなんかで表示すれば,もしかしたら
という思いはあるのですが,試したことはないし,できたとしても,
TEmbeddedWBコンポ上でうまく表示可能かも分かりません.
今,TEmbeddedWBのサイトを検索したら,IShellBrowserの単語が書いて
あるページがありました.
何か関係があるかどうかは,全くわかりません.


[3925] Re9:Delphi6による動作検証返信 削除
2010/11/12 (金) 14:57:57 宮 〔HomePage
▼ Mr.XRAYさん
> また,左側にフォルダツリーを表示しても,右ペインの左側にも,
> Windows XP以降ではフォルダ関係のペインが表示されてしまいます.


私の、Windows7はXPのエクスプローラーのような左ペインが表示されません。
購入当初どこかカスタマイズしたのかな?

IShellView/IShellBrowserを読んでいます。今のところさっぱり解りません。
ぼちぼち勉強します。
ありがとうございました。

[3926] Re10:Delphi6による動作検証返信 削除
2010/11/12 (金) 16:07:04 Mr.XRAY
▼ 宮さん

> 私の、Windows7はXPのエクスプローラーのような左ペインが表示されません。
> 購入当初どこかカスタマイズしたのかな?


いえ,Windows Vista以降,IEとエクスプローラのインターフェイスが変更
になったためです.
Windows XPではIShellBrowserはフォルダビュー(フォルダ内のビューの意味
でファイルのリストのことです)は,確かにフォルダビューだったのですが,
左の何とかというペインも表示されるようになっていました.
これを制御する方法はないようです.

Windows Vista以降では,このペインの部分とフォルダビューが独立した
機能(インターフェイス)となったようです.

インターフェイス(Interface)関係の実装は難しいですよ.
TInterfacedObjectを継承して,
IDispatchやら,IServiceProviderとかIUnknownやら


[3927] インターフェイスの実装返信 削除
2010/11/12 (金) 16:25:01 Mr.XRAY
> インターフェイス(Interface)関係の実装は難しいですよ.

何かの参考に,ならないかな?

例えば,TInterfacedObjectを継承した,ICommDlgBrowserの機能を利用する
インターフェイスオブジェクトを実装するには,
ShlObj.pasのICommDlgBrowserに3つの関数があります.これをコピーしてコード
に貼り付けて,実現部を作成し,それぞれの関数の役割をネット(MSDNも含む)で
調べて書いていくことになります.
まず,目的の動作のために,どんなインターフェイスが必要なのかも調べなければ
なりません.
ハッキリ言って,気が遠くなります.

ShlObj.pas内のICommDlgBrowse部分

type
  ICommDlgBrowser = interface(IUnknown)
    [SID_ICommDlgBrowser]
    function OnDefaultCommand(const ppshv: IShellView): HResult; stdcall;
    function OnStateChange(const ppshv: IShellView; Change: ULONG): HResult; stdcall;
    function IncludeObject(const ppshv: IShellView; pidl: PItemIDList): HResult; stdcall;
  end;

コピーして貼り付け


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShlObj;

type
  TplMyInterface = class(TInterfacedObject, ICommDlgBrowser)
  private
  public
    function OnDefaultCommand(const ppshv: IShellView): HResult; stdcall;
    function OnStateChange(const ppshv: IShellView; Change: ULONG): HResult; stdcall;
    function IncludeObject(const ppshv: IShellView; pidl: PItemIDList): HResult; stdcall;
  end;


  TForm1 = class(TForm)
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TplMyInterface }

function TplMyInterface.IncludeObject(const ppshv: IShellView;
  pidl: PItemIDList): HResult;
begin
  //ここに必要な処理を書く
  //Result := E_NOTIMPL;
end;

function TplMyInterface.OnDefaultCommand(const ppshv: IShellView): HResult;
begin
  //ここに必要な処理を書く
  //Result := S_FALSE;
end;

function TplMyInterface.OnStateChange(const ppshv: IShellView;
  Change: ULONG): HResult;
begin
  //ここに必要な処理を書く
  //Result := S_OK;
end;

end.


[3928] Re11:Delphi6による動作検証返信 削除
2010/11/12 (金) 16:49:03 Mr.XRAY
> Windows XPではIShellBrowserはフォルダビュー(フォルダ内のビューの意味
> でファイルのリストのことです)は,確かにフォルダビューだったのですが,
> 左の何とかというペインも表示されるようになっていました.
> これを制御する方法はないようです.


こんな感じです.下がWindows 7の図です


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