![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |