16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ITaskbarList と IShellDispatch"
この発言に対し以下のコメントが寄せられています
#01195 Fermion さん ITaskbarList と IShellDispatch (宣言)
■概要
ITaskbarList を使用したタスクバーへのボタン追加/削除のサンプル
と IShellDispatch を使用してタスクバープロパティダイアログを表示
させるサンプルです。
■コンポーネント
Form1 に Button1, Button2 を適当に配置して下さい。
■サンプル実行時
Button1 ( Caption は AddTab ) のクリックでタスクバー上に新しい
ボタンが追加され、 Button2 ( Caption は DeleteTab ) のクリックで
そのボタンがタスクバー上から削除されます。
タスクバー上に追加されたボタン ( Caption は TrayProperties )を
クリックするとタスクバーのプロパティダイアログが表示されます。
■注意事項
・Shell32.DLL Ver.4.71 以降が必要。( Win95 + IE4.0 以降 )
・ShlObjEx.pas( 本発言へのコメント参照 )が必要。
・Windows98SE + Delphi5 で動作確認。
・Delphi 上でのデバッグ実行はしない方が良いかも知れません。
・本サンプルは、ご自身の責任においてお試し下さい。 (((^^;)
■その他
IShellDispatch を使用すると BrowseForFolder を表示させることが
できる等、他にも色々面白い?事が。。。是非お試しを。
# 試したらサンプル蔵にアップしてね。(^_-)-☆
■サンプルコード
//=========================================================================
{...略...}
implementation
uses ShlObjEx, ActiveX, ComObj, ShlObj;
{$R *.DFM}
{*************************************************************************
変数宣言
//***********************************************************************}
var
HBtn : HWND; {* Taskbar に貼り付けるボタンを識別 *}
pITskbrLst: ITaskbarList; {* ITaskbarList interface ポインタ *}
OldWinProc: TFNWndProc; {* 以前の Window Procedure のポインタ *}
{*************************************************************************
Taskbarのプロパティダイアログを表示
//***********************************************************************}
procedure ShowTrayProperty;
var
pIShDispatch: IShellDispatch; {* IShellDispatch interface ポインタ *}
begin
pIShDispatch := nil;
OleCheck( CoCreateInstance( CLSID_Shell, nil, CLSCTX_SERVER,
IID_IShellDispatch, pIShDispatch ));
pIShDispatch.TrayProperties;
end;
{*************************************************************************
New Window Procedure
//***********************************************************************}
function NewWinProc( TheWindow: HWND; Msg: Integer;
wParam: WPARAM; lParam: LPARAM ): Longint; stdcall;
begin
case Msg of
WM_NCACTIVATE:
begin
ShowTrayProperty;
Result := 1;
end;{WM_NCACTIVATE}
else
begin
Result := CallWindowProc( OldWinProc, TheWindow,
Msg, wParam, lParam );
end;
end;{case Msg of}
end;
{*************************************************************************
Form1 OnCreate
//***********************************************************************}
procedure TForm1.FormCreate(Sender: TObject);
begin
{* Taskbar追加用のボタンを生成 *}
HBtn := CreateWindow( 'button', 'TrayProperties',
WS_CHILD or WS_CLIPSIBLINGS or BS_PUSHBUTTON,
0, 0, 0, 0, Handle, 0, HInstance, nil );
{* Button への Message を intercept するために subclass化 *}
if HBtn <> 0 then
begin
OldWinProc := TFNWndProc( SetWindowLong( HBtn, GWL_WNDPROC,
Longint( @NewWinProc )));
end;{if HBtn <> 0 then}
Button1.Caption := 'AddTab';
Button2.Caption := 'DeleteTab';
end;
{*************************************************************************
Form1 OnDestroy
//***********************************************************************}
procedure TForm1.FormDestroy(Sender: TObject);
begin
{* 生成したボタンを破棄 *}
if HBtn <> 0 then
begin
DestroyWindow( HBtn );
pITskbrLst.DeleteTab( HBtn );
end;{if HBtn <> 0 then}
end;
{*************************************************************************
Button1 OnClick ( AddTab )
//***********************************************************************}
procedure TForm1.Button1Click(Sender: TObject);
begin
if ( HBtn <> 0 ) and Assigned( pITskbrLst ) then
pITskbrLst.AddTab( HBtn );
end;
{*************************************************************************
Button2 OnClick ( DeleteTab )
//***********************************************************************}
procedure TForm1.Button2Click(Sender: TObject);
begin
if ( HBtn <> 0 ) and Assigned( pITskbrLst ) then
pITskbrLst.DeleteTab( HBtn );
end;
{*************************************************************************
初期化および終了処理部
//***********************************************************************}
initialization
begin
OleCheck( OleInitialize( nil ) );
pITskbrLst := nil;
OleCheck( CoCreateInstance( CLSID_TaskbarList, nil, CLSCTX_SERVER,
IID_ITaskbarList, pITskbrLst ));
pITskbrLst.HrInit( nil );
end;
finalization
begin
OleUnInitialize;
end;
{*************************************************************************
//***********************************************************************}
end.
//=========================================================================
00/11/14(Tue) 01:47am Fermion [KHF03264]
Original document by Fermion 氏 ID:(KHF03264)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|