喫茶XRAYトップページ

[スレッド全体
]

[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