Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Активизация окон с помощью SetForegroundWindow, Активизация окон с помощью SetForeground 
:(
    Опции темы
IvanVL
  Дата 7.11.2005, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 31.10.2005

Репутация: нет
Всего: нет



По определенному событию (которое упешно отрабатывает) хочу вывести свое окно на передний план функциями: ShowWindow(H,SW_SHOWNORMAL), SetForegroundWindow(H), вместо появления, окно начинает мигать, но не вылазеет вперед, может какие то системные настройки надо покрутить smile Помогите разобраться. smile
PM MAIL ICQ   Вверх
Rrader
Дата 7.11.2005, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



SetForegroundWindow должна прекрасно работать. Есть подозрение, что это событие, о котором шла речь, вызывается много раз, вот окно и мигает smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Snowy
Дата 7.11.2005, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Нет, Просто в XP по дефолту включена настройка "Запрещать программам похищать фокус".
Поэтому вместо фокуса она начинает мигать.
PM MAIL   Вверх
IvanVL
Дата 7.11.2005, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 31.10.2005

Репутация: нет
Всего: нет



Цитата(Snowy @ 7.11.2005, 09:20)
Нет, Просто в XP по дефолту включена настройка "Запрещать программам похищать фокус".
Поэтому вместо фокуса она начинает мигать.

А где эта настройка находиться ? По подробней опишите, а то я такую даже ну помню, не то знаю где её поменять.
Добавлено @ 09:29
Цитата(Rrader @ 7.11.2005, 09:00)
SetForegroundWindow должна прекрасно работать. Есть подозрение, что это событие, о котором шла речь, вызывается много раз, вот окно и мигает smile

Это я тоже проверю, но позже (возможно оно и так).

Это сообщение отредактировал(а) IvanVL - 7.11.2005, 09:27
PM MAIL ICQ   Вверх
Snowy
Дата 7.11.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(IvanVL @ 7.11.2005, 09:26)
А где эта настройка находиться

HKEY_CURRENT_USER\Control Panel\Desktop
Параметры:
ForegroundFlashCount - сколько раз мигать (по дефолту 3)
ForegroundLockTimeout - если поставить в 0, то будет сразу вылазить, без миганий.

Но лучше воспользоваться стилем окна "StayOnTop"
Так корректней, чем менять настройки системы.
PM MAIL   Вверх
Демо
Дата 7.11.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



К сожалению, решение этой проблемы не найдено до сих пор, поэтому есть один трюк, который позволит решить вопрос:
Пример одной реализации:

Код
 
procedure NotifyUser;
const
  PROGRAM_ALREADY_RUN = 'Программа уже запущена';
begin
  //В Windows 2000 и выше Microsoft изменила поведение SetForegroundWindow.
  //Вызов MessageBox это в общем-то трюк, используемый для того,
  //чтобы гарантированно вывести главное окно на передний план
  MessageBox(0,PROGRAM_ALREADY_RUN,PChar(ParamStr(0)), MB_ICONSTOP or MB_OK
    or MB_SYSTEMMODAL);
  SetForegroundWindow(Application.Handle);
  if assigned(Application.MainForm) then
    ShowWindow(Application.MainForm.Handle, SW_SHOW);
end;
(c) Author: c2005 Vladimir G. Yudin aka y-soft



Добавлю, что MessageBox можно тут же по тайм-ауту закрывать, дабы не заставлять пользователя нажимать кнопки.

Это сообщение отредактировал(а) Демо - 7.11.2005, 10:03


--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 7.11.2005, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Можно еще поменять стиль окна на fsStayOnTop, а потом обратно.
Тоже работает. И без всяких боксов.
PM MAIL   Вверх
Демо
Дата 7.11.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



Цитата(Snowy @ 7.11.2005, 11:14)
Можно еще поменять стиль окна на fsStayOnTop, а потом обратно.
Тоже работает. И без всяких боксов.


Хорошая мысль. Надо проверить.
А фокус ввода при этом окно получит?
И еще надо восстановить точно предыдущий стиль.


--------------------
    
PM MAIL ICQ Skype   Вверх
IvanVL
Дата 7.11.2005, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 31.10.2005

Репутация: нет
Всего: нет



Спасибо за помощь
PM MAIL ICQ   Вверх
Girder
Дата 7.11.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155





--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0926 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.