Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

окошко программы поверх других окон   Найти похожие ветки 

 
Lessa   (2004-05-23 11:49) [0]

Подскажите идею: как бы так изловчиться, чтобы окошко программы показывалось поверх ВСЕХ других окон? fsStayOnTop не подходит, поскольку, скажем, играми это окно все равно закрывается... Пример -- fraps, его окно всегда висит поверх.
Что-то нигде найти не могу. Помогите советом!


 
Anatoly Podgoretsky ©   (2004-05-23 11:55) [1]

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


 
©   (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.53 MB
Время: 0.049 c
3-1085054789
pok
2004-05-20 16:06
2004.06.13
Interbase .... уходит слишком много времени...


1-1086067114
nitro
2004-06-01 09:18
2004.06.13
Как присвоить Label.Caption значение текущего элемента Combobox ?


4-1084133388
RyDmi
2004-05-10 00:09
2004.06.13
Имя текущего пользователя


3-1085398790
Andrey
2004-05-24 15:39
2004.06.13
Открытие таблицы MySQL


1-1085675639
Подкрадуха
2004-05-27 20:33
2004.06.13
Сохранение класса в файл...