Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Окно на первый план в Delphi 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как можно конкретно осуществить сабж?
 
Процедуры:
1.
Код:
SetForegroundWindow(Application.Handle);

2.
Код:
BringToFront

3.
Код:
fsStayOnTop

3.
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  p: TPoint;
begin
  GetCursorPos(p);
  SetForegroundWindow(WindowFromPoint(p));
end;
 

 
не предлагать, ибо они окно не выносят, а только лишь сигнализируют его иконкой на панели задач (само же окно так и висит позади всех).
 
Нужен либо 100% рабочий код, который сможет вынести моё окно на первый план и поверх всех даже тогда, когда в фулскрине работает "Media Player Classic", либо - соответствующая компонента, реализующая подобный код.
 
Заранее спасибо!

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 21:45 26-03-2006
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip

Код:
 
SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0,SWP_NOSIZE Or SWP_NOMOVE
 

вот тебе 100% рабочий код

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 21:57 26-03-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Клёво, спасибо! То, что нужно!
А как его потом отменить?
 
Добавлено:
Вопрос снят.
 

Код:
SetWindowPos(Form1.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 22:12 26-03-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так, ещё вопрос:
 
Как сделать так, чтобы окно было устойчивым к команде "Свернуть все окна" (связка клав "win + D")?
Или против лома нет приёма?..

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 19:30 27-03-2006
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
у формы убираешь Minimized, тоесть его просто диалоговым...
для установки призязки к клаве и спользуй THotKey

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 21:03 27-03-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0,SWP_NOSIZE Or SWP_NOMOVE);

Это код просто замечательный, разговора нет. Единственный минус - запускаю винамп, qip, и моё окно так и висит поверх всех, всё клёво, вот только OnMouseMove уже не пашет ((( Форма моя перестаёт "чувствовать" мышку, попадающую на неё. Что делать?.. Как сделать так, чтобы форма всегда чувствовала грызуна?

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 21:20 27-03-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DroN_S

Цитата:
у формы убираешь Minimized, тоесть его просто диалоговым...  
для установки призязки к клаве и спользуй THotKey

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

Цитата:
Это код просто замечательный, разговора нет. Единственный минус - запускаю винамп, qip, и моё окно так и висит поверх всех, всё клёво, вот только OnMouseMove уже не пашет ((( Форма моя перестаёт "чувствовать" мышку, попадающую на неё. Что делать?.. Как сделать так, чтобы форма всегда чувствовала грызуна?

А не трудно ли сделать вначале вызвать эту процедуру, а потом сразу после нее эту же процедуру, но с нормальными параметрами, а вообще я для принудительного выкидывания на самый верх использую вот это

Цитата:
 
function ForceForegroundWindow(Const hWnd: THandle): Boolean;
  var
          hCurWnd: THandle;
    begin
 
       Result := False;
 
       if not isWindow(hWnd) then Exit;
 
       hCurWnd := GetForegroundWindow;
 
       if (hCurWnd=hWnd) then begin
         Result := True;
         Exit;
       end;
 
       if (GetWindowLong( hWnd, GWL_STYLE ) and WS_MINIMIZE)<>0
       then ShowWindow(hWnd, SW_SHOWNOACTIVATE);
 
       AttachThreadInput(    GetWindowThreadProcessId(hCurWnd, nil),
       GetCurrentThreadId, True);
 
       Application.ProcessMessages;
 
       SetForegroundWindow(hWnd);
 
       AttachThreadInput(    GetWindowThreadProcessId(hCurWnd, nil),
       GetCurrentThreadId, False);
 
       Result := GetForegroundWindow=hWnd;
 
end;
 
 



----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:05 28-03-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Спасибо, только куда мне эту функцию засунуть? Т.е как её вызвать?..

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 13:44 28-03-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip

Цитата:
Спасибо, только куда мне эту функцию засунуть? Т.е как её вызвать?..

кидаешь в начало юнита, чтобы ее отовсюду было видно, а вызываешь как любую функцию  ForceForegroundWindow(Form1.Handle) например этот код вынесет на передний край форму1. То есть вызывай вместо SetWindowPos

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:36 29-03-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Есть контакт!
 
Блин, человечище! Я тебе так благодарен! )))
Спасибо, очень выручил!!!

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 21:30 29-03-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ещё нашёл на днях в пакете "LMD ElPack" компоненту "Eltopmost", её топмост не может перекрыть и тот код, который приведён выше. Самое интересное - форма реагирует на движения мыши (выдаёт хинты, фокусы батонов) даже тогда, когда находится в неактивном состоянии (теряет фокус). Такие вот дела...

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 02:44 14-04-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотите образцовый epic fail? Неделю бился с задачей вынести на передний план хитрое окно после хитрой потери фокуса. Танцевал перед компьютером так, что все пальцы стёр. В итоге от полного отчаяния решил погуглить и спустя минуту вышел на собственную тему девятилетней давности (причём, как сейчас выяснилось, я за неделю повторил все свои ошибки почти в той же самой последовательности, что и 9 лет назад). Теперь мало того, что пальцы стёрты, так ещё и лицо от фейспалмов горит.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 13:43 06-09-2015
idiMAN

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
Не переживай, ты не одинок, у меня была аналогичная ситуация и ответ, кстати, нашёл также в созданной собой же теме на ru-board ...

Всего записей: 466 | Зарегистр. 05-05-2003 | Отправлено: 14:12 06-09-2015
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip,  
Вот если бы в вашей жизни было так мало событий, что ошибка девятилетней давности была бы "как будто вчера", вот тогда была бы настоящая причина для переживаний...
Но пока у вас всё в порядке...
 
Я, бывает, на свой код трёхмесячной давности смотрю с некоторым изумлением, и восстанавливаю смысл только по комментариям...
"Нет времени скорбеть над старыми ошибками. Впереди множество мест, где ещё надо успеть накосячить..."
 

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 06:58 07-09-2015
protoror



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 Я, бывает, на свой код трёхмесячной давности смотрю с некоторым изумлением, и восстанавливаю смысл только по комментариям...
"Нет времени скорбеть над старыми ошибками. Впереди множество мест, где ещё надо успеть накосячить..."  

золотые слова)

Всего записей: 494 | Зарегистр. 23-11-2009 | Отправлено: 10:48 07-09-2015
asutp2

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
прикольно))

Всего записей: 791 | Зарегистр. 22-10-2004 | Отправлено: 08:49 08-09-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Окно на первый план в Delphi 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru