Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BitBlt, почему изображение постоянно смещается? Проблема с компонентом TImage 
:(
    Опции темы
WDeveloper
Дата 7.2.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Вот такой код:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
  BitBlt ( Image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, GetDC ( 0 ), 0, 0, SRCCopy );
end;

Скриншот появляется по координатам 0,0 - что верно, а вот если нажать повторно кнопку, то оно сместиться пикселей на 100 и отобразится уже начиная с позиции 100, 100.
Почему имеет место быть подобный эффект и как можно его избежать?


Пользуясь случаем, озвучу ещё один вопрос smile Хочу сделать скриншот из проги, да чтобы этой проги на скрине не было.
Делаю вот так:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowWindow( Handle, SW_HIDE );
  Delay ( 500 ); // вот без этой задержки
  BitBlt ( Image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, GetDC ( 0 ), 0, 0, SRCCopy );
  ShowWindow( Handle, SW_SHOW );
end;

А вот без задержки не получается. Прога ИНОГДА остаётся всё же на скриншоте.
Интересно, почему такое происходит? Не успевает экран перерисоваться от скрытой только что проги, как я его тут же фоткаю?
Как считаете, приблизительно какое минимальное время можно установить на задержку, без опасения повторения этого эффекта?
( чем компьютер слабее, тем это время больше, полагаю.. )

PM MAIL   Вверх
Sunvas
Дата 7.2.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(WDeveloper @  7.2.2007,  22:02 Найти цитируемый пост)
Почему имеет место быть подобный эффект и как можно его избежать?

Фоткать на Image1 как-то не очень удачно - о для другого предназначен.  smile  Если же на него повторно фоткаешь, то имайдж надо перерисовать. Например:
Код

image1.Canvas.Rectangle(0,0,1000,1000);
BitBlt(image1.Canvas.Handle, 0, 0, screen.Width, screen.Height, getdc(0), 0, 0, SRCCOPY);


Цитата(WDeveloper @  7.2.2007,  22:02 Найти цитируемый пост)
Delay

Эта фича откуда?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
MetalFan
Дата 7.2.2007, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



WDeveloper, а зачем через ShowWindow форму прячешь? чем тебе Hide не угодил?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 7.2.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Это ещё ничего...
Часов через 10 винда повиснет - ресурсы кончатся smile
PM MAIL   Вверх
WDeveloper
Дата 8.2.2007, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Sunvas, а чего мне лучше использовать для отрисовки скриншота? Собственную форму или TPaintBox..?


MetalFan, 
Вообще Hide действительно быстрее работает, но если задержку не поставить, то кусок формы всё равно может остаться.


Snowy, это ты серьёзно? smile
PM MAIL   Вверх
MetalFan
Дата 8.2.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(WDeveloper @  8.2.2007,  03:36 Найти цитируемый пост)
Вообще Hide действительно быстрее работает, но если задержку не поставить, то кусок формы всё равно может остатьс

сделай еще Application.ProcessMessages перед снятием скрина.


Цитата(WDeveloper @  8.2.2007,  03:36 Найти цитируемый пост)
Snowy, это ты серьёзно? smile 

а ты думал тут все шутники?!
кто будет ReleaseDC делать например? Пушкин?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 8.2.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(WDeveloper @  7.2.2007,  22:02 Найти цитируемый пост)
GetDC ( 0 )
Дяденька, отпусти DC - ему же больно smile
Если взял, то не забудь отпустить - ReleaseDC.
А для этого нужно завести переменную, хранящую этот DC.
PM MAIL   Вверх
WDeveloper
Дата 10.2.2007, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



MetalFan
А ProcessMessages перед снятием скрина зачем?? Полагаю не для того, чтобы не подвисало на мгновение.. smile


Спасибо всем за советы!! Обязательно учту!
PM MAIL   Вверх
MetalFan
Дата 10.2.2007, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



WDeveloper, а на всякий пожарный. чтоб форма все сообщения обработала и спрятаться успела)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
WDeveloper
Дата 10.2.2007, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Ясно! Спасибо за совет!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1146 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.