Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

Контекстное меню дла файла в сети   Найти похожие ветки 

 
_Seldon_   (2005-04-18 20:12) [0]

Для показа контекстного меню использую такой код:

OleInitialize(nil);
 PMenu:=TPopupMenu.Create(Application);
 SHGetDesktopFolder(IShFolder);

 Dirs:=TStringList.Create;
 try
   Delete(FileName,1,2);
   Dirs.Text:=FastReplace(FileName,"\",#13#10);
   Dirs[0]:="\\"+Dirs[0];

   for a:=0 to Dirs.Count-2 do
   begin
     MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,PChar(Dirs[a]),-1,@szOleChar,SizeOf(szOleChar));
     IShFolder.ParseDisplayName(0,nil,@szOleChar,Tmp,IdList,Tmp); {!!!}
     IShFolder.BindToObject(IdList,nil,IID_IShellFolder,Pointer(IShFolder));
   end;

   MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,PChar(Dirs[Dirs.Count-1]),-1,@szOleChar,SizeOf(szOleChar));
   IShFolder.ParseDisplayName(0,nil,@szOleChar,Tmp,IdList,Tmp);
 finally
   Dirs.Free;
 end;

 IShFolder.GetUIObjectOf(Application.Handle,1,IdList,IID_IContextMenu,nil,Pointer(IMenu));
 IMenu.QueryInterface(IID_IContextMenu2,ActiveIContextMenu);
 IMenu.QueryContextMenu(PMenu.Handle,0,1,$7fff,CMF_EXPLORE);
 idCmd:=Word(TrackPopupMenu(PMenu.Handle,TPM_LEFTALIGN or TPM_RETURNCMD or TPM_RIGHTBUTTON,Pos.X,Pos.Y,0,Application.Handle,nil));
 if idCmd>0 then
   with cmi do
   begin
     IMenu.GetCommandString(idCmd-1,GCS_VERB,nil,@cmd_verb,MAX_PATH);
     cbSize:=SizeOf(cmi);
     fMask:=0;
     hwnd:=Application.Handle;
     lpVerb:=PChar(idCmd-1);
     dwHotkey:=0;
     hicon:=0;
     nShow:=SW_SHOWNORMAL;
     lpParameters:=nil;
     lpDirectory:=nil;
     IMenu.InvokeCommand(cmi);
   end;


Для локальных файлов он работает, а для файлов, расположенных в сети - нет. В стороке, помеченной !!! на второй итерации IdList всегда равен nil. В чём ошибка?


 
_Seldon_   (2005-04-19 22:20) [1]

Аууу :)


 
nikkie ©   (2005-04-20 00:16) [2]

вот это что такое?

>Delete(FileName,1,2);


 
_Seldon_   (2005-04-20 17:17) [3]

удаление \\ из имён вида \\somecomp


 
nikkie ©   (2005-04-20 23:46) [4]

а как же это на локальных файлах работает?



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.041 c
6-1113650941
-[ HAWK ]-
2005-04-16 15:29
2005.07.31
Подключение к инету


5-1091542196
Сашенька
2004-08-03 18:09
2005.07.31
Как узнать что мой компонент находится в run-time


11-1103779933
DVK
2004-12-23 08:32
2005.07.31
Лишняя начальная строка в ListView


3-1118905915
Леонид
2005-06-16 11:11
2005.07.31
Firebird. Нужен пример создания таблиц и тестовой программы


4-1117228711
seamcat
2005-05-28 01:18
2005.07.31
Handl ы