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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2013, 04:29   #1
DimychX
Пользователь
 
Регистрация: 19.05.2011
Сообщений: 26
По умолчанию Как корректно копировать область экрана?

Вроде все было просто:
Код:
function CaptureScreen:tBitMap;
var ScreenDC: HDC;
begin
  Result:=tBitMap.Create;
  with Result, Rect do begin
    Width := Right - Left;
    Height := Bottom - Top;
    ScreenDC := GetDC( 0 );
    BitBlt( Canvas.Handle, 0, 0, Width, Height, ScreenDC, Left, 
      Top, SRCCOPY );
    ReleaseDC( 0, ScreenDC );
  end;
end;
Rect - глобальная переменная (значения записываются отдельно)
Получаю объект типа tBitMap, работаю с его Canvas, потом грохаю (Free)
Но после нескольких десятков таких манипуляций в программе идут глюки: похоже загаживается память.
DimychX вне форума Ответить с цитированием
Старый 16.06.2013, 04:38   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

В функции не видно, как ты его "грохаешь".
Там и ищи

И объекты должны начинаться с большой T -.-
Иначе выглядит как структура винды (особенно после долго времени изучения msdn :D)

Последний раз редактировалось Stilet; 16.06.2013 в 10:53.
TwiX вне форума Ответить с цитированием
Старый 16.06.2013, 04:45   #3
DimychX
Пользователь
 
Регистрация: 19.05.2011
Сообщений: 26
По умолчанию

Так там все просто:
Код:
var BM : tBitMap;
begin
  GetRect(Num); // По номеру области формируется Rect
  BM:=CaptureScreen;
  Analyse(BM.Canvas); // Анализируются пиксели из канвы
  BM.Free;
end;
Вот собственно и все
DimychX вне форума Ответить с цитированием
Старый 16.06.2013, 05:46   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

...
Аналайз? Там не предлагать поискать?
TwiX вне форума Ответить с цитированием
Старый 16.06.2013, 12:17   #5
DimychX
Пользователь
 
Регистрация: 19.05.2011
Сообщений: 26
По умолчанию

В этот метод передается только свойство Canvas и используется лишь его массив Pixels и только по чтению. Явно, что проблема не в этом.
DimychX вне форума Ответить с цитированием
Старый 16.06.2013, 12:27   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от DimychX Посмотреть сообщение
В этот метод передается только свойство Canvas и используется лишь его массив Pixels и только по чтению. Явно, что проблема не в этом.
И что? Ни какой явности нет. И GetRect тоже не обсуждается? И не факт, что в других местах все Ok.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.06.2013, 12:37   #7
DimychX
Пользователь
 
Регистрация: 19.05.2011
Сообщений: 26
По умолчанию

Спасибо, mr. TwiX и Аватар!

Действительно, все проблемы были внутри процедуры Analyse и они не были связаны с созданием и удалением tBitMap.

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

Всем спасибо. Проблема решена.
DimychX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Область экрана Zoomer123 Общие вопросы Delphi 2 11.05.2013 11:28
Jрганизация вывода текста в прямоугольную область экрана [чистый СИ] cesta Помощь студентам 0 01.02.2013 20:41
Как корректно обработать кнопки Павел-ещераз-Павел Win Api 0 02.05.2012 22:27
составить программы на паскале: попадание точки в заданную область; вывести текст в разные места экрана Кашелот Помощь студентам 1 27.10.2011 23:24
Корректно отображать даты - как? Anatoly1982 Microsoft Office Word 6 21.10.2011 13:27