Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Virtual ListView с контекстным меню

Delphi , Компоненты и Классы , TListView

Virtual ListView с контекстным меню

Два программера разговаривают:
- Вася - ты каких любишь...?
- Нуу - которые 800х600...
- А я 1024х768 - они покрупней - обхватишь, так, прижмёшь.... - здорово (мечтательно, закрыв глаза и пуская, слюни).

В Delphi5/Demos есть пример Virtual ListView. программка чем-то напоминает explorer, но без контекстного меню. контекстное меню приделывается так:


procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
  ContextMenu : IContextMenu;
  menu : HMENU;
begin
  FIShellFolder.GetUIObjectOf(Handle, 1,
  ShellItem(ListView.Selected.index).ID,
  IID_IContextMenu, nil, ContextMenu);
  menu := CreatePopupMenu();
  ContextMenu.QueryContextMenu(menu, 0, 1, $7FFF, CMF_EXPLORE);
  TrackPopupMenu(menu,
  TPM_LEFTALIGN or TPM_LEFTBUTTON or TPM_RIGHTBUTTON or TPM_RETURNCMD,
  Mouse.CursorPos.x, Mouse.CursorPos.y, 0, Handle, nil);
  DestroyMenu(menu);
end;

Классический пример кода на Delphi!

Давайте разберемся в коде:

Цель: Создать виртуальный ListView с контекстным меню (правый клик), которое отображается при клике по элементу в списке.

Код: Процедура PopupMenu1Popup вызывается, когда пользователь правым кликом выбирает элемент в виртуальном ListView. Она получает выбранный элемент, извлекает интерфейс IContextMenu, и использует его для создания контекстного меню с конкретными опциями (например, командой "Explore").

Шаг за шагом:

  1. FIShellFolder.GetUIObjectOf: Метод используется для получения объекта, реализующего интерфейс IContextMenu для выбранного элемента.
  2. ContextMenu.QueryContextMenu: Метод заполняет менюhandle (menu) опциями из контекстного меню. Метод QueryContextMenu принимает несколько параметров:
    • menu: Менюhandle, которое нужно заполнить.
    • itemid: ID первого элемента в меню (0 для выбранного элемента).
    • verb: Глагол для команды (1 для "Explore").
    • fMask: Флаг, указывающий, включать ли все элементы или только те, которые соответствуют конкретному маске ($7FFF означает все элементы).
  3. TrackPopupMenu: Функция отображает контекстное меню в указанной позиции (Mouse.CursorPos.x и Mouse.CursorPos.y) на экране.
  4. DestroyMenu: Наконец, менюhandle уничтожается.

Альтернативное решение: Хотя этот код работает, вы также можете использовать встроенную функциональность Delphi для создания контекстного меню для виртуального ListView. Вы можете настроить обработчик события OnContextPopup компонента Virtual ListView и заполнить контекстное меню используя свойство TListView.ContextMenu.

Например:

procedure TForm1.ListView1ContextPopup(Sender: TObject; MousePos: TPoint);
var
  menu: TPopupMenu;
begin
  menu := TPopupMenu.Create(Self);
  with menu do begin
    AddItem('Explore', 0); // Добавьте больше элементов, если нужно
  end;
  menu.Popup(MousePos.x, MousePos.y);
end;

Эта approached более проста и прямолинейна, чем оригинальный код.

В статье описывается пример создания виртуального ListView с контекстным меню в Delphi5, демонстрируя как добавить контекстное меню к виртуальному ListView с помощью интерфейса IContextMenu и функции QueryContextMenu.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TListView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:28:16/0.005591869354248/1