お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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