2011/5/13 (金) 16:50:16 Mr.XRAY |
[お気に入りに追加]のダイアログ表示のコードを書いてみました.
shdocvw.dll内のDoAddToFavDlgという関数で表示(モーダル表示)できるんだそうです.
VCLで未定義のWin32 API関数の使用
http://mrxray.on.coocan.jp/Delphi/Others/Usage_Win32API.htm#01
で,関数そのものを使うのは簡単にできるんですが.
やってみちら,文字が1文字分しか処理してくれんない.
この関数,Ansi版だったんですね.で,AnsiCharに直して動作しました.
う〜む.何か,つまらない.
サンプルプログラム集掲載はボツですね.
動作確認は,Windows 7 U64 + Delphi 2010(UP5)です.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShlObj;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
//PITEMIDLISTの使用にはusesにShlObjが必要
//文字列はAnsiでないと正常動作しない
function DoAddToFavDlg(
hWindow : HWND;
wpszInitDir : PAnsiCHAR;
cchInitDir : UINT;
wspzFile : PAnsiCHAR;
cchInitFDir : UINT;
pidlBrowse : PITEMIDLIST
): BOOL; stdcall; external 'shdocvw.dll';
var
Form1: TForm1;
implementation
uses ActiveX;
{$R *.dfm}
//=============================================================================
// お気に入りダイアログの表示(タスクバーにアイコン表示なし)
//
// 使用する関数のMSDNの記事より
// http://msdn.microsoft.com/en-us/library/aa753580%28VS.85%29.aspx
//
// BOOL DoAddToFavDlg(
// HWND hwnd,
// CHAR *pszInitDir,
// UINT cchInitDir,
// CHAR *pszFile,
// UINT cchInitDir,
// LPITEMIDLIST pidlBrowse
// );
//
// PItemIDListの使用にはusesにActiveXが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
wpszInitDir : array[0..MAX_PATH - 1] of AnsiChar;
wpszFile : array[0..MAX_PATH - 1] of AnsiChar;
pidlBrowse : PItemIDList;
begin
StrPCopy(wpszFile, '素敵なサイト');
//[お気に入り]フォルダの項目識別子を取得
SHGetSpecialFolderLocation(Handle,
CSIDL_FAVORITES,
pidlBrowse);
//DoAddToFavDlgはAnsi版であることに注意
if DoAddToFavDlg(Handle,
wpszInitDir, //終了後に入力した名前のフルパス名が戻ってくる
MAX_PATH,
wpszFile, //終了後に入力した名前部分のみが戻ってくる
MAX_PATH,
pidlBrowse) //作成先のフォルダを項目識別子で指定
then begin;
//ここに実際の[お気に入り]への登録コードを書く
end;
//項目識別子の解放
CoTaskMemFree(pidlBrowse);
end;
end.
|
|