Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вот баян: обработчик FormShow срабатывает не там !!!


Fanny ©   (2005-09-08 22:14:00) 

есть свои обработчики Form.Show и Form.Hide, есть иконка в трее с меню
так вот, когда меню вываливается по клику на иконке, срабатывает обработчик Form.Show
а когда пропадает (клик на пункте в меню или просто где угодно - меню исчезает), срабатывает Form.Hide

я не понял, так и должно быть ???  Как избавиться ???


Kozz   (2005-09-16 13:04:00) [1]

извиняюсь за оффтопик, но накипело -
проклятый мастдай!!!!!!!!!!
всё надо какие-нить сальто-мортале вытворять, чтобы чо-то нормальное получилось!!!


Vladimir Kladov   (2005-09-14 19:47:00) [2]

давно уже сделано. комментарии см.:
   function PopupEx( X, Y: Integer ): Integer; {!ecm}
   {* This version of popup command is very useful, when popup menu is activated
      when its parent window is not visible (e.g., for a kind of applications,
      which always are invisible, and can be activated only using tray icon).
      PopupEx method provides correct tracking of menu disappearing when mouse
      is clicked anywhere else on screen, fixing strange menu behavior in some
      Windows versions (NT).
      |<br>
      Actually, when PopupEx used, parent form is shown but below of visible
      screen, and when menu is disappearing, previous state of the form (visibility
      and position) are restored. If such solvation is not satisfying You,
      You can do something else (e.g., use region clipping, etc.) }


Kozz   (2005-09-14 18:25:00) [3]

2Kladov

мож стоит задокументировать?


Fanny   (2005-09-13 16:32:00) [4]

Ё-моё !!!!!!!!!!!!!!
Так оно и есть !!!!!!!!!!!!!!!

Я в принципе вначале делал и просто через Popup, только там дополнительные "фичи" пришлось поставить (проверял только в Win98 - всё работает), а потом нашёл совет, что PopupEx "сделан специально для устранения этого глюка" и переключился на него.

2Vladimir Kladov
Спасибо за разъяснение !


Vladimir Kladov   (2005-09-12 19:31:00) [5]

если PopupMenu показывается через PopupEx, так и должно быть: форма показывается, но за пределами экрана. Это борьба с глюками виндовс.


VIP80   (2005-09-12 12:48:00) [6]

Для примера функция обрабатывающая клик по иконке в трее. Вываливается меню, форма не появляется. В программе одна форма и в процедуре FormCreate прописано:
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);

Обработка клика по иконке в трее:
procedure TfrmMain.WMICON(var msg: TMessage);
var P : TPoint;
begin
case msg.LParam of
WM_LBUTTONDOWN:
 begin
 // Бла-бла-бла
 
 end;
WM_RBUTTONDOWN:
 begin
  GetCursorPos(p);
  SetForegroundWindow(Application.MainForm.Handle);
  mnuPopup.Popup(P.X, P.Y);
 end;
end;
end;

Показываем форму (по клику соответствующего пункта меню)

Обработка клика:
procedure TfrmMain.mnubtnSettingsClick(Sender: TObject);
begin
if Application.ShowMainForm =True then exit;
ShowAll;
end;

procedure TfrmMain.ShowAll;
var
i,j:Integer;
begin
Application.ShowMainForm:=True;
ShowWindow(Application.Handle, SW_SHOW);
ShowWindow(Application.MainForm.Handle, SW_SHOW);
for I := 0 to Application.MainForm.ComponentCount -1 do
     if Application.MainForm.Components[I] is TWinControl then
       with Application.MainForm.Components[I] as TWinControl do
         if Visible then
         begin
           ShowWindow(Handle, SW_SHOWDEFAULT);
           for J := 0 to ComponentCount -1 do
             if Components[J] is TWinControl then
             ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
 end;
end;


Kozz   (2005-09-12 12:24:00) [7]

хых, а ведь действительно!
может где-то в свойствах цепляется


Наверх

Титульная страница Поиск, карта сайта Написать письмо