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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.04.2008, 12:01
Xan_naX Xan_naX вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 2
Репутация: 10
Печаль Диплом горит! Проблемы с анимацией!

Почему когда идет прорисовка следующим методом

form1.image1.canvas.pixels[x,y]:=clwhite


у меня экран (image1) начинает мерцать?


Ответить с цитированием
  #2  
Старый 23.04.2008, 12:30
Xan_naX Xan_naX вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 2
Репутация: 10
Печаль

то-есть вот эта процеДУРА:

Код:
procedure TForm1.Button6Click(Sender: TObject); 
 
  var sknn, skm:integer; 
       sknns:string; 
    begin 
      skm:=strtoint(edit5.Text); 
      sknn:= strtoint(edit3.Text); 
      form1.Label5.Caption:=sknns; 
      if m<-200 then form1.Timer1.Enabled:=false else begin 
    randomize; 
    for n:=1 to nn do begin 
      xx:=random(form1.Image1.ClientWidth-m) ; 
      yy:=random(form1.Image1.ClientHeight); 
      form1.Image1.Canvas.Pixels[xx,yy]:=clwhite; 
    end; 
    end; 
     nn:=(nn+5)+sknn; 
     m:=(m-4)-skm; 
     label3.Caption:=timetostr(time-t) ; 
    end;
Admin: Используем теги!

Почему экран мерцает?

Последний раз редактировалось Admin, 25.04.2008 в 11:59.
Ответить с цитированием
  #3  
Старый 25.04.2008, 10:47
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Попытка рисовать на канве компонента, который видим, приводит к тому, что система на вывод каждой точки перерисовывает прямоугольник компонента. Тем более, что отрисовка точками самая медленная графическая операция.
Выход такой. Рисовать надо на канве, которая в этот момент не видна (самое простое - канва bitmap). Затем нарисованное скопировать на видимую канву.
Примерно так:
Код:
procedure TForm1.Button6Click(Sender: TObject); 
var
  BM : TBitMap;
begin
  BM := TBitMap.Create;
  BM.Width := Image1.Width;
  BM.Height := Image1.Height;

  with BM.Canvas do begin
    Brush.Color := Image1.Color;
    ...
    for n:=1 to nn do begin
      xx:=random(form1.Image1.ClientWidth-m) ;
      yy:=random(form1.Image1.ClientHeight);
      Pixels[xx,yy]:=clwhite;
    end;
    ...
  end;
  Form1.Image1.Canvas.CopyRect(Image1.ClientRect, BM.Canvas, Image1.ClientRect);
  BM.Free;
end;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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