Главная страница
    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.037 c
15-1153645976
Der Nechk@ssoff
2006-07-23 13:12
2006.08.20
Монитор


3-1150304770
vvQuad
2006-06-14 21:06
2006.08.20
Перенос БД на другой комп


15-1153430789
Батя
2006-07-21 01:26
2006.08.20
Слова Благодарности


15-1153818678
vidiv
2006-07-25 13:11
2006.08.20
Как ISA сервер привязать к другому ISA серверу?


15-1153845436
TJulia
2006-07-25 20:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский