Re[2]: pidl нужного итема из ShellView
От: Lapin Украина  
Дата: 03.09.03 10:07
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Посмотри IShellView::GetItemObject


В принципе смотрел уже:

Получил объект IDataObject вызывая IShellView::GetItemObject с параметром SVGIO_SELECTION
Все красиво, прямо прелестно но тут столкнулся с проблемой другого плана :
хотел извлечь из IDataObject все пидлы...получил список в формате CFSTR_SHELLIDLIST
А вот тут собсно и проблема :
Эту всю радость надо наваять в Delphi ....
и макрос

#define GetPIDLItem(pida, i) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[i+1])

тупо не могу перевести на Pascal (
ужастно стыдно, но не могу....
если можешь помоги, плиз

делаю все так


if Succeeded(FShellView.GetItemObject(SVGIO_SELECTION,IID_IDataObject,pData)) then
begin
FillChar(fmt,sizeof(fmt),0);
fmt.cfFormat := RegisterClipboardFormat(CFSTR_SHELLIDLIST);
fmt.ptd := 0;
fmt.dwAspect := DVASPECT_CONTENT;
fmt.lindex := -1;
fmt.tymed := TYMED_HGLOBAL;
if Succeeded(IDataObject(pData).GetData(fmt,data)) then
begin
list := GlobalLock(data.hGlobal);
// Вот эта строчка и не катит
pidl := PItemIDList(pointer(cardinal(@list)+list.aoffset[0]));
end;
end;
Спасибо за внимание...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.