Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Развернуть чужое окно [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 не выставляется(при показывании дочернего окна минуя главное), поэтому свернуть больше не получается.


Наверх

Титульная страница Поиск, карта сайта Написать письмо