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

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

SetForegroundWindow срабатывает только один раз. [D6, Win2k]


Ascan_ ©   (2002-12-10 13:36:00) 

Почему так?
Если я в программе использовал уже функцию SetForegroundWindow, то при втором использовании окно активным не становится, а только его имя внизу помигает(не помню как это "внизу" называется).
Как быть?
Вот пример кода, который не работает:
...
private
ActiveWindow,
MyWindow: hWnd;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
ActiveWindow:= GetForegroundWindow;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
MyWindow:= GetForegroundWindow;
SetForegroundWindow(ActiveWindow);
SetForegroundWindow(MyWindow); // Вот эта строчка не сработает
end;
...


Да, эта строчка не сработает. Мое окно помигает "внизу" и все.
И так не работает:
SetForegroundWindow(ActiveWindow);
sleep(200);
SetForegroundWindow(MyWindow);


И так:
SetForegroundWindow(ActiveWindow);
Application.ProcessMessage;
SetForegroundWindow(MyWindow);


И далее по коду в любом месте эта функция не срабатывает.


Ascan_   (2002-12-10 15:37:00) [1]

Игорь Шевченко, ненавижу этот сайт... но придется слазить, спасибо.


Игорь Шевченко   (2002-12-10 15:11:00) [2]

http://msdn.microsoft.com- SetForegroundwindow, AllowSetForegroundWindow


Ascan_   (2002-12-10 14:18:00) [3]

Не нашел, я уже искал и сейчас еще раз.
Сможешь дать ссылку, где об этом можно почитать?


Song   (2002-12-10 13:52:00) [4]

От w2k у SetForeGroundWindow() такое поведение. Это специально сделано.
Вот представьте сидите Вы в ворде. Чего-то пишите, не смотря на экран, смотрите на клаву, вдруг какой-то **** (я не про Вас) выводит на верх своё окно! И что? А то, что все нажатия пошли на то окно, а не на ваш ворд, поэтому такая феня и была сделана. Поэтому надо перед передачей фокуса приатачить процесс того окна к своему и потом использовать SetForeGroundWindow() или использовать SPI_ANIMATED в ф-ии SystemParametersInfo() и SetForeGroundWindow(). В базе данных готовых решений есть готовый SetForeGroundWindow, который работает так как надо.


Ascan_   (2002-12-10 13:45:00) [5]

Да. Именно он.
А права Админа. (это так, на всякий случай)
И все окна развернуты (неминимизированны).


Song   (2002-12-10 13:43:00) [6]

У Вас наверно w2k?


Наверх

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