![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Развернуть чужое окно [D7, WinXP]
*Pavel © (2005-11-29 11:21:00)Пользуюсь следующим:
ShowWindow(hwnd, SW_SHOW);
SetForegroundWindow(hwnd);
Если окно не свернуто в панель задач - работает сколько угодно раз (как и положено перемещается на передний план). Но стоит свернуть - развернет его единажды, затем его можно только закрыть, свернуть никак не получается. Зависит ли это от ОС ? Если да, то как сделать универсальное приложение т.е. работоспособное от W98 до XP ?
psa247 (2005-12-03 10:55:00) [1]Скажите, что происходит с приложением при клике на "свернуть все окна" ?
Leonid Troyanovsky (2005-11-30 09:47:00) [2]
> *Pavel © (29.11.05 16:34) [5]
> Все заработало, только не с GWL_OWNER, а GWL_HWNDPARENT.
Млин, конечно, имел ввиду именно GWL_HWNDPARENT,
бо первого в природе не существует.
Sorry.
--
Regards, LVT.
*Pavel (2005-11-29 16:34:00) [3]Все заработало, только не с GWL_OWNER, а GWL_HWNDPARENT.
Thank's
Leonid Troyanovsky (2005-11-29 15:10:00) [4]
> *Pavel © (29.11.05 12:08) [2]
> Пробовал так:
> hwnd := FindWindow('TfrmMain', 'My programm name');
..
> _hwnd:= GetParent(hwnd);
Application для Form выступает несколько в другом отношении,
т.е., AppWnd := GetWindowLong(hwnd, GWL_OWNER)
См. также:
http://groups.google.com/group/fido7.su.win32.prog/msg/1984ffcf8ae2b539
--
Regards, LVT.
ANB (2005-11-29 14:54:00) [5]
> *Pavel © (29.11.05 12:08) [2]
Все обычные (не MDI) формы твоего приложения с точки зрения виндовс являются окнами верхнего уровня. Следовательно у них нету парента.
Окно Application всегда невидимо. Если приложений запущено несколько, то оптимальный способ различать их по ProcessID (PID).
ЗЫ.Поднятие окна на передний план постоянно блокируется от версии к версии. SetForegroundWindow далеко не всегда помогает в NT.
*Pavel (2005-11-29 12:08:00) [6]Пробовал так:
hwnd := FindWindow('TfrmMain', 'My programm name');
//debug window - hwnd = 8601822
_hwnd:= GetParent(hwnd);
//debug window - _hwnd = 0
Выходит, что главнее окна, чем это просто нет.
han_malign (2005-11-29 11:33:00) [7]попробуй докопаться до "главного" окна(для Delphi приложений - это Application):
var _wnd, wnd: HWND;
begin
wnd:= hwnd;
_wnd:= GetParent(wnd);
while(_wnd <> 0)do begin
wnd:= _wnd;
_wnd:= GetParent( wnd);
end;
ShowWindow( wnd, SW_SHOW);
SetForegroundWindow(hwnd);
...
- у него флаг Visible не выставляется(при показывании дочернего окна минуя главное), поэтому свернуть больше не получается.