<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3834991</guid>
        <pubDate>Thu, 23 Jul 2020 11:34:49 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3834991</link>
        <description><![CDATA[Маршал: Стандартное заглушите, на правую кнопку поставьте свое<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_CUT:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_COPY:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_PASTE:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_CONTEXTMENU:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_RBUTTONDOWN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TrackPopupMenu(e::hpopupmenuedit, 0, point.x, point.y, 0, hwnd, NULL);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Маршал</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3818142</guid>
        <pubDate>Mon, 13 Jan 2020 18:29:53 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3818142</link>
        <description><![CDATA[SamBellamy: Решено. Оказывается ID  меню это код сообщения. Остается подобрать ID, не совпадающий с реально существующими сообщениями, а потом поймать и обработать. Решение подсмотрел в гугле  &quot;Modify right-click context menu in standard controls&quot;.<br>
Также рекомендуют, постоянно включенным хук не держать.<br>
<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, AppEvnts;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Mmo1: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FontDialog1: TFontDialog;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormDestroy(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">Hook: HHOOK = 0;</div><div class="code_line">MemoPopupMenu: Boolean = False;</div><div class="code_line">&nbsp;</div><div class="code_line">function CallWndProcHook(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;idd: integer;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure ModifyMemoMenu(Menu: HMENU);</div><div class="code_line">begin</div><div class="code_line">if Menu = 0 then Exit;</div><div class="code_line">// ShowMessage(IntToStr(GetMenuItemCount(Menu)));</div><div class="code_line">AppendMenu(Menu, MF_SEPARATOR, 0, nil);</div><div class="code_line">AppendMenu(Menu, MF_STRING, WM_APP Or 111, &#39;Font...&#39;);</div><div class="code_line">MemoPopupMenu := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if code = HC_ACTION then</div><div class="code_line">&nbsp;&nbsp; &nbsp;with PCWPStruct(lparam)^ do</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( ( WM_APP and message ) &nbsp;= WM_APP) &nbsp; &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; idd := (message xor wm_app);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if idd = 111 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;showmessage(&#39;Font!!!&#39;)</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">else</div><div class="code_line">&nbsp;&nbsp;case message of</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;WM_MENUSELECT:</div><div class="code_line">&nbsp;&nbsp; &nbsp; if MemoPopupMenu then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ModifyMemoMenu(lParam);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;WM_CONTEXTMENU:</div><div class="code_line">&nbsp;&nbsp; &nbsp;if hwnd = Form1.mmo1.Handle then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MemoPopupMenu := True;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;E2: // это типа заставляем реагировать на WM_MENUSELECT до появления окна...</div><div class="code_line">&nbsp;&nbsp; &nbsp;if MemoPopupMenu then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SendMessage(hwnd, E5, 0, 0);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">Result := CallNextHookEx(Hook, code, wparam, lparam);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Hook := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProcHook, 0, GetCurrentThreadId);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormDestroy(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; UnhookWindowsHookEx(Hook);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>SamBellamy</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3296280</guid>
        <pubDate>Wed, 03 Apr 2013 07:38:17 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3296280</link>
        <description><![CDATA[leo: В отличие от дельфийского TPopupMenu, &quot;виндовские&quot; контекстные меню не шлют нотификаций родительскому окну, используюя ф-ю TrackPopupMenu с флагами TPM_NONOTIFY+TPM_RETURNCMD, которая отрабатывает &quot;по тихому&quot; и просто возвращает ID выбранного пункта меню. Поэтому единственный надежный способ определить клик по своему добавленному пункту - это перехватывать саму функцию TrackPopupMenu. Ну или возиться с отлавливанием мышиного клика и определения пункта меню под курсором..]]></description>
        <author>leo</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3296031</guid>
        <pubDate>Tue, 02 Apr 2013 15:17:12 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3296031</link>
        <description><![CDATA[BugMeNot: По мотивам этой темы добавил в системное меню TMemo пункт для изменения шрифта.<br>
Но почемуто ни в какую не отлавливается WM_COMMAND ни на мой пункт, ни вообще ни на один виндовский пункт меню.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Hook: HHOOK = 0;</div><div class="code_line">&nbsp;&nbsp;MemoPopupMenu: Boolean = False;</div><div class="code_line">&nbsp;</div><div class="code_line">function CallWndProcHook(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;IDChangeMemoFont = 6666;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; procedure ModifyMemoMenu(Menu: HMENU);</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Menu = 0 then Exit;</div><div class="code_line">// &nbsp; &nbsp; &nbsp; ShowMessage(IntToStr(GetMenuItemCount(Menu)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; AppendMenu(Menu, MF_SEPARATOR, 0, nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp; AppendMenu(Menu, MF_STRING, IDChangeMemoFont, &#39;Font...&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; MemoPopupMenu := False;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if code = HC_ACTION then</div><div class="code_line">&nbsp;&nbsp; &nbsp;with PCWPStruct(lparam)^ do</div><div class="code_line">&nbsp;&nbsp; &nbsp;case message of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WM_COMMAND:</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp;if hwnd = Form1.mmo1.Parent.Handle then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with LongRec(wParam) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(Hi = 0) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(Lo = IDChangeMemoFont) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with TFontDialog.Create(Form1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Font := Form1.mmo1.Font;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Execute(Form1.Handle) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Form1.mmo1.Font := Font;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Free;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WM_MENUSELECT:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if MemoPopupMenu &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ModifyMemoMenu(lParam);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WM_CONTEXTMENU:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if hwnd = Form1.mmo1.Handle then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MemoPopupMenu := True;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;E2: // это типа заставляем реагировать на WM_MENUSELECT до появления окна...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if MemoPopupMenu then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SendMessage(hwnd, E5, 0, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Result := CallNextHookEx(Hook, code, wparam, lparam);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Hook := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProcHook, 0, GetCurrentThreadId);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormDestroy(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;UnhookWindowsHookEx(Hook);</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>BugMeNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295380</guid>
        <pubDate>Mon, 01 Apr 2013 04:42:58 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295380</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=82712&view=findpost&p=3295344'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>BugMeNot &#064; <time class="tag-quote__quoted-time" datetime="2013-03-31T18:49:13+00:00">31.03.13, 18:49</time></span><div class='quote '>Код в #5&#092;WM_CONTEXTMENU </div></div><br>
Зачем тебе вообще WM_CONTEXTMENU? С ним такая же проблема, как и WM_MENUSELECT - шлется родительскому окну меню, которое не обязано быть именно формой.<br>
  <br>
Можно просто установить хук в FormCreate и снять в FormDestroy, а &quot;включать&#092;выключать&quot; его установкой доп.глобальной переменной HookOn:boolean - если установлена, то что-то делаешь в процедуре хука, если нет, то сразу вызываешь CallNextHookEx]]></description>
        <author>leo</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295344</guid>
        <pubDate>Sun, 31 Mar 2013 18:49:13 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295344</link>
        <description><![CDATA[BugMeNot: Код в #5&#092;WM_CONTEXTMENU не работает при первом ПКМ на TEdit. <br>Но работает при ПКМ на самой форме.<br>Delphi XE3...]]></description>
        <author>BugMeNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295113</guid>
        <pubDate>Sat, 30 Mar 2013 16:59:00 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295113</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=82712&view=findpost&p=3295046'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>eclipse_99 &#064; <time class="tag-quote__quoted-time" datetime="2013-03-30T14:31:03+00:00">30.03.13, 14:31</time></span><div class='quote '>В чём проблема может быть?</div></div><br>
В том, что родительским окном для всех PopupMenu является не форма, а PopupList.Window. Поэтому нужно либо подменять его WndProc через SetWindowLong, либо проще - использовать хук SetWindowHookEx]]></description>
        <author>leo</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295046</guid>
        <pubDate>Sat, 30 Mar 2013 14:31:03 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295046</link>
        <description><![CDATA[eclipse_99: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=82712&view=findpost&p=3295040'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>leo &#064; <time class="tag-quote__quoted-time" datetime="2013-03-30T14:17:10+00:00">30.03.13, 14:17</time></span><div class='quote '>Перехват сообщения WM_MENUSELECT (проще через хук как в #5), плюс код определения MenuItem по ItemID - можно взять из исходника TPopupList.WndProc в модуле menus.pas</div></div><br>
Есть небольшой опыт, но он почему-то работает только с MainMenu, В чём проблема может быть?<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit main;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp; Dialogs, Menus, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp; lbl1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp; suiPopupMenu1: TsuiPopupMenu;</div><div class="code_line">&nbsp;&nbsp; private</div><div class="code_line">&nbsp;&nbsp; &nbsp; procedure WmMenuSelect (var Message: TMessage); message WM_MENUSELECT;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.WmMenuSelect(var Message: TMessage);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; Item: TMenuItem;</div><div class="code_line">&nbsp;&nbsp; I: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Item := suiPopyupMenu1.FindItem(Message.LParam, fkHandle);</div><div class="code_line">&nbsp;&nbsp; if Assigned(Item) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; for I := 0 to Item.Count - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if Item.Items[I].Command = Message.WParamLo then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; lbl1.Caption:= Item.Items[I].Caption); //Записываем выбранный Item</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>eclipse_99</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295040</guid>
        <pubDate>Sat, 30 Mar 2013 14:17:10 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3295040</link>
        <description><![CDATA[leo: Перехват сообщения WM_MENUSELECT (проще через хук как в #5), плюс код определения MenuItem по ItemID - можно взять из исходника TPopupList.WndProc в модуле menus.pas]]></description>
        <author>leo</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3294977</guid>
        <pubDate>Sat, 30 Mar 2013 08:58:25 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=3294977</link>
        <description><![CDATA[eclipse_99: А не подскажите как отследить движение мышки на компоненте PopupMenu? Интересует именно то, что нужно узнать над каким Item&#39; ом он находится, т.к. у Item&#39; ов нет свойства OnMouseMove.]]></description>
        <author>eclipse_99</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=609497</guid>
        <pubDate>Fri, 11 Feb 2005 19:10:49 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=609497</link>
        <description><![CDATA[vet: Спасибо за помощь, значит, я в правильном направлении думал (WM_CONTEXTMENU). Работает, второй вариант ещё не пробовал. Ещё вопрос насчёт &#036;01E2 - что это, в Messages такого нет?]]></description>
        <author>vet</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=608481</guid>
        <pubDate>Fri, 11 Feb 2005 06:21:16 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=608481</link>
        <description><![CDATA[Krid: Она самая  :)<br>Это окно можно еще WinEventHook&#39;ом достать, но это еще бОльшая ж. :)]]></description>
        <author>Krid</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=608456</guid>
        <pubDate>Fri, 11 Feb 2005 05:51:12 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=608456</link>
        <description><![CDATA[Song: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=82712&view=findpost&p=608299'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Krid &#064; <time class="tag-quote__quoted-time" datetime="2005-02-10T21:05:07+00:00">10.02.05, 21:05</time></span><div class='quote '>WM_ENTERIDLE: if (wParam=MSGF_MENU) and fb then<br>
               begin SendMessage(lParam, MN_SELECTITEM, 0, 0); fb:=false end;</div></div><br>
во-во, это как раз та ж, о которой я так недавно говорил  :lol:]]></description>
        <author>Song</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=608299</guid>
        <pubDate>Thu, 10 Feb 2005 21:05:07 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=608299</link>
        <description><![CDATA[Krid: :yes: <br>
Я и сам потом понял, что поспешил с выводами. Все-таки не надо забывать про подпись <strong class='tag-b'>Song</strong>&#39;а  :) <br>
Вот еще вариант<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Edit1: TEdit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;fb:boolean=true;</div><div class="code_line">&nbsp;</div><div class="code_line">function NewEditProc(wnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):integer; stdcall;</div><div class="code_line">const</div><div class="code_line">&nbsp;MN_SELECTITEM = E5;</div><div class="code_line">begin</div><div class="code_line">&nbsp;case uMsg of</div><div class="code_line">&nbsp;WM_ENTERIDLE: if (wParam=MSGF_MENU) and fb then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin SendMessage(lParam, MN_SELECTITEM, 0, 0); fb:=false end;</div><div class="code_line">&nbsp;WM_MENUSELECT:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (lParam=0) and (HIWORD(DWORD(wParam))=word(-1)) then fb:=true else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if fb then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // извращаемся над меню &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; EnableMenuItem(lParam, GetMenuItemID(lParam, 2), MF_DISABLED or MF_GRAYED);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; DeleteMenu(lParam,1,MF_BYPOSITION);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; DeleteMenu(lParam,5,MF_BYPOSITION);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;&nbsp; result:=CallWindowProc(Pointer(GetWindowLong(wnd,GWL_USERDATA)),wnd,uMsg,wParam,lParam)</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;SetWindowLong(Edit1.Handle,GWL_USERDATA,SetWindowLong(Edit1.Handle, GWL_WNDPROC, LPARAM(@NewEditProc)))</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Krid</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=607360</guid>
        <pubDate>Thu, 10 Feb 2005 07:51:51 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=607360</link>
        <description><![CDATA[Rouse_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=82712&view=findpost&p=607221'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Krid &#064; <time class="tag-quote__quoted-time" datetime="2005-02-10T03:01:50+00:00">10.02.05, 03:01</time></span><div class='quote '>vet, HMENU родного меню EDIT&#39;а, имхо ты никак не получишь.</div></div><br>
Да ну брось ты, нет ничего не возможного :)<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, Menus;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Edit1: TEdit;</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;HookHandle: DWORD = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">function MsgProc(Code: Integer; WParam: Integer; LParam: PCWPStruct): Integer; stdcall;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Menu: HMENU;</div><div class="code_line">&nbsp;&nbsp;ItemCount, I: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if (Code = HC_ACTION) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;case LPARAM.message of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WM_MENUSELECT:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Menu := LParam^.lParam; // Вот он хэндл меню</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ItemCount := GetMenuItemCount(Menu);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for I := 0 to ItemCount - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EnableMenuItem(Menu, GetMenuItemID(Menu, I), MF_DISABLED or MF_GRAYED);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;UnhookWindowsHookEx(HookHandle);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;HookHandle := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;E2: // это типа заставляем реагировать на WM_MENUSELECT до появления окна... </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;SendMessage(LPARAM.HWND, E5, 0, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;MsgProc := CallNextHookEx(HookHandle, Code, WPARAM, DWORD(LPARAM));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.WMContextMenu(var Message: TWMContextMenu);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if HookHandle &#60;&#62; 0 then UnhookWindowsHookEx(HookHandle);</div><div class="code_line">&nbsp;&nbsp;HookHandle := SetWindowsHookEx(WH_CALLWNDPROC, @MsgProc, 0, GetCurrentThreadId);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=607221</guid>
        <pubDate>Thu, 10 Feb 2005 03:01:50 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=607221</link>
        <description><![CDATA[Krid: <strong class='tag-b'>vet</strong>, HMENU родного меню EDIT&#39;а, имхо ты никак не получишь. Можешь просто задать свое PopupMenu для TEdit&#39;а<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Edit1.PopupMenu:=PopupMenu1;</div></ol></div></div></div></div><br>
и делать с ним все, что душа пожелает.]]></description>
        <author>Krid</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=606857</guid>
        <pubDate>Wed, 09 Feb 2005 16:55:53 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=606857</link>
        <description><![CDATA[vet: Эта функция получает хэндл меню и разрешает/запрещает его пункты. Как мне получить HMENU, если это не моё меню, т. е. в программе я его не создаю?]]></description>
        <author>vet</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=606335</guid>
        <pubDate>Wed, 09 Feb 2005 11:03:13 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=606335</link>
        <description><![CDATA[Song: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>The EnableMenuItem function enables, disables, or grays the specified menu item. <br>
<br>
BOOL EnableMenuItem(<br>
<br>
    HMENU hMenu,	// handle to menu<br>
    UINT uIDEnableItem,	// menu item to enable, disable, or gray<br>
    UINT uEnable	// menu item flags<br>
   );	<br>
 </div></div>]]></description>
        <author>Song</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=605867</guid>
        <pubDate>Tue, 08 Feb 2005 22:25:50 +0000</pubDate>
        <title>Как воздействовать на контекстное меню?</title>
        <link>https://forum.sources.ru/index.php?showtopic=82712&amp;view=findpost&amp;p=605867</link>
        <description><![CDATA[vet: Здравствуйте. У меня такой вопрос - как &quot;воздействовать&quot; на стандартное меню, которое появляется при нажатии правой кнопки мыши в поле для ввода текста (&quot;отменить&quot;,&quot;вырезать&quot;,&quot;копировать&quot; и т.д.), например, в TEdit, TF1Book. В смысле, запретить/разрешить 1 из пуктов. По идее, надо ловить какое-то сообщение, но не знаю, какое. Думал - WM_CONTEXTMENU, WM_INITMENUPOPUP, нет, не то]]></description>
        <author>vet</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      </channel>
      </rss>
	