> インターフェイス(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.
|