16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:PopupMenuにデスクトップ項目を列挙1"
この発言は #01279 Wacky さんのPopupMenuにデスクトップ項目を列挙1 に対するコメントです
この発言に対し以下のコメントが寄せられています
#01285 Wacky さん RE:PopupMenuにデスクトップ項目を列挙1
Wacky です。修正です。よろしくお願いします。
//---------------------------------------------------------------
procedure TForm1.GetSubItems(ShellFolder: IShellFolder; itemIDList,
itemIDList_Full: PItemIDList; var SubMenuItem: TMenuItem);
var
ShellFolder_Sub: IShellFolder;
enumIDList_Sub: IEnumIDList;
itemIDList_New, // <-- 追加
itemIDList_Sub: PItemIDList;
{...略...}
begin
{...略...}
// それぞれのアイテムについて
celt:= ULONG(1);
pceltFetched := ULONG(0);
while enumIDList_Sub.Next(celt,
itemIDList_Sub, pceltFetched) = NOERROR do
begin
itemIDList_New := // <-- 追加
Concatenate(itemIDList_Full, itemIDList_Sub); // <-- 追加
{...略...}
// アイコンを取得
// SHGetFileInfo(PChar(Concatenate(itemIDList_Full, itemIDList_Sub)),
SHGetFileInfo(PChar(itemIDList_New), // <-- 修正
0, sfi, SizeOf(TSHFileInfo), SHGFI_PIDL or SHGFI_ICON or
SHGFI_SMALLICON or SHGFI_DISPLAYNAME);
{...略...}
// メニュー項目を作成し、アイコン・キャプション・PItemIDListを保存
NewSubMenuItem := TMenuItem.Create(Self);
with NewSubMenuItem do begin
ImageIndex := NewSubImageIndex;
Caption := IconCaption;
// Tag := IDlist.Add(Concatenate(itemIDList_Full, itemIDList_Sub));
Tag := IDlist.Add(itemIDList_New); // <-- 修正
end;
// 仮想フォルダならばサブフォルダを取得
HasRealPath := SHGetPathFromIDList(
// Concatenate(itemIDList_Full, itemIDList_Sub), Path);
itemIDList_New, Path); // <-- 修正
if HasRealPath = False then
begin
GetSubItems(ShellFolder_Sub, itemIDList_Sub,
// Concatenate(itemIDList_Full, itemIDList_Sub), NewSubMenuItem);
itemIDList_New, NewSubMenuItem); // <-- 修正
end;
// 下位階層にアイテムがなければクリックイベントを設定
if NewSubMenuItem.Count = 0 then begin
NewSubMenuItem.OnClick := PopupMenuClick;
end;
SubMenuItem.Add(NewSubMenuItem);
Malloc.Free(itemIDList_Sub); // <-- 追加
{...略...}
end;
Original document by Wacky 氏 ID:(HQL05475)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|