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