![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Так ничего и не выяснили? У меня тоже пробелма с этим. Делаю арканоид. При рывке мышью получается, что бита не движется непрерывно, а перескакивает. В следствие чего мяч уходит вниз.. Может посоветуете чего???
|