Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 25.10.2015, 16:45   #1
Illusiony
Участник клуба
 
Регистрация: 17.02.2014
Сообщений: 785
Репутация: 73
По умолчанию как избавиться от мерцания при рисовании по чужому окну

В чужом окне постоянно ведется перерисовка ( динамическая графика)

Собственно рисую так:

Код:

var 
h:HWND;
 x,y,t,i:integer;
 dc: HDC;

begin      
h := findwindow(nil, 'Нужное окно');
dc:= GetDC (h); // ссылка на найденное окно
      randomize;
      x:=Random(GetSystemMetrics(SM_CXSCREEN));
      Y:=Random(GetSystemMetrics(SM_CYSCREEN));
      t:=random(8);
     Rectangle (dc, 100, 100, 110, 110); // квадрат на чужом окне
// Здесь еще необходимые действия

ReleaseDC (h, dc); // освобождение ссылки
DeleteDC (dc); // удаление ссылки

Таймер на 30 миллисекунд.
Я догадываюсь, что нужно перехватывать сообщение о перерисовки этого окна и самому добавлять свои изменения перед перерисовкой.
В google либо очень мало информации либо я плохо ищу.
Поделитесь информацией пожалуйста.

Последний раз редактировалось Illusiony; 25.10.2015 в 16:57.
Illusiony вне форума   Ответить с цитированием
Старый 25.10.2015, 16:55   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,961
Репутация: 6799
По умолчанию

Я когда-то пытался решить такой же вопрос с помошью установки хука, но так и не получилось правильно сделать.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 25.10.2015, 19:30   #3
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
Репутация: 27

icq: 330-171-495
skype: cotseec
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
.. нужно перехватывать сообщение о перерисовки этого окна и самому добавлять свои изменения перед перерисовкой...
посмотрите в сторону сабклассинга (первая попавшаяся статья в поисковике)
при запуске подменяется оконная процедура препарируемого окна (в данном случае только в качестве монитора), все сообщения ретранслируются родной оконной процедуре, при получении WM_PAINT происходит собственное рисование после ретрансляции (чтобы "родное" рисование не затирало то, что рисовали мы)

З.Ы. это теоретически, возможно собственное рисование может вызвать очередную перерисовку окна, что приведет к очередному рисованию и т.д., одним словом необходимо проверить

З.Ы.Ы. если не секрет: в чем идея рисования по таймеру с таким малым интервалом?
__________________
Skype: cotseec
ICQ: 330-171-495
cotseec вне форума   Ответить с цитированием
Старый 25.10.2015, 19:49   #4
Illusiony
Участник клуба
 
Регистрация: 17.02.2014
Сообщений: 785
Репутация: 73
По умолчанию

Цитата:
Сообщение от cotseec Посмотреть сообщение
посмотрите в сторону сабклассинга (первая попавшаяся статья в поисковике)
при запуске подменяется оконная процедура препарируемого окна (в данном случае только в качестве монитора), все сообщения ретранслируются родной оконной процедуре, при получении WM_PAINT происходит собственное рисование после ретрансляции (чтобы "родное" рисование не затирало то, что рисовали мы)

З.Ы. это теоретически, возможно собственное рисование может вызвать очередную перерисовку окна, что приведет к очередному рисованию и т.д., одним словом необходимо проверить

З.Ы.Ы. если не секрет: в чем идея рисования по таймеру с таким малым интервалом?
Да я только проверяю саму возможность, интервал взял наугад и просто тыкался, пытаясь убрать таким способом мелькание, конечно же бесполезно оказалось.
Просто, если интервал будет большим, например 1 секунда, то рисунок только появится и сразу пропадет ( перерисуется самим приложением)
Illusiony вне форума   Ответить с цитированием
Старый 02.11.2015, 15:26   #5
Illusiony
Участник клуба
 
Регистрация: 17.02.2014
Сообщений: 785
Репутация: 73
По умолчанию

Может есть у кого рабочие примеры такой задачи?

Нужно, наверное, использовать WM_PAINT но примеров не нашел

Последний раз редактировалось Illusiony; 02.11.2015 в 17:58.
Illusiony вне форума   Ответить с цитированием
Старый 20.01.2016, 19:30   #6
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Адрес: Московская Область, скверное место, не рекомендовал бы тут жить.
Сообщений: 337
Репутация: 248
По умолчанию

Из своего процесса никогда не получится рисовать на окне чужого процесса без мелькания.
Надо рисовать функцией внутри чужого процесса в оконной процедуре нужного окна при WM_PAINT.
ResourceSpace вне форума   Ответить с цитированием
Старый 29.10.2016, 17:23   #7
Illusiony
Участник клуба
 
Регистрация: 17.02.2014
Сообщений: 785
Репутация: 73
По умолчанию

Возвращаюсь к данной теме. Есть какие нибудь примеры по моему вопросу? Фрапс интересно как это делает.

Допустим приложение работает с использованием DirectX.

Последний раз редактировалось Illusiony; 29.10.2016 в 17:51.
Illusiony вне форума   Ответить с цитированием
Старый 02.11.2016, 15:35   #8
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 467
Репутация: 101
По умолчанию

а что за окно, в котором пытаетесь рисовать?
BLACK_RAIN вне форума   Ответить с цитированием
Старый 02.11.2016, 19:08   #9
Illusiony
Участник клуба
 
Регистрация: 17.02.2014
Сообщений: 785
Репутация: 73
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
а что за окно, в котором пытаетесь рисовать?
Карточная игра от Близзарт Hearthstone.
Illusiony вне форума   Ответить с цитированием
Старый 03.11.2016, 11:05   #10
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 467
Репутация: 101
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Карточная игра от Близзарт Hearthstone.
а что нарисовать хотите?
Если игра идет в оконном режиме, то можно просто наложить поверх нее своё окно, обрезать у него регион и рисовать в этом регионе всё что угодно.
BLACK_RAIN вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от мерцания datgen Windows Forms 1 16.01.2014 16:19
Как избавиться от мерцания при передвижении Timages. jocry Помощь студентам 13 22.07.2012 09:46
Как послать сообщение чужому окну Tihon Общие вопросы Delphi 4 17.05.2011 17:43
Как избавиться от мерцания в консоле? MaRKer.nsk Общие вопросы C/C++ 8 13.04.2010 12:41
как избавиться от мерцания в OpenGL при перспективной проекции (двойная буферизация включена) anyx Свободное общение 0 01.02.2010 11:00




01:04.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru