Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.039 c
2-1154092119
Ezorcist
2006-07-28 17:08
2006.08.20
про динамические массивы


15-1153503850
Andy BitOff
2006-07-21 21:44
2006.08.20
Редактирование DDS - графические файлы


3-1150363571
Pe+erBuild
2006-06-15 13:26
2006.08.20
Фиксированые поля


15-1153732876
вразлет
2006-07-24 13:21
2006.08.20
Не могу найти мелоадию


1-1152272654
Stanislav
2006-07-07 15:44
2006.08.20
Определить наличие процесса в памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский