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

Вниз

Как в проводнике   Найти похожие ветки 

 
FifteenTen ©   (2006-07-19 00:03) [0]

У меня такой вопрос:

Во многих программах видел ListView с выводом файлов, но главное это то, что при нажатии на фаил правой кнопкой вылезает PopupMenu как в проводнике - так вот, как это они делают?(если можно, то на примере)

И ещё, а можно ли изменять класс окна в запущенном приложении?


 
AndreyRus   (2006-07-19 00:32) [1]

А почему вы задаете этот вопрос в конференцию KOL, если он не имеет к ней отношение?


 
FifteenTen ©   (2006-07-19 01:25) [2]

Потому что, если задам не в конференции KOL то мне ответят что то типа:

"создай класс TComponent" или "Делается это элементарно, используя процедуры VCL ..." - эт я к примеру:) (а дальше в том же духе)

А так как на моей машине запускается Delphi IDE преимущественно с использованием KOL, то вполне разумно задать этот вопрос на форуме посвященном данной библиотеке, kol kol kol:)


 
Игорь Шевченко ©   (2006-07-19 11:26) [3]


> И ещё, а можно ли изменять класс окна в запущенном приложении?


Можно. Убить окно, создать его от другого класса.


 
Alexx2000   (2006-08-02 00:37) [4]

Посмотри исходники ShellListView (входит в поставку Delphi), или используй этот компонент. Я даже портировал его под KOL, но никак не могу выложить.


 
DiamondShark ©   (2006-08-02 02:16) [5]


> Во многих программах видел ListView с выводом файлов, но
> главное это то, что при нажатии на фаил правой кнопкой вылезает
> PopupMenu как в проводнике - так вот, как это они делают?
> (если можно, то на примере)

Можно на примере.

uses
 ComObj,
 ActiveX,
 ShellApi,
 ShlObj;

procedure TForm1.Button1Click(Sender: TObject);
var
   desktop: IShellFolder;
   mycomputer: IShellFolder;
   folder: IShellFolder;
   pidl: PItemIDList;
   malloc: IMalloc;
   chEaten: ULONG;
   dwAttributes: ULONG;
   contMenu: IContextMenu;
   menu: HMENU;
   cmd: UINT;
   cmici: CMINVOKECOMMANDINFO;
begin
   OleCheck( SHGetMalloc(malloc) );

   OleCheck( SHGetDesktopFolder(desktop) );
   OleCheck( SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, pidl) );
   try
       OleCheck( desktop.BindToObject(pidl, nil, IShellFolder, mycomputer) );
   finally
       malloc.Free(pidl);
   end;
   dwAttributes := 0;
   OleCheck( mycomputer.ParseDisplayName(Handle, nil, "C:\My Video\Clips\Nightwish", chEaten, pidl, dwAttributes) );
   try
       OleCheck( mycomputer.BindToObject(pidl, nil, IShellFolder, folder) );
   finally
       malloc.Free(pidl);
   end;
   dwAttributes := 0;
   OleCheck( folder.ParseDisplayName(Handle, nil, "Nightwish_-_I_Wish_I_Had_An_Angel.mpg", chEaten, pidl, dwAttributes) );
   try
       OleCheck( folder.GetUIObjectOf(Handle, 1, pidl, IContextMenu, nil, contMenu) );
   finally
       malloc.Free(pidl);
   end;
   menu := CreatePopupMenu;
   try
       OleCheck( contMenu.QueryContextMenu(menu, 0, 1, 65535, CMF_NORMAL) );
       cmd := UINT(TrackPopupMenu(menu, TPM_RETURNCMD, Mouse.CursorPos.x, Mouse.CursorPos.y, 0, Handle, nil));
   finally
       DestroyMenu(menu);
   end;
   if cmd > 0 then
       begin
           cmici.cbSize := sizeof(cmici);
           cmici.fMask := 0;
           cmici.hwnd := Handle;
           cmici.lpVerb := PChar(cmd - 1);
           cmici.lpParameters := nil;
           cmici.lpDirectory := nil;
           cmici.nShow := SW_NORMAL;
           OleCheck( contMenu.InvokeCommand(cmici) );
       end
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.047 c
2-1154512267
Barnikle
2006-08-02 13:51
2006.08.20
найти слово в тексте


15-1153430430
ronyn
2006-07-21 01:20
2006.08.20
dreamweaver


4-1145909672
Volf_555
2006-04-25 00:14
2006.08.20
Как отправить программе комбинацию клавиш?!


4-1146132097
D@Nger
2006-04-27 14:01
2006.08.20
Удаление дерева каталогов


3-1150283086
pooh
2006-06-14 15:04
2006.08.20
Ошибка при изменении записи в таблице