![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Некорректная работа ShowWindow [D2, D3, D4, D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
BFG9k © (2005-11-23 13:54:00)Работаю с треем. При сворачивании главной формы делаю следующее :
ShowWindow(Application.Handle,SW_HIDE);
ShowWindow(Application.MainForm.Handle,SW_HIDE);
При двойном клике на значке трея :
ShowWindow(Application.MainForm.Handle,SW_RESTORE);
ShowWindow(Application.Handle,SW_RESTORE);
Появляются окна, которые перед этим закрывались, их свойство Visible=false. Причем на действия пользователя они не реагируют. В чем дело ?
BFG9k (2005-11-23 15:42:00) [1]Такой строки вообще не должно быть - она бессмысленна (и так все работает)
Application.ShowMainForm := False/True;
Вообще нужно быть осторожным с ShowWindow и вызывать только для Application , для всех форм же пользовать Show и Hide для корректной работы со свойством Visible.
Попов Виталий (2005-11-23 15:01:00) [2]to BFG9k
Это фрагмент реальной программы в качестве примера, дальше я думаю можно доработать.
BFG9k (2005-11-23 14:40:00) [3]2 Попов Виталий:
Почему только 2 уровня вложенности компонентов ? ;-) С одной формой все заработает ...
Попов Виталий (2005-11-23 14:10:00) [4]Вот пример, все работает. Форма одна.
Сворачивание:
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
Отображение:
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;
han_malign (2005-11-23 14:06:00) [5]SW_SHOW
ShiFT (2005-11-23 14:00:00) [6]
> ShowWindow(Application.MainForm.Handle,SW_RESTORE);
> ShowWindow(Application.Handle,SW_RESTORE);
попробуй SW_NORMAL