174 / 64 / 13
Регистрация: 22.12.2015
Сообщений: 2,647
1

Как вывести главное окно приложения на передний план

23.12.2018, 12:01. Показов 6150. Ответов 5
Метки нет (Все метки)

Всем здравствуйте.

На форму помещён таймер. Если приложение свёрнуто на панель задач, то по истечению интервала таймера происходит развёртывание свёрнутого приложения. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    WindowState = wsMinimized;
    Timer1->Interval = 3000;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Application->Restore();
    Timer1->Enabled = false;
}
Если же приложение не свёрнуто на панель задач, а просто заслонено другими окнами, то вышеприведенный код не срабатывает.
Пробовал и так:
C++
1
2
3
4
5
6
7
8
9
10
11
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    Timer1->Interval = 3000;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Application->Restore();
    ShowWindow(Handle, SW_SHOW);
    SetForegroundWindow(Handle);
    Timer1->Enabled = false;
}
Всё равно на передний план несвёрнутое, а только заслонённое другими формами окно не выводится.
Попробуйте запустить последний вариант и тут же щёлкнуть по любому другому окну, заслонив запущенное приложение.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2018, 12:01
Ответы с готовыми решениями:

Как сделать окно активным и вывести его на передний план
В скрпте создается окно Internet explorer (методом CreateObject("InternetExplorer.Application"))....

Вывести окно на передний план
findwindow('Приложение с едит1',nil); что-то типо в общем нужно чтобы вывело окно с едита 1,...

Вывести окно на передний план
2. У меня сначала, запускается программа (Client.exe) потом идет команда msg. Но из за того, что...

Как выдвинуть окно экселя на передний план?
?

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32482 / 20968 / 8114
Регистрация: 22.10.2011
Сообщений: 36,235
Записей в блоге: 7
23.12.2018, 12:30 2
Вот второй вариант как раз отработал нормально (WinXP, Win7), как из перекрытого окна, так и из минимизированного возвращается на передний план.
1
174 / 64 / 13
Регистрация: 22.12.2015
Сообщений: 2,647
23.12.2018, 12:37  [ТС] 3
volvo, У меня в случае заслонённого окна просто мигает иконка на панели задач.
Вот так только получается и для развёрнутого и для свёрнутого окна:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Application->Restore();
    FormStyle = fsStayOnTop;
    Timer1->Enabled = false;
    FormStyle = fsNormal;
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32482 / 20968 / 8114
Регистрация: 22.10.2011
Сообщений: 36,235
Записей в блоге: 7
23.12.2018, 12:46 4
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

ОС какая? И, заодно, версия Билдера. Потому что, как выяснилось, BCB6 иногда ведет себя очень неадекватно в некоторых случаях.
1
174 / 64 / 13
Регистрация: 22.12.2015
Сообщений: 2,647
24.12.2018, 11:09  [ТС] 5
volvo, Действительно, BCB6 и XP в некоторых случаях дают странный результат. На Win8.1 второй вариант отработал как полагается. Вот окончательный вариант для работы под любой Windows, как со свёрнутым, так и "заслонённым" окном, обёрнутый для удобства в функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::ApplicationRestore()
{
    Application->Restore();
    SetWindowPos(Form1->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    SetWindowPos(Form1->Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    Application->BringToFront();    // Добавляет для XP 3-х кратное мигание значка на панели задач
}
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    //WindowState = wsMinimized;
    Timer1->Interval = 5000;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    ApplicationRestore();
    Timer1->Enabled = false;
}
FormStyle = fsNormal; и FormStyle = fsStayOnTop; не подошли - заметно мигание
0
142 / 26 / 4
Регистрация: 06.05.2019
Сообщений: 1,680
Записей в блоге: 4
11.04.2021, 16:41 6
Цитата Сообщение от jkrnd Посмотреть сообщение
SetWindowPos(Form1->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
У меня не работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2021, 16:41
Помогаю со студенческими работами здесь

Как перенести на передний план окно с приложением?
Добрый день! В WinXP одна программа запускает другую, и окно последней, с GUI, появляется не...

Как вывести картинку на передний план
Здравствуйте, помогите пожалуйста разобраться, как вывести картинку из класса "hdtv" на передний...

Окно на передний план
Доброго времени суток. Подскажите, пожалуйста, как в tkinter переводить окно на передний план. По...

Окно на передний план
Захотелось реализовать такую штуку, например: вот я на калькуляторе посчитал выражение, и его нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru