Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2008, 19:06   #1
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию Контекстное меню окон

у меня в программе идет перебор и отображение всх видимых окон.. их хендлы вносяться в массив
Wnd:array of HWND;
мне нада по какому либо событию получить контекстное меню окна (которое открывается нажатием на пиктограму окна..)
пробовал так:
WndMenu:TPopupMenu;
Код:
  WndMenu.Items.Clear;
  WndMenu.Tag:=Wnd[i];
  hMenuHandle:=0;
  if (SendMessageTimeOut(Wnd[i], WM_USER, 0,0, SMTO_NORMAL,100,dw)<>0)
   then hMenuHandle:=GetSystemMenu(Wnd[i], FALSE); // Получим идентификатор
  if (hMenuHandle > 0)
   then begin
    j:=GetMenuItemCount(hMenuHandle);       // Определяем количество пунктов меню.
    for i:=0 to j-1 do
     begin
      mi:=TMenuItem.Create(self);
      GetMenuString(hMenuHandle,i,byff,255,MF_BYPOSITION); // Считываем название
      l:=GetMenuState(hMenuHandle,i,MF_BYPOSITION);         // Считываем состояние пункта меню
      if (l and mf_Separator=mf_Separator)
       then mi.Caption:='-'  // Если это разделитель
       else mi.Caption:=string(byff);
      mi.OnClick:=WndPopupClick;
      if not (l and mf_Grayed<>mf_Grayed)
       then mi.Enabled:=False;  // Если пункт меню не активен
      WndMenu.Items.Add(mi);
     end;
   end;
копирует все пункты нормально.. но не получается отправить окну сообщение.. выбороа какого либо пункта меню..
пункты меню не граничаться стандартными (Востановить, свернуть, закрыть, развернуть, переместить, размер), но бывают и некоторые иные (новая мода пошла шоли..) от как мне симитировать выбор какого либо пункта меню??

видел функцию TrackPopupMenu и TrackPopupMenuEx у них смысл один..
Описание:
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еделяющая область мыши, где меню остается видимым, если пользователь отпускает кнопку мыши.

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

если в параметре Wnd этой функцые передать нужное окно - то ничего не происходит.. если передать окно моей программы - то появлеятся нужное меню, но оно все так же не реагирует на выбор какого либо пункта..

кто может, посоветуйте чтото дельное..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось Ntlegend; 06.10.2008 в 19:08.
Ntlegend вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сворачивание окон zzzzz Общие вопросы Delphi 4 20.10.2008 09:16
Эффекты окон BOBAH13 Мультимедиа в Delphi 1 03.10.2008 08:49
Встраивание в контекстное меню проводника Никки Общие вопросы Delphi 3 25.06.2008 23:17
Контекстное меню файла... Altera Общие вопросы Delphi 3 29.02.2008 16:57
Как добавить подменю в системное контекстное меню Lucky13 Win Api 5 19.03.2007 20:17