IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Панорама, Как сделать панораму?
Alx
сообщение 16.08.2004 13:33
Сообщение #1


Гость






Люди, подскажите пожалуйста. Мне необходимо сделать панораму. Длинная кортинка, которая едет по форме. Но когда я двигаю компонент Image по форме image.left:=image.left+1 картинка как будто мерцает и на какоето время пропадает. Мне сказали что так сделать не получится. А как же тогда мне сделать панораму? Заранее спасибо! Alx
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Бродяжник
сообщение 18.08.2004 13:18
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x-1;
repaint;
Canvas.CopyRect(clientrect,Bitmap.Canvas,rect(x,0,x+clientwidth,clientheight));
end;

Так, конечно, будет мерцать. Потому что Вы сначала делаете repaint, то есть побуждаете форму перерисоваться, и сразу же после этого вручную на нее накладываете битмап. А вообще нужно так, как было у Паши, потому что если Вы сделаете отрисовку в таймере, а не в OnPaint, тогда при сворачивании, перекрывании и другими манипуляциями с Вашим окном, система будет слать ему WM_PAINT, и перерисовка формы будет перебивать отрисовку в таймере. Наверное, по этому поводу можно где-то прочесть лучше, чем я пишу, но все же попробую объяснить.
Когда мы рисуем через Canvas.CopyRect и другие методы канвы, это, так сказать, наше личное дело. Мы чегой-то нарисовали, и окно не обязано об этом помнить. Если после нашего рисования окно было временно перекрыто другим, то после этого на месте нашего рисования останется область, залитая фоновым цветом окна. Восстанавливая свой вид, окно нарисовало лишь то, о чем ему было известно: свой фон, рамку, заголовок и подчиненные контролы. А вся наша графика улетучилась. Чтобы этого избежать, всю подобную графику принято помещать в обработчик события OnPaint, каковое событие генерируется при перерисовке окна. В этом случае при каждой перерисовке окна программа будет рисовать и наши художества. А для того, чтобы заставить окно принудительно перерисоваться, и используются repaint и invalidaterect. Неплохо бы Вам попробовать немного без VCL попрограммировать, с чистым API, так сказать... много узнаете интересного. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Alx   Панорама   16.08.2004 13:33
BlackShadow   Проще всего было бы через DX... С простым TImage э...   16.08.2004 15:05
Guest   :p2: А тогда, соответственно, вопрос. В двух слов...   16.08.2004 15:20
BlackShadow   В общем случае - нет :) DX - Это уж совсем кратко ...   16.08.2004 16:03
P@sh@   DX - это видимо DirectX, компонент, ага... только ...   16.08.2004 16:18
Alx   Вау какой код. ОГРОМНЫЙ РЕСПЕКТ и человеческое СПА...   16.08.2004 16:38
BlackShadow   Да, вот про DoubleBuffered я и не подумал :( А под...   17.08.2004 11:23
Guest   Так этот код не будет работать? :( Я даже не зна...   17.08.2004 12:40
BlackShadow   DoubleBuffered, это когда форма поддерживает что-т...   17.08.2004 14:08
Alx   Дааа. Нашел я какие-то тексты по изучению DirectX ...   17.08.2004 15:28
BlackShadow   Я тут код написал??? Тот код, что присла P@sh@ вп...   17.08.2004 16:48
P@sh@   DoubleBuffered просто включает режим, когда Canvas...   18.08.2004 6:39
Alx   Люди, а вот посмотрите. В том коде, который написа...   18.08.2004 11:48
BlackShadow   Это не из-зп версии Delphi. Я бы посоветывал тебе ...   18.08.2004 12:31
Alx   А вот если я в коде убираю repaint, то тогда мирца...   18.08.2004 12:44
Бродяжник   procedure TForm1.Timer1Timer(Sender: TObject); beg...   18.08.2004 13:18
Alx   Но так как написал P@sh@ у меня не как не выходит....   18.08.2004 13:27
BlackShadow   А вот это не надо :) Свёрнутое окно не рисует на ...   18.08.2004 13:46
Guest   Ну а почему у меня процедура не вызывается?: proc...   18.08.2004 13:55
Бродяжник   BlackShadow "Свернутое окно не рисует на сво...   18.08.2004 14:01
BlackShadow   Бродяжник, надеюсь к критике ты относишься нормаль...   18.08.2004 14:26
Alx   Спасибо! Вечером, как только доберусь до Делфи...   18.08.2004 14:42
Бродяжник   Нормально отношусь! Ламер я... зато со стажем...   18.08.2004 16:24
BlackShadow   В зависимости от версии переменные могут быть иниц...   18.08.2004 17:01
Бродяжник   Version 1.1.   19.08.2004 8:37
P@sh@   Alx Ну а почему у меня процедура не вызывается? Эт...   19.08.2004 9:14
Alx   Ой! Всё супер! Не мерцает! СПАСИБОЧКИ...   19.08.2004 11:43
BlackShadow   А что jpg нельзя загрузить так же как и bmp? Тогда...   19.08.2004 13:31
P@sh@   Alx насчет bmp и jpeg - я использовал класс TBitm...   25.08.2004 10:20


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 25.07.2025 4:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"