Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Popup-menu в Tray'e, Как скрыть при потере оным фокуса 
:(
    Опции темы
Истец
  Дата 3.2.2005, 17:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот такой вот вопросик...
  Вверх
Он же
Дата 3.2.2005, 17:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Фак ваш у меня не грузится ("Iexplorer выполнила недопустимую ошибку и будет закрыта"). Поентому, плиз, ответьте, кто можетЪ!
  Вверх
Тьма
Дата 3.2.2005, 18:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 22.1.2005
Где: Украина, Винница

Репутация: нет
Всего: 4



Цитата

Иногда, при потере фокуса, всплывающее меню в System Tray при потере фокуса не закрывается. Поэтому, при обработке сообщений для всплывающего меню необходимо поместить окно на передний план и послать ему сообщение WM_NULL.

procedure TForm1.WndProc(var Msg : TMessage);
var
  p : TPoint;
begin
  case Msg.Msg of
    WM_USER + 1:
    case Msg.lParam of
      WM_RBUTTONDOWN: begin
         SetForegroundWindow(Handle);
         GetCursorPos(p);
         PopupMenu1.Popup(p.x, p.y);
         PostMessage(Handle, WM_NULL, 0, 0);
      end;
    end;
  end;
  inherited;
end;

Взято с Исходников.ru http://www.sources.ru


если хочеш - напиши мыло мне в аську и я тебе отправлю FAQ
взято из FAQ

Это сообщение отредактировал(а) Тьма - 3.2.2005, 18:30


--------------------
Vir magni ingenii                 
PM MAIL ICQ   Вверх
_hunter
Дата 3.2.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



терпеливее быть нужно smile

Код
SetForegroundWindow(hWnd);
TrackPopupMenu(...);
PostMessage(hWnd, WM_NULL, 0, 0);



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Guest
Дата 3.2.2005, 20:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Моё главное окно невидимо. Пытаюсь сделать следующим образом:
Код

...
wnd:hwnd;
...
wnd:=getforegroundwindow;
popupmenu1.popup(x,y);
postmessage(wnd,WM_NULL, 0, 0);
...

или
Код

...
postmessage(GetForegroundWindow,WM_NULL, 0, 0);
popupmenu1.popup(x,y);
...

П О Ф И Г!
А жо такое
Цитата(_hunter @ 3.2.2005, 18:30)
TrackPopupMenu(...);
? Ща попробую...
  Вверх
_hunter
Дата 3.2.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



а зачем окно искать?

если это твое окно -- при создании запиши куда-нить хендл.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Guest
Дата 3.2.2005, 20:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Тогда смысл вот этой строчки:
Цитата
        SetForegroundWindow(Handle);
?

  Вверх
Guest
Дата 3.2.2005, 20:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











WM_NULL должен посылаться активному окну, или окну-родителю?
  Вверх
Guest
Дата 3.2.2005, 20:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











и вообще, нафиг этот WM_NULL нужен?
  Вверх
~FoX~
Дата 3.2.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



Ответ Song-а

Код

Procedure TForm1.Ic(n:Integer;Icon:TIcon);
Var Nim:TNotifyIconData;
begin
With Nim do
Begin
cbSize:=SizeOf(Nim);
Wnd:=Form1.Handle;
uID:=1;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
hicon:=Icon.Handle;
uCallbackMessage:=wm_user+1;
szTip:='ыыыы';
End;
Case n OF
1: Shell_NotifyIcon(Nim_Add,@Nim);
2: Shell_NotifyIcon(Nim_Delete,@Nim);
3: Shell_NotifyIcon(Nim_Modify,@Nim);
End;
end;


protected
Procedure ControlWindow(Var Msg:TMessage);
message WM_SYSCOMMAND;
...
Procedure TForm1.ControlWindow(Var Msg:TMessage);
Begin
IF Msg.WParam=SC_MINIMIZE then
Begin
Ic(1,Application.Icon);
ShowWindow(Handle,SW_HIDE);
End
else
inherited;
End;

protected
Procedure ControlWindow(Var Msg:TMessage)
; message WM_SYSCOMMAND;
Procedure IconMouse(var Msg : TMessage)
; message WM_USER+1;



procedure TForm1.IconMouse(var Msg:TMessage);
Var p:tpoint;
begin
GetCursorPos(p);
Case Msg.LParam OF
WM_LBUTTONUP,WM_LBUTTONDBLCLK:

Begin
Ic(3,Applicattion.Icon);
ShowWindow(Application.Handle,SW_SHOWNORMAL);
End;
WM_RBUTTONUP:
Begin
SetForegroundWindow(Handle);
PopupMenu1.Popup(p.X,p.Y);
PostMessage(Handle,WM_NULL,0,0)
end;
End;
end;




поиском пользоваться надо


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Guest
Дата 3.2.2005, 20:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Блин, Fox!..

Цитата
SetForegroundWindow(Handle);
PopupMenu1.Popup(p.X,p.Y);
PostMessage(Handle,WM_NULL,0,0)

Соё окно не должно быть видимо! Вопрос: Handle - дескриптор активного окна или окна-родителя? Если активного окна, то Handle может быть произвольным. Если родитель, то нафиг там SetForegroundWindow? Если это так у Song'a в его прогре задумано, то зачем тоже самое в KB совать, где всё должно быть в общем случае? Жду ответа...
  Вверх
Guest
Дата 3.2.2005, 20:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











_hunter, какая разница между тем, что ты написал, и тем, что написал тот же Тьма?
  Вверх
Guest
Дата 3.2.2005, 20:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Кстати, в обоих случаях у меня ничё не работает. Но ведь все приложения, затрагивающие Tray, с которыми мне приходилось когда либо работать, не показывают своё главное окно, когда popup'ится их меню. Скажу больше, ни одной, подобной программе Song'а, я не видел. Кто-нить мне ответит, или мне прозябать в неведении?.. Пжалуста...
  Вверх
_hunter
Дата 3.2.2005, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



разницы -- никакой ( просто когда я отвечал его ответа не было )

SetForegroundWindow() используется для преодоления фичи от МС

окна-родителя чего?
( вполне хватит основного окна )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Poseidon
Дата 8.2.2005, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



РЕБЯТА! Все гораздо проще.
Для устранения данного бага в обработчике события OnPopup нашего меню впишите нижеследующее:

Код

SetForegroundWindow(Form1.Handle);


Этим мы указываем, что активным является главная форма нашего приложения (даже если она невидима). И, при переключении между приложения оно теряет свою активность, и, соответственно, всплывающее меню исчезает из виду, т.к. оно является дочерним объектом, по отношению к форме.

Все просто как 2х2. smile



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1113 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.