Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2008, 07:45   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Форму на передний план!

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

Спасибо заранее!
Altera вне форума Ответить с цитированием
Старый 23.02.2008, 07:52   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Код:
BringWindowToTop(FormX.Handle);
Код:
SetForegroundWindow(FormX.Handle);
B_N вне форума Ответить с цитированием
Старый 23.02.2008, 08:06   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Эт не помогает...
Altera вне форума Ответить с цитированием
Старый 23.02.2008, 08:14   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Эт не помогает...
Код в студию.
B_N вне форума Ответить с цитированием
Старый 23.02.2008, 08:21   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Допустим:
Код:
parocedure tMain_form.Main_TimerOnTimer(sender: tObject);
begin
   {Вот здесь я хочу, чтоб форма выводилась на передний план и становилась октивной}
end;
Altera вне форума Ответить с цитированием
Старый 23.02.2008, 08:34   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Допустим:
Код:
parocedure tMain_form.Main_TimerOnTimer(sender: tObject);
begin
   {Вот здесь я хочу, чтоб форма выводилась на передний план и становилась октивной}
end;
Код:
procedure tMain_form.Main_TimerOnTimer(sender: tObject);
begin
	SetForegroundWindow(tMain_form.Handle);
end;
B_N вне форума Ответить с цитированием
Старый 23.02.2008, 13:37   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
SetForegroundWindow(tMain_form.Hand le);
Не-а, только иконка на панели задач мигает и все...
mihali4 вне форума Ответить с цитированием
Старый 23.02.2008, 14:19   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Не-а, только иконка на панели задач мигает и все...
Это зависит от установки параметра HKCU\Control Panel\Desktop\ForegroundLockTimeout и функции LockSetForegroundWindow, появившихся в NT5 и Win98 - WinME, как раз с той целью, чтобы запретить красть фокус ввода процессам, не соответствующим следующим условиям:

Цитата:
Windows 98/Me: The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:

The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The foreground process is being debugged.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
Windows 2000/XP: No menus are active.
Если топикстартер просто хочет вытащить окно наверх то можно это сделать с помощью
Код:
SetWindowPos(tMain_form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
B_N вне форума Ответить с цитированием
Старый 23.02.2008, 14:55   #9
Програмёр
Новичок
Джуниор
 
Регистрация: 23.02.2008
Сообщений: 2
По умолчанию

А чем не подходит простой вызов formX.show; или formX.BringToFront; ? )) По-моему оба удовлетворяют условия автора ))
Програмёр вне форума Ответить с цитированием
Старый 23.02.2008, 22:08   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Програмёр Посмотреть сообщение
А чем не подходит простой вызов formX.show; или formX.BringToFront; ? )) По-моему оба удовлетворяют условия автора ))
Ответ на ваш вопрос вы получите, опробовав предложенное вами, так сказать, на натуре...
Не всегда чистая теория плавно воплощается в практике.
Цитата:
Если топикстартер просто хочет вытащить окно наверх то можно это сделать с помощью
SetWindowPos(tMain_form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
Красное - лишнее.
Да, вытаскивает наверх (я этот вариант предварительно уже рассмотрел), но...
Насколько я понял топикстартера, ему не нужно, чтобы форма навечно поселилась поверх всех остальных. Ему нужно, чтобы пользователь мог, как и обычно, работать с любой другой формой, а та самая пресловутая "его форма", скажем так, с периодичностью, установленной в таймере, напоминала о себе... То есть, могла бы становиться и закрытой другими формами.
Или я не прав?

Последний раз редактировалось mihali4; 23.02.2008 в 22:18.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форму на передний план Романнн Общие вопросы Delphi 2 12.12.2007 20:49
окно на задний план RammFan Общие вопросы Delphi 3 25.11.2007 15:11
Как запустить ShellExecute на передней план Stanislav Общие вопросы Delphi 3 21.11.2007 16:51
Про форму Marsik Помощь студентам 2 03.11.2007 14:53
Как изменить стандартную форму на форму любой сложности QwErEn Общие вопросы Delphi 9 08.06.2007 11:44