Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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

Код:
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 в 15:57.
Illusiony вне форума Ответить с цитированием
Старый 25.10.2015, 15:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от мерцания 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 10:00