Текущий архив: 2008.08.10;
Скачать: CL | DM;
Вниз
Окно поверх всех окон Найти похожие ветки
← →
DJ Kondakov (2008-04-22 14:57) [0]Как сделать окно поверх всех окон в системе вообще? Насколько я знаю, FormStyle := fsStayOnTop делает окно поверх только остальных окон приложения.
← →
DVM © (2008-04-22 14:58) [1]никак
← →
DJ Kondakov (2008-04-22 15:00) [2]А Винамп же как-то это делает?!
← →
DVM © (2008-04-22 15:01) [3]
> А Винамп же как-то это делает?!
из двух винампов один все же ниже другого
← →
DJ Kondakov (2008-04-22 15:02) [4]Не понял...
← →
DVM © (2008-04-22 15:03) [5]
> Не понял...
окно не может быть всегда выше всех других окон ибо всегда найдется другое такое окно кторое тоже хочет быть выше
← →
DVM © (2008-04-22 15:07) [6]Попытаться удержаться наверху как можно дольше можно используя SetWindowPos(...., HWND_TOPMOST) + обработку сообщения WM_WINDOWPOSCHANGING
← →
Anatoly Podgoretsky © (2008-04-22 15:40) [7]> DVM (22.04.2008 15:07:06) [6]
Да ладно не мучайся, просто запусти два экземпляра и попробуй осуществить свою мечту.
← →
DVM © (2008-04-22 15:44) [8]
> Anatoly Podgoretsky © (22.04.08 15:40) [7]
> попробуй осуществить свою мечту.
Мою мечту???
← →
Алексей К. (2008-04-24 09:47) [9]используй таймер.
т.е. при каждом срабатывании таймера (например, с интервалом в 1 сек или меньше) просто вызывай SetWindowPos(..., HWND_TOPMOST...)
как-то я писал прогу типа локера, так вот этой штукой и спасалсо.
ЗЫ
такое окно и диспетчер задач будет загораживать собой ;)
← →
{RASkov} © (2008-04-24 11:16) [10]> [9] Алексей К. (24.04.08 09:47)
> такое окно и диспетчер задач будет загораживать собой ;)
Ну а из двух таких окон - кто царь горы? :)
← →
{RASkov} © (2008-04-24 11:19) [11]....т.е. даже не обязательно это будут приложения одного автора, а разных... двух разных и больных авторов :)
Это "хорошо" еще секунда или более, не так эфектно, а если меньше интервал.... во борьба начнется :)
← →
Дмитрий С (2008-04-24 17:34) [12]
> DVM ©
+ вычисление конкурентов и TerminateProcess :)
← →
Dmitry S © (2008-04-24 23:48) [13]Устраиваем турнир!
Желающие, пишите программу для удержания окна выше остальных. Победит та программа, чье окно окажеться выше всех.
Порядок запуска процессов выбирается случайно.
Окно должно быть любого цвета с различимой надписью: имя участника.
Условие: Касперский запущенный на всю катушку не должен паниковать по поводу методов удержания окна.
Заодно и выясним=)
← →
DVM © (2008-04-25 10:39) [14]
> Dmitry S © (24.04.08 23:48) [13]
В конкурсе участвуют окна, распечатанные на принтере?
← →
{RASkov} © (2008-04-25 12:45) [15]> [14] DVM © (25.04.08 10:39)
> В конкурсе участвуют окна, распечатанные на принтере?
Могут, только участовавать будут в своей весовой категории...
Кто первый прелипил, тот и проиграл...
:о)
← →
DVM © (2008-04-25 13:03) [16]
> {RASkov} © (25.04.08 12:45) [15]
Тогда я предлагаю проецировать изображение окна с помощью проектора на поверхность экрана монитора. И пусть кто-нибудь попробует его перекрыть.
← →
Поп Гапон (2008-05-06 18:50) [17]SetWindowPos(Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE OR SWP_NOSIZE OR SWP_SHOWWINDOW);
← →
Ins © (2008-05-06 19:17) [18]
> Насколько я знаю, FormStyle := fsStayOnTop делает окно поверх
> только остальных окон приложения.
Полагаю, ваша StayOnTop-форма утопает при переключении на другое приложение? Тогда смею предположить, что это неглавная форма, так как с главными такого эффекта не наблюдается. VCL очень хитро обращается с StayOnTop, в частности, этот флажок сбрасывается для всех форм кроме главной при деактивации приложения. Подавить такое поведение можно несколькими способами, я предпочитаю такой. Для формы, которая должна быть StayOnTop перекрываем CreateParams таким образом:TForm2 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
...
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent:=0; // "Отвязываем" форму от Application.Handle
Params.ExStyle:=Params.ExStyle or WS_EX_TOPMOST;
end;
← →
DJ Kondakov (2008-07-05 09:48) [19]Хы-хы... Оказывается, в Delphi 10 Lite fsStayOnTop делает форму поверх всех окон в системе... А я мозги компостировал...
← →
Тын-Дын © (2008-07-07 01:22) [20]Вот один из методов:
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle := Idle;
end;procedure TForm1.Idle(Sender: TObject; var DOne: BOolean);
var
Pt: TPoint;
R: TRect;
begin
if Assigned(Form4) then
begin
GetCursorPos(Pt);
R := Rect(Form4.Left,Form4.Top,Form4.Left+Form4.Width,Form4.Top+Form4.Height);
if not PtInRect(R,pt) then SetWindowPos(Form4.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);
end;
end;
← →
Дмитрий Белькевич © (2008-07-09 12:35) [21]>Хы-хы... Оказывается, в Delphi 10 Lite fsStayOnTop делает форму поверх всех окон в системе... А я мозги компостировал..
Выше винампа, надеюсь?
← →
brother © (2008-07-09 13:27) [22]никак или через одно место...
← →
Тын-Дын © (2008-07-09 13:52) [23]
> brother © (09.07.08 13:27) [22]
> никак или через одно место...
С чего бы это?
← →
DVM © (2008-07-09 13:58) [24]
> С чего бы это?
Потому, что не бывает в системе окон выше всех (в отличие от ниже всех). Как в стопке листов не бывает самого верхнего. Всегда сверху можно положить еще лист. Если запустить две копии программы из [20] что начнется? Ерунда будет.
← →
Тын-Дын © (2008-07-09 14:05) [25]
> DVM © (09.07.08 13:58) [24]
>
> > С чего бы это?
>
> Потому, что не бывает в системе окон выше всех (в отличие
> от ниже всех). Как в стопке листов не бывает самого верхнего.
> Всегда сверху можно положить еще лист. Если запустить две
> копии программы из [20] что начнется? Ерунда будет.
А это обязательно - запускать ещё одну такую программу?
← →
brother © (2008-07-09 14:09) [26]> запускать ещё одну такую программу?
а если они обе всеж стартанут?
← →
DVM © (2008-07-09 14:09) [27]
> А это обязательно - запускать ещё одну такую программу?
Не знаю, но ведь не исключено. Да и не исключено, что из двух совсем разных программ разных авторов обе захотят всегда сидеть наверху. Будет чехарда.
← →
Тын-Дын © (2008-07-09 14:11) [28]
> DVM © (09.07.08 14:09) [27]
>
> > А это обязательно - запускать ещё одну такую программу?
>
>
> Не знаю, но ведь не исключено. Да и не исключено, что из
> двух совсем разных программ разных авторов обе захотят всегда
> сидеть наверху. Будет чехарда.
Достаточно сделать настраиваемой такую возможность...
← →
brother © (2008-07-09 14:13) [29]> Достаточно сделать настраиваемой такую возможность...
кому программам разных авторов?)
да не будут они ОБЕ наверху! или будут меняться местмаи с n переодичностью...
← →
Тын-Дын © (2008-07-09 14:17) [30]
> brother © (09.07.08 14:13) [29]
> > Достаточно сделать настраиваемой такую возможность...
>
> кому программам разных авторов?)
> да не будут они ОБЕ наверху! или будут меняться местмаи
> с n переодичностью...
Так сделай свою программу настраиваемой. Кто мешает-то?
← →
{RASkov} © (2008-07-09 14:18) [31]Единственное верное решение в этом плане(в плане сабжа) это - TOPMOST, т.е. стиль окна fsStayontop
Другими словами окно будет выше всех и всегда выше тех у кого нет такого стиля, но при "поднятии" другого окна с таким же стилем, то "другое" становится выше всех... Это нормально.
← →
brother © (2008-07-09 14:23) [32]> Так сделай свою программу настраиваемой.
а остальные?
в общем согласен с [31]
← →
Тын-Дын © (2008-07-09 14:35) [33]
> {RASkov} © (09.07.08 14:18) [31]
> Единственное верное решение в этом плане(в плане сабжа)
> это - TOPMOST, т.е. стиль окна fsStayontop
> Другими словами окно будет выше всех и всегда выше тех у
> кого нет такого стиля, но при "поднятии" другого окна с
> таким же стилем, то "другое" становится выше всех... Это
> нормально.
Выше приведено второе решение.
При необходимости его можно использовать (и оно используется успешно более года).
При замене параметров создания формы есть некоторые особенности, которые не всегда устраивают - не помню уже какие.
← →
Тын-Дын © (2008-07-09 14:36) [34]
> {RASkov} © (09.07.08 14:18) [31]
> Единственное верное решение в этом плане(в плане сабжа)
> это - TOPMOST, т.е. стиль окна fsStayontop
> Другими словами окно будет выше всех и всегда выше тех у
> кого нет такого стиля, но при "поднятии" другого окна с
> таким же стилем, то "другое" становится выше всех... Это
> нормально.
Кстати, оно даже и неверное для не основной формы приложения.
← →
Anatoly Podgoretsky © (2008-07-09 14:38) [35]> Тын-Дын (09.07.2008 14:17:30) [30]
Да, да, любых других претедентов на это давить в зародыше, закрывать.
← →
Тын-Дын © (2008-07-09 14:40) [36]
> Anatoly Podgoretsky © (09.07.08 14:38) [35]
> > Тын-Дын (09.07.2008 14:17:30) [30]
>
> Да, да, любых других претедентов на это давить в зародыше,
> закрывать.
При желании;)
← →
Renegat (2008-07-09 14:42) [37]> [24] DVM © (09.07.08 13:58)
Блин, классика форума :)
Чтобы не происходило "священной войны" за первенство на мониторе, нужно всего лишь специальным флагом запретить функции SetWindowPos отсылать уведомления об изменении позиции окна! И тогда наше окно по-тихому обретёт главенство над десктопом %)
← →
Anatoly Podgoretsky © (2008-07-09 14:55) [38]> Тын-Дын (09.07.2008 14:40:36) [36]
В зародыше.
← →
Тын-Дын © (2008-07-09 14:56) [39]
> И тогда наше окно по-тихому обретёт главенство над десктопом
> %)
Не-а... Не обретёт.
← →
Тын-Дын © (2008-07-09 14:57) [40]
> Anatoly Podgoretsky © (09.07.08 14:55) [38]
> > Тын-Дын (09.07.2008 14:40:36) [36]
>
> В зародыше.
По желанию.
Страницы: 1 2 вся ветка
Текущий архив: 2008.08.10;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.017 c