Что такое код trackpopupmenu


Странный вид PopUp Menu

Млин! То ли я лох полнейший, то ли чего не понимаю но у меня popup менюшки как-то странно выглядят! Узкий столбик высотой с количество элементов шириной пикселов 10-20 и все, никаких надписей, хотя ресурс есть и выглядит нормально.

23.08.2008, 22:44

Popup menu
Как создать Popup menu на C# и чтобы оно появлялось при нажатии на правую кнопку! :(

popup menu
вопрос такой — на форме лижит панел (pnl1), у нее в свойствах popupMenu — pm1. На этой панельке.

Popup menu
Ребят подскажите.В общем использую popup menu и у одного из его строк есть submenu.Как программно.

Popup Menu
Ситуация такая, необходимо написать popup меню, для win машин. Наткнулся на пару глюков с клиентом.

Popup Menu и CheckListBox
Здравствуйте. У меня есть код, который вызывает Popup Menu при нажатии на любой из нескольких.

24.08.2008, 13:44 2 24.08.2008, 13:44

Popup menu в StringGrid
Всем доброго времени суток. Как привязать popupmenu к определенной ячейке стринггрида? Вот такой.

Popup Menu Из Extensionlibrary
Всем привет. Вот проблема на пустом(?) месте: не применяются стили к popupMenu — popup после этого.

Checkbox в popup menu
Добрый день, вопрос следующий: Есть мемо, в котором вбивается текст, в Label выводится количество.

Не могу выйти из TrackPopupMenu

Я пытаюсь создать всплывающее меню, которое появляется при наборе текста на элементе управления, чтобы показать предложение. Проблема в том, что я не могу продолжать печатать, так как всплывающее окно не исчезнет. Единственный способ — нажать за пределами всплывающего окна. Все неудобно, если каждый набранный вами символ приходится нажимать снаружи, чтобы продолжать писать.

Я пробовал SetForeGround перед вызовом TrackPopupMenu, но это не сработало.

TrackPopupMenu

Описание

function TrackPopupMenu(Menu: HMenu; Flags: Word; x, y, cx: Integer; Wnd: HWnd; var Rect: TRect): Bool;

Отобpажает плавающее всплывающее меню и отслеживает выбоp элементов. Плавающие всплывающие меню могут отобpажаться в любом месте экpана.

Паpаметpы

  • Menu: Идентификатоp всплывающего меню.
  • Flags: Установлен в 0, не используется.
  • x, y: Положение веpхнего левого угла меню (в кооpдинатах экpана).
  • cx: Шиpина меню (в единицах экpана) или нуль по умолчанию.
  • Wnd: Окно, владеющее всплывающим меню, для пpиема сообщений wm_Command.
  • Rect: TRect, опpеделяющая область мыши, где меню остается видимым, если пользователь отпускает кнопку мыши.

Возвpащаемое значение

Не нуль в случае успешного завеpшения; 0 — в пpотивном случае.

Что такое код trackpopupmenu

Помогите.
Есть иконка в SysTray, есть PopUpMenu. При нажатии на иконке правой кнопкой мыши меню появляется и когда щелкаем в другом месте оно исчезаетю Все вроде ок вот код:
if(lParam == WM_RBUTTONDOWN)
<
EndMenu();
POINT pt;
::GetCursorPos(&pt);
::SetForegroundWindow(m_hWnd);
m_CmdBar.TrackPopupMenu(m_hMenu, 0, pt.x, pt.y);
>

Но когда щелкаем правой кнопкой на другой иконке в трее а затем правой кнопкой на моем значке меню появляется но убрать его, просто щелкнув в другом месте, не получается.
Я уже запарился все перепробовал!!

От: RomaWeb
Дата: 20.10.05 12:45
Оценка:
От: Кодт
Дата: 20.10.05 12:50
Оценка:


Здравствуйте, RomaWeb, Вы писали:

Илон Маск рекомендует:  $LocalSymbols - Директива компилятора Delphi

RW>Но когда щелкаем правой кнопкой на другой иконке в трее а затем правой кнопкой на моем значке меню появляется но убрать его, просто щелкнув в другом месте, не получается.

Оказывается, это не у одного тебя проблемы. Многие программы так себя ведут

От: RomaWeb
Дата: 20.10.05 12:53
Оценка:

Здравствуйте, Кодт, Вы писали:

К>Оказывается, это не у одного тебя проблемы. Многие программы так себя ведут

Так а выход есть из такой ситуации??
Или просто оставить как есть?

От: algol about:blank
Дата: 20.10.05 12:59
Оценка:

Здравствуйте, RomaWeb, Вы писали:

RW>Но когда щелкаем правой кнопкой на другой иконке в трее а затем правой кнопкой на моем значке меню появляется но убрать его, просто щелкнув в другом месте, не получается.

Использовал СTrayIconImpl отсюда. Все работает без проблем.

От: RomaWeb
Дата: 20.10.05 13:14
Оценка:

Здравствуйте, algol, Вы писали:

A>Использовал СTrayIconImpl отсюда. Все работает без проблем.

Все сработало супер спасибо!! Будем думать почему.

От: Кодт
Дата: 20.10.05 13:15
Оценка:

Здравствуйте, algol, Вы писали:

A>Здравствуйте, RomaWeb, Вы писали:

RW>>Но когда щелкаем правой кнопкой на другой иконке в трее а затем правой кнопкой на моем значке меню появляется но убрать его, просто щелкнув в другом месте, не получается.

A>Использовал СTrayIconImpl отсюда. Все работает без проблем.

Там есть интересный код

То есть, мало того, что окно нужно вытащить вперёд, ему требуется ещё и WM_NULL послать.

От: aik
Дата: 20.10.05 13:21
Оценка:

Здравствуйте, RomaWeb, Вы писали:

RW>Помогите.
RW>Есть иконка в SysTray, есть PopUpMenu. При нажатии на иконке правой кнопкой мыши меню появляется и когда щелкаем в другом месте оно исчезаетю Все вроде ок вот код:
RW>if(lParam == WM_RBUTTONDOWN)
RW> <
RW> EndMenu();
RW> POINT pt;
RW> ::GetCursorPos(&pt);
RW> ::SetForegroundWindow(m_hWnd);
RW> m_CmdBar.TrackPopupMenu(m_hMenu, 0, pt.x, pt.y);
RW> >

RW>Но когда щелкаем правой кнопкой на другой иконке в трее а затем правой кнопкой на моем значке меню появляется но убрать его, просто щелкнув в другом месте, не получается.
RW>Я уже запарился все перепробовал!!

Проблема такая старая, что о ней и MSDN теперь говорит прямо в статье про TrackPopupMenu:

To display a context menu for a notification icon, the current window must be the foreground window before the application calls TrackPopupMenu or TrackPopupMenuEx. Otherwise, the menu will not disappear when the user clicks outside of the menu or the window that created the menu (if it is visible). However, when the current window is the foreground window, the second time this menu is displayed, it displays and then immediately disappears. To correct this, you must force a task switch to the application that called TrackPopupMenu at some time in the near future. This is done by posting a benign message to the window or thread, as shown in the following code sample:

Функция TrackPopupMenu

Описание:

function TrackPopupMenu(Menu: HMenu; Flags: Word; x, y, cx: Integer; Wnd: HWnd; var Rect: TRect): Bool;

Отобpажает плавающее всплывающее меню и отслеживает выбоp элементов. Плавающие всплывающие меню могут отобpажаться в любом месте экpана.

Параметры:

Menu: Идентификатоp всплывающего меню.
Flags: Установлен в 0, не используется.
x, y: Положение веpхнего левого угла меню (в кооpдинатах экpана).
cx: Шиpина меню (в единицах экpана) или нуль по умолчанию.
Wnd: Окно, владеющее всплывающим меню, для пpиема сообщений wm_Command.
Rect: TRect, опpеделяющая область мыши, где меню остается видимым, если пользователь отпускает кнопку мыши.

Илон Маск рекомендует:  Защита от DoS-атак

Возвpащаемое значение:

Не нуль в случае успешного завеpшения; 0 — в пpотивном случае.

CMenu::TrackPopupMenu

Nonzero if the function is successful; otherwise 0.

Specifies a screen-position flag and a mouse-button flag. The screen-position flag can be one of the following:

    TPM_CENTERALIGN Centers the pop-up menu horizontally relative to the coordinate specified by x.

TPM_LEFTALIGN Positions the pop-up menu so that its left side is aligned with the coordinate specified by x.

TPM_RIGHTALIGN Positions the pop-up menu so that its right s > The mouse-button flag can be either of the following:


TPM_LEFTBUTTON Causes the pop-up menu to track the left mouse button.

  • TPM_RIGHTBUTTON Causes the pop-up menu to track the right mouse button.
  • Specifies the horizontal position in screen coordinates of the pop-up menu. Depending on the value of the nFlags parameter, the menu can be left-aligned, right-aligned, or centered relative to this position.

    Specifies the vertical position in screen coordinates of the top of the menu on the screen.

    Identifies the window that owns the pop-up menu. This window receives all WM_COMMAND messages from the menu. In Windows versions 3.1 and later, the window does not receive WM_COMMAND messages until TrackPopupMenu returns. In Windows 3.0, the window receives WM_COMMAND messages before TrackPopupMenu returns.

    Points to a RECT structure or CRect object that contains the screen coordinates of a rectangle within which the user can click without dismissing the pop-up menu. If this parameter is NULL, the pop-up menu is dismissed if the user clicks outside the pop-up menu. This must be NULL for Windows 3.0.

    For Windows 3.1 and later, you can use the following constants:

    Displays a floating pop-up menu at the specified location and tracks the selection of items on the pop-up menu. A floating pop-up menu can appear anywhere on the screen.

    TrackMenuPopup: всплывающее меню продолжает исчезать

    Я создал всплывающее меню , которое будет отображаться , когда пользователь нажимает на значок на панели задач с помощью TrackPopupMenu . Код работает отлично , пока я нажмите вне меню для отмены выбора пункта. Тогда всякий раз , когда я оставил / правую кнопку мыши на значке, меню появляется и тут же исчезает , прежде чем я вижу это (похоже TrackPopupMenu немедленно возвращает 0). MDSN рассказал, как исправить, добавив PostMessage(hDlg, WM_NULL, 0, 0); после TrackPopupMenu, но он не работает.

    Это значок для вашего приложения в трее?

    Tray иконки отправить сообщение WM_SHELLNOTIFY для различных вещей, wParm является 0, и вы можете проверить WM_RBUTTONDOWN | WM_RBUTTONUP в LPARAM.

    Создание меню один раз при запуске и удаление при закрытии вы трей приложения.

    Я считаю , что ваша проверку на WM_LBUTTONUP и WM_LBUTTONDOWN не правильный способ сделать это. При создании значка на панели задач мы указываем перезвонить сообщение. Именно это послание , которое должно быть проверено и в этом сообщении проверить LPARAM для WM_LBUTTONUP и WM_LBUTTONDOWN .

    Что такое код trackpopupmenu

    Скажем есть у меня в експолере есть вложенное контекстное меню
    Папка1/Действие1 и Папка1/Действие2
    Как автоматически найти выполняемую команду для bat-файла
    по действию Папка1/Действие2 при щелчке правой кнопкой на определенной папке?

    нечто вроде hook context menu
    я попытался найти команду через реестр, но это темный лес

    Илон Маск рекомендует:  ob_end_clean - очищает буфер вывода и отключает буферизацию вывода.

    ссылки по теме
    www.cyberforum.ru/cmd-bat/thread1495660.html
    docs.microsoft.com/en-us/windows/desktop/shell/context-menu-handlers
    stackoverflow.com/questions/3777121/how-to-access-windows-shell-context-menu-items

    по последней ссылке delphi-код не работает
    TrackPopupMenu возвращает Bool а по коду Integer

    что такое передать через ACommandID?

    (что такое MenuID — MENUID_FIRST?)

    чтобы выполнить пункт меню Папка1/Действие2 ?

    я пытался использовать Process Monitor, но не знаю какие настраивать фильтры.

    11.19.1.33 — Функция TrackPopupMenu / Меню. / Win32 API

    11.19.1.33 — Функция TrackPopupMenu

    Функция TrackPopupMenu показывает на экране контекстное меню в заданном расположении и устанавливает выбор пунктов в меню. Контекстное меню может появляться в любом месте на экране.

    Параметры
    hMenu
    Идентифицирует контекстное меню, которое нужно отобразить. Дескриптор может быть получен путем вызова CreatePopupMenu, чтобы создать новое контекстное меню, или путем вызова GetSubMenu, чтобы извлечь дескриптор подменю, связанного с существующим пунктом меню.
    uFlags
    Набор битовых флажков, которые определяют параметры функции.
    Используйте одну из следующих констант битовых флажков, чтобы определить, как функция установит контекстное меню по горизонтали:

    • TPM_CENTERALIGN — Если этот флажок установлен, функция выравнивает по центру горизонтали контекстное меню, относительно координаты, определяемой параметром x.
    • TPM_LEFTALIGN — Если этот флажок установлен, функция устанавливает контекстное меню так, чтобы его левая сторона была выровнена по координате, определяемой параметром x.
    • TPM_RIGHTALIGN — Устанавливает контекстное меню так, чтобы правая сторона была выровнена по координате, определяемой параметром x.

    Используйте одну из следующих констант битового флажка, чтобы определить, какой кнопкой мыши установится контекстное меню:

    • TPM_LEFTBUTTON — Если этот флажок установлен, контекстное меню устанавливается левой кнопкой мыши.
    • TPM_RIGHTBUTTON — Если этот флажок установлен, контекстное меню устанавливается правой кнопкой мыши.

    x
    Определяет горизонтальное расположение контекстного меню, в экранной системе координат.
    y
    Определяет вертикальное расположение контекстного меню, в экранной системе координат.
    nReserved
    Зарезервировано; должнобыть ноль.
    hWnd
    Идентифицирует окно, которое владеет контекстным меню. Это окно принимает все сообщения от меню. Окно не получает сообщение WM_COMMAND от меню до тех пор, пока функция не возвратит значение.
    prcRect
    Указывает на структуру RECT, которая определяет часть экрана, в которой пользователь может выбирать контекстное меню без ее освобождения. Если этот параметр имеет значение ПУСТО (NULL), контекстное меню освобождается, если пользователь щелкает кнопкой мыши вне контекстного меню.

    Возвращаемые значения
    Если функция завершается успешно, величина возвращаемого значения — не ноль.
    Если функция не выполняет задачу, величина возвращаемого значения — ноль. Чтобы получать расширенные данные об ошибках, вызовите GetLastError.

    Смотри также
    CreatePopupMenu, GetSubMenu, RECT, WM_COMMAND

    Размещение и совместимость TrackPopupMenu

    Что такое код trackpopupmenu

    Необходимо отобразить всплывающее меню pm в окне с дескриптором HWND.
    Пишу
    TrackPopupMenu(pm.Handle, TPM_LEFTALIGN or TPM_RIGHTALIGN or TPM_CENTERALIGN, CursorPoint.X,
    CursorPoint.Y, 0, HWND, 0)
    но меню не отображается, что не так?
    PS: меню отображается только если в качестве HWND указываю Handle главного окна.
    но мне надо отображать именно на окне с произвольным Handle.

    Этот HWND — это то окно, в которое будут приходить WM_COMMAND, указывающие на выбор пункта из меню. К местоположению меню никакого отношения не имеет.

    > но меню не отображается, что не так?

    А оно (меню) было создано до этого вообще и пункты в него добавлены?

    hMenuPopup:=CreatePopupMenu;
    if (hMenuPopup<>0) then
    begin
    AppendMenu(hMenuPopup, MF_STRING, 1000, pchar(RsMessage201));
    AppendMenu(hMenuPopup, MF_STRING, 1001, pchar(RsMessage202));
    AppendMenu(hMenuPopup, MF_STRING, 1002, pchar(RsMessage203));
    end;
    .
    .
    .

    WM_RBUTTONDOWN:
    begin
    TrackPopupMenu (hMenuPopup, 0, LoWord(lParam), HiWord(lParam), 0, Wnd, nil);
    Result := DefWindowProc(wnd, msg, wparam, lparam);
    end;

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL