IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Проблема с передачей фокуса окну (https://www.imho.ws/showthread.php?t=108288)

Mephi$topheL 13.09.2006 14:29

Проблема с передачей фокуса окну
 
Существует необходимость вывести окно на передний план при возникновении определенного события.

Метод SetFocus() не канает- когда окно под другими окнами, на передний план не выскакивает.

FormStyle = fsStayOnTop тоже не подходит - окно выводится на передний план, но закрепляется поверх всех окон, что крайне нежелательно.

Что делать?

Кодю в Borland C++ Builder 6

yan_kos 13.09.2006 15:17

Есть ф-я в ВиньАПИ SetWindowPos там есть параметер HWND hWndInsertAfter второй по счету(нач. с 1) ставиш - HWND_TOPMOST и все.

Mephi$topheL 13.09.2006 15:45

Пасиб, будем пробовать.

MrSerg 14.09.2006 09:16

Цитата:

Сообщение от Mephi$topheL
Метод SetFocus() не канает- когда окно под другими окнами, на передний план не выскакивает.

FormStyle = fsStayOnTop тоже не подходит - окно выводится на передний план, но закрепляется поверх всех окон, что крайне нежелательно.

Что делать?

SetForegroundWindow(form1.Handle);// Delphi синтаксис.

Mephi$topheL 14.09.2006 11:30

Так, обо всем по порядку.

Испробованы способы:

SetActiveWindow(MainForm->Handle) - не хочет
SetForegroundWindow(...) - тоже не пашет
SetWindowPos(...) - ни в какую

Но мы не сдаемся и пошли дальше:

SendMessage(MainForm->Handle, WM_ACTIVATE, 0, 0) - ноль эмоций

Какие еще способы остались? :idontnow:

P.S. Заголовочный файл winuser.h подключен.

MrSerg 14.09.2006 12:24

Цитата:

Сообщение от Mephi$topheL
SetForegroundWindow(...) - тоже не пашет

А из какого состояния, ( minimize , hide) не хочет появляется окно?

SetForegroundWindow(Hwnd) выводит (видимое ,не свернутое) окно на передний план, и делает его активным.

Mephi$topheL 14.09.2006 12:42

Окно банально скрыто под другими окнами - то бишь Application->Active = false;
Не свернуто!
Для этого выполняется проверка WindowState = wsMinimized.
Если окно свернуто - Application->Restore() - кривовато конечно, но эта хрень вроде работает по крайней мере.
Все способы, основанные на WinAPI - принципиально отказываются...

EvroStandart 14.09.2006 13:13

А если попробовать события формы. На пример, Click() ?

Mephi$topheL 14.09.2006 13:27

Можно конечно попробовать...
Но это ж через ж..у, простите.
Непонятно, какого хрена апишные функции работать не хотят.

Вот так всегда, самую сложную часть проги написали за день, а с вроде бы фигней трахаемся уже неделю...

EvroStandart 14.09.2006 17:26

Цитата:

Mephi$topheL:
Непонятно, какого хрена апишные функции работать не хотят.
Может они работают только несколько вместе. У товарища Касперски в книжке был рассмотрен такой случай. При нажатии кнопки срабатывают две или даже три апишные функции подряд. Соответственно их и из кода также вызывать нужно. А по одной из кода - результата никакого. ;)

Mephi$topheL 14.09.2006 17:33

Будем пробовать. Другой альтернативы нет. Спасибо.

AndNot 15.09.2006 01:41

Цитата:

Mephi$topheL:
SetForegroundWindow(...) - тоже не пашет
Странно, у меня в скрин-сейвере нареканий не было. Может с хендлом проблемы? Попробуй получить его через GetModuleHandle(0).

Nerey_ser 15.09.2006 21:43

У меня в VB похожая проблема. В винде это называется "программа ожидает ввода информации". В этот момент в строке пуска мигает кнопка. Так?

:biggrin:
Если так, то я выхожу слд. образом: Form1.Show. Это не правильно, но работает. Если не срабатывает, можно сделать раз десять :biggrin:

Mephi$topheL 16.09.2006 14:01

Ага, после вызова SetForegroundWindow() действительно моргает кнопка на панели задач. Попробую твой способ, авось поможет...
Альтернатив не так уж много осталось.

Flexz 18.09.2006 11:00

Как переместить окно на передний план?

Mephi$topheL 18.09.2006 11:31

Пасиб, испробуем.

Mephi$topheL 19.09.2006 15:38

Цитата:

Flexz:
Как переместить окно на передний план?
Огромное спасибо, описанный там способ №3 работает!


Часовой пояс GMT +4, время: 23:10.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.