![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Привет. 
		
	
		
		
		
		
		
	
		
		
	
	
	На досуге делаю пейнт на делфи7) и столкнулся с проблемкой самый простой инструмент Карандаш: Код: 
	procedure TMainForm.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MDown := True;
end;
procedure TMainForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
  if MDown then
    Image1.Canvas.Pixels[x, y] := PenColor;
end;
procedure TMainForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
  if MDown then
    Image1.Canvas.Pixels[x, y] := PenColor;
  MDown := False;
end;Но при быстром движении мышки, рисуюца отдельные точки, но не линия В то время как в ms paint'e карандаш всегда без разрывов Стало быть событие OnMouseMove вызываеца не так часто. Если переписать все это через Win API будет нужный результат? Или можно повысить вызовы OnMouseMove как-то  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Возможно там рисуется не точками, а отрезками, тогда разрывов не будет. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Дело в том что там и другие инструменты: Кисть и Ластик рисуюца без разрывов. 
		
	
		
		
		
		
		
	
		
		
	
	
	У кисти есть различные стили - т.е тут будет не обычная линия, а нада будет писать свою процедуру неужели они так заморачивались?)  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Ну вот смотрите, поведение аналогичное паинту: 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Код: 
	procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PaintBox1.Canvas.Pen.Color := clRed; PaintBox1.Canvas.Pen.Width := 3; PaintBox1.Canvas.PenPos := Point(X,Y); PaintBox1.Canvas.LineTo(X, Y); PenDown := True; end; procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if PenDown then PaintBox1.Canvas.LineTo(X,Y); end; procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PenDown := False end;  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 ага, а как быть с кистью - у нее 12 стилей:   эллипс, квадрат, и диагональные линии. 
		
	
		
		
		
		
		
	
		
		
	
	
	т.е так просто 2 соседние точки не соединишь отрезком) Надо в каждой точке отрезка рисовать форму кисти. я тоже думаю, что рисуеца отрезками, но мб возможен другой вариант более простой? (:  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 А в чем проблема? любая сложная задача разбивается на ряд простых. Пишешь процедуру отрисовки формы кисти в произвольной точке, потом по циклу вызываешь ее для каждой точки отрезка. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 А ничего не меняется, у Canvas.Pen есть свойство Style вот оно и определяет тип заполнителя линии. Есть уже готовые шаблоны, но можно и свой сбацать. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Так ничего и не выяснили? У меня тоже пробелма с этим. Делаю арканоид. При рывке мышью получается, что бита не движется непрерывно, а перескакивает. В следствие чего мяч уходит вниз.. Может посоветуете чего??? 
		
	
		
		
		
		
		
	
		
		
	
	
	 |