Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

Вот баян: обработчик FormShow срабатывает не там !!!   Найти похожие ветки 

 
Fanny   (2005-09-08 22:14) [0]

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

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


 
Kozz   (2005-09-12 12:24) [1]

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


 
VIP80   (2005-09-12 12:48) [2]

Для примера функция обрабатывающая клик по иконке в трее. Вываливается меню, форма не появляется. В программе одна форма и в процедуре 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;


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

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


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

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

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

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


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

2Kladov

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


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

давно уже сделано. комментарии см.:
   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-16 13:04) [7]

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



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
15-1146029761
ArtemESC
2006-04-26 09:36
2006.05.21
per se


2-1146659381
Wood
2006-05-03 16:29
2006.05.21
Info для приложения.


4-1140673293
delphi-oracle
2006-02-23 08:41
2006.05.21
Как получить строку SendMessage


2-1146810975
Близнец
2006-05-05 10:36
2006.05.21
Использование в запросе таблиц двух разных БД


15-1145988181
Fenik
2006-04-25 22:03
2006.05.21
Хочу найти песню, хотя бы название и автора.