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

> ВНИМАНИЕ!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

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


Гость






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


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

 





- Текстовая версия 5.05.2024 18:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name