Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.06.2011, 17:00
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию Canvas = "зеркало" окна

сабж. нужно сделать что-то вроде этого

у себя на Image. проблема в том, что изображение на image отказывается обновляться (по таймеру, 20мс), код таймера:

Код:
Image1.Canvas.Handle:=getDC(whandl);
Image1.Canvas.Refresh;

изначально хендл окна получен при помощи
Код:
whandl:=WindowFromPoint(mouse.CursorPos);
но думаю это не имеет значения, т.к. это происходит всего лишь 1 раз. но даже если вызывать второй раз - другой взятый хендл от другого окна, то всеравно новое окно не перерисовывается.
как же всетаки правильно обновлять изображение?
p.s. масштабирование не учитывать.

Последний раз редактировалось NekitoSSSS, 07.06.2011 в 17:02.
Ответить с цитированием
  #2  
Старый 07.06.2011, 17:07
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

А Image1.Repaint?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 07.06.2011, 17:22
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

все работает, спасибо, но небольшая проблема: если при захвате мой канвас был маленький, всмысле image1.align:=alclient, а форма сжата немного, то при втором захвате другого окна, которое наприме будет больше в 2 раза, оно(второе окно) обрезается ровно на столько, сколько и были изначальные размеры image. всмысле если даже растянуть форму сильнее. просто сервый цвет в том месте, которое раньше не занимал image.
вот так:


Последний раз редактировалось NekitoSSSS, 07.06.2011 в 17:27.
Ответить с цитированием
  #4  
Старый 07.06.2011, 17:33
Аватар для GriLab
GriLab GriLab вне форума
Начинающий
 
Регистрация: 26.11.2010
Адрес: Минск
Сообщения: 190
Версия Delphi: XE 15.0.3890
Репутация: 415
По умолчанию

Посмотри тут, может быть найдешь то, что тебе нужно: http://www.progz.ru/t24759/
Ответить с цитированием
  #5  
Старый 07.06.2011, 17:40
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

GriLab, то что надо. использовал
Код:
procedure ScreenShot(Bild: TBitMap);
var
  c: tcanvas;
  r: TRect;
begin
  c := tcanvas.Create;
  c.Handle := GetWindowDC(whandl);
  try
    GetWindowRect(whandl,r);
    r.Right:=r.Right-r.Left;
    r.Bottom:=r.Bottom-r.Top;
    r.Left:=0;
    r.Top:=0;
//    r := Rect(0, 0, Screen.Width, Screen.Height);
    Bild.Width := r.Right;
    Bild.Height := r.Bottom;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;;

только вместо GetDesktopWindow подсунул свой хендл. все отлично обновляет, спасибо, плюсанул обоим =)

Последний раз редактировалось NekitoSSSS, 07.06.2011 в 17:48.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter