Форум: "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.13 c