![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Почему когда идет прорисовка следующим методом
form1.image1.canvas.pixels[x,y]:=clwhite у меня экран (image1) начинает мерцать? ![]() |
#2
|
|||
|
|||
![]() то-есть вот эта процеДУРА:
Код:
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, 25.04.2008 в 11:59. |
#3
|
|||
|
|||
![]() Попытка рисовать на канве компонента, который видим, приводит к тому, что система на вывод каждой точки перерисовывает прямоугольник компонента. Тем более, что отрисовка точками самая медленная графическая операция.
Выход такой. Рисовать надо на канве, которая в этот момент не видна (самое простое - канва 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; |