Текущий архив: 2004.06.13;
Скачать: CL | DM;
Внизокошко программы поверх других окон Найти похожие ветки
← →
Lessa (2004-05-23 11:49) [0]Подскажите идею: как бы так изловчиться, чтобы окошко программы показывалось поверх ВСЕХ других окон? fsStayOnTop не подходит, поскольку, скажем, играми это окно все равно закрывается... Пример -- fraps, его окно всегда висит поверх.
Что-то нигде найти не могу. Помогите советом!
← →
Anatoly Podgoretsky © (2004-05-23 11:55) [1]Плюнь, не выйдет. Просто попробуй запустить два своих экземпляра программы и обеспечить при этом непротиворечивость своих требований по отношению к этим двум экземлярам. А теперь представь еще одного Наполеона.
← →
R © (2004-05-23 12:08) [2]TTimer
← →
Lessa (2004-05-24 20:59) [3]Что таймер?
← →
GuAV © (2004-05-25 00:20) [4]
> Пример -- fraps, его окно всегда висит поверх.
Fraps вешает свой код на функции DirectX и OpenGL.
см. fraps faq где-то в конце.
Т.е. его индикатор - это вообще не окно.
← →
Agent13 © (2004-05-25 14:47) [5]
> Плюнь, не выйдет.
А вот у мелкомягких выходит как-то. Во всяком случае в Outlook2003 у меня окошко с сообщением о приходе почты мигает на экране даже в полноэкранных игарах. Или они тоже через DirectX его показывают? По мне так это самое рядовое окно.
← →
AlexG © (2004-05-25 14:48) [6]А может постоянно Invalidate? В таймере?
← →
Lessa (2004-05-25 15:32) [7]>А может постоянно Invalidate
Можно попробовать...
А других вариантов что, никто не знает? Да не может же быть!..
← →
panov © (2004-05-25 15:50) [8]http://delphimaster.net/view/4-1083439901/
← →
Lessa (2004-05-26 13:39) [9]И там тоже нормального решения не найдено.
В таймере setwindowpos, а также invalidate и все остальное не получается: окно либо вообще не выводится, либо ТАК мигает! И при обращении к нему игра сворачивается (что, впрочем, естественно, но хотелось бы обойти).
Если пойти в обход и сделать так, чтообы во время игр висел индикатор по типу fraps"ового, а в остальное время -- простое окно со стилем stayontop, то возникает вопрос: как "подвесить код на directX"? И нельзя ли сделать таймер более частым?
← →
Lessa (2004-05-28 09:28) [10]Ну подскажите хоть что-нибудь, плиз! Хоть идею, реализую сама. Где вы, Мастера?
← →
NAlexey © (2004-05-28 10:11) [11]>Lessa (28.05.04 09:28) [10]
Я бы попробывал сделать глобальную ловушку перехвата сообщений, в которой обрабатывал WM_WINDOWPOSCHANGING, WM_ACTIVATE. И если не мое окно пытается вылезти не позволять ему этого делать.
← →
Lessa (2004-05-28 10:28) [12]>NAlexey © (28.05.04 10:11) [11]
Нет, мне не нужно не позволять чужому окну вылезать. Надо, чтобы окно просто было поверх и чтобы при обращении к нему игра не сворачивалась... Такое вообще возможно сделать? А то, может, разбежалась я со своими запросами...
← →
NAlexey © (2004-05-28 10:37) [13]>Lessa (28.05.04 10:28) [12]
>Нет, мне не нужно не позволять чужому окну вылезать
Я не имел в виду что ты будешь его прятать. Просто не давать ему валазить наверх, или принудительно переводить твое окно вверх.
← →
Lessa (2004-05-28 10:45) [14]>NAlexey © (28.05.04 10:37) [13]
Гм... А это неплохая идея. Я попробую... А можно поподробнее?
← →
NAlexey © (2004-05-28 10:55) [15]>Lessa (28.05.04 10:45) [14]
Что именно поподробнее?
← →
Lessa (2004-05-28 10:58) [16]Про ловушки. Что именно ловить? И что делать при перехвате? И каков будет примерный результат?
← →
DVM © (2004-05-28 11:12) [17]можно просто по таймеру рисовать прямо на DC того окна что сверху или прямо на desktop (dc=0).
← →
Reindeer Moss Eater © (2004-05-28 11:16) [18]Lessa (28.05.04 10:45) [14]
>NAlexey © (28.05.04 10:37) [13]
Гм... А это неплохая идея. Я попробую... А можно поподробнее?
Плохая идея.
Основана на том, что никто больше не пользуется подобным способом. В противном случае не работает.
← →
Lessa (2004-05-28 11:29) [19]>Плохая идея.
Простите, не поняла: чем она плоха?
>можно просто по таймеру рисовать прямо на DC того окна что >сверху или прямо на desktop (dc=0).
Таймер слишком медленно работает, и все это моргает, мигает и жутко раздражает. И потом, если просто рисовать, разве можно кликом по этотму рисунку обратиться в мою программу?..
← →
Reindeer Moss Eater © (2004-05-28 11:36) [20]Я же одной строчкой и по русски написал почему она плохая.
← →
Lessa (2004-05-28 11:40) [21]>Reindeer Moss Eater © (28.05.04 11:36) [20]
Это где про "не работает"? А почему не работает? И что можно сделать в таком случае? Мне-то надо решение задачи или алгоритм или подсказку... что-нибудь, что помогло бы, а этого как раз я найти не могу.
← →
Anatoly Podgoretsky © (2004-05-28 11:42) [22]Agent13 © (25.05.04 14:47) [5]
А теперь представь два окошка и что бы каждое было поверх ВСЕХ
← →
Agent13 © (2004-05-28 12:43) [23]
> что бы каждое было поверх ВСЕХ
Ну, допустим, я этого не говорил :) Лично мне интересно - как сделать так, чтоб окно вылезло поверх игры хоть на какой-то момент, а уж потом пускай его перекрывают сколько душе угодно.
← →
DVM © (2004-05-28 13:54) [24]
> >можно просто по таймеру рисовать прямо на DC того окна
> что >сверху или прямо на desktop (dc=0).
> Таймер слишком медленно работает, и все это моргает, мигает
> и жутко раздражает. И потом, если просто рисовать, разве
> можно кликом по этотму рисунку обратиться в мою программу?..
Возьмите Multimedia Timer. Чей таймер чаще тот и будет виден.
Но столь частая прорисовка может сильно нагружать систему.
Клик отловить можно, поставив глобальный хук. По другому ессно нельзя.
> Лично мне интересно - как сделать так, чтоб окно вылезло
> поверх игры хоть на какой-то момент, а уж потом пускай его
> перекрывают сколько душе угодно.
SetWindowPos() + HWND_TOPMOST
← →
marcello (2004-06-02 07:46) [25]попробуй вот так:
procedure TForm1.FormPaint(Sender: TObject);
begin
SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height, 0 );
end;
← →
Lessa (2004-06-02 15:55) [26]> Anatoly Podgoretsky © (23.05.04 11:55) [1]
Вы были правы. Ничего не вышло. Я сделала по-другому: просто стала отлавливать нажатие горячих клавиш и выполнять действия по ним, а не по клику.
Всем спасибо за советы (в другой программе они мне очень помогли)!
Страницы: 1 вся ветка
Текущий архив: 2004.06.13;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.027 c