Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

Вот баян: обработчик 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 вся ветка

Форум: "KOL";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
15-1145917789
Гость, однако!
2006-04-25 02:29
2006.05.21
Логотип


3-1143804426
Almikus
2006-03-31 15:27
2006.05.21
Присвоение данных полям


9-1130332463
Кефир87
2005-10-26 17:14
2006.05.21
TDXSound без VCL


6-1137995913
__DATA__
2006-01-23 08:58
2006.05.21
Как изменить предпочитаемый DNS сервер


3-1143344801
DevilDevil
2006-03-26 07:46
2006.05.21
Вопрос элементарный: как использовать псевдоним





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский