imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 13.09.2006, 14:29     # 1
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Question Проблема с передачей фокуса окну

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

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

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

Что делать?

Кодю в Borland C++ Builder 6
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  
Старый 13.09.2006, 15:17     # 2
yan_kos
Junior Member
 
Аватар для yan_kos
 
Регистрация: 16.07.2005
Адрес: Украина, г. Ровно
Пол: Male
Сообщения: 140

yan_kos Известность не заставит себя ждать
Есть ф-я в ВиньАПИ SetWindowPos там есть параметер HWND hWndInsertAfter второй по счету(нач. с 1) ставиш - HWND_TOPMOST и все.
__________________
Та программа не глючит, которая не написана
yan_kos вне форума  
Старый 13.09.2006, 15:45     # 3
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Пасиб, будем пробовать.
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  
Старый 14.09.2006, 09:16     # 4
MrSerg
Guest
 
Сообщения: n/a

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

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

Что делать?
SetForegroundWindow(form1.Handle);// Delphi синтаксис.
 
Старый 14.09.2006, 11:30     # 5
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Так, обо всем по порядку.

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

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

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

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

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

P.S. Заголовочный файл winuser.h подключен.
__________________
Vita brevis est, ars longa...

Последний раз редактировалось Mephi$topheL; 14.09.2006 в 11:36.
Mephi$topheL вне форума  
Старый 14.09.2006, 12:24     # 6
MrSerg
Guest
 
Сообщения: n/a

Цитата:
Сообщение от Mephi$topheL
SetForegroundWindow(...) - тоже не пашет
А из какого состояния, ( minimize , hide) не хочет появляется окно?

SetForegroundWindow(Hwnd) выводит (видимое ,не свернутое) окно на передний план, и делает его активным.
 
Старый 14.09.2006, 12:42     # 7
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Окно банально скрыто под другими окнами - то бишь Application->Active = false;
Не свернуто!
Для этого выполняется проверка WindowState = wsMinimized.
Если окно свернуто - Application->Restore() - кривовато конечно, но эта хрень вроде работает по крайней мере.
Все способы, основанные на WinAPI - принципиально отказываются...
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  
Старый 14.09.2006, 13:13     # 8
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
А если попробовать события формы. На пример, Click() ?
EvroStandart вне форума  
Старый 14.09.2006, 13:27     # 9
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

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

Вот так всегда, самую сложную часть проги написали за день, а с вроде бы фигней трахаемся уже неделю...
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  
Старый 14.09.2006, 17:26     # 10
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Цитата:
Mephi$topheL:
Непонятно, какого хрена апишные функции работать не хотят.
Может они работают только несколько вместе. У товарища Касперски в книжке был рассмотрен такой случай. При нажатии кнопки срабатывают две или даже три апишные функции подряд. Соответственно их и из кода также вызывать нужно. А по одной из кода - результата никакого.
EvroStandart вне форума  
Старый 14.09.2006, 17:33     # 11
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Будем пробовать. Другой альтернативы нет. Спасибо.
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  
Старый 15.09.2006, 01:41     # 12
AndNot
Guest
 
Сообщения: n/a

Цитата:
Mephi$topheL:
SetForegroundWindow(...) - тоже не пашет
Странно, у меня в скрин-сейвере нареканий не было. Может с хендлом проблемы? Попробуй получить его через GetModuleHandle(0).
 
Старый 15.09.2006, 21:43     # 13
Nerey_ser
Junior Member
 
Аватар для Nerey_ser
 
Регистрация: 30.03.2006
Адрес: Беларусь
Сообщения: 79

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


Если так, то я выхожу слд. образом: Form1.Show. Это не правильно, но работает. Если не срабатывает, можно сделать раз десять
__________________
Дай человеку рыбу - он будет сыт один день. Научи человека рыбачить - он будет сыт всю жизнь.
Nerey_ser вне форума  
Старый 16.09.2006, 14:01     # 14
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Ага, после вызова SetForegroundWindow() действительно моргает кнопка на панели задач. Попробую твой способ, авось поможет...
Альтернатив не так уж много осталось.
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  
Старый 18.09.2006, 11:00     # 15
Flexz
Newbie
 
Регистрация: 17.06.2002
Сообщения: 30

Flexz Путь к славе только начался
Как переместить окно на передний план?
Flexz вне форума  
Старый 18.09.2006, 11:31     # 16
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Пасиб, испробуем.
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  
Старый 19.09.2006, 15:38     # 17
Mephi$topheL
Newbie
 
Регистрация: 10.07.2004
Адрес: los Engeles
Сообщения: 14

Mephi$topheL Нуль без палочки
Цитата:
Flexz:
Как переместить окно на передний план?
Огромное спасибо, описанный там способ №3 работает!
__________________
Vita brevis est, ars longa...
Mephi$topheL вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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