喫茶XRAYトップページ

[スレッド全体
]

[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