Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.051 c
6-1082700117
thebatko
2004-04-23 10:01
2004.06.13
Сети


3-1084856075
Yus
2004-05-18 08:54
2004.06.13
Редактирование связанных таблиц


1-1085918737
Knoxville
2004-05-30 16:05
2004.06.13
Manifest для TBitBtn


3-1085402689
Cyber
2004-05-24 16:44
2004.06.13
создание Query-запросов


4-1083660910
NetWorK
2004-05-04 12:55
2004.06.13
Отключение жестких дисков и ЦПУ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский