Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.10.2010, 00:40
yanot yanot вне форума
Прохожий
 
Регистрация: 03.10.2010
Сообщения: 7
Репутация: 12
По умолчанию Время отклика OnMouseMove?

Привет.

На досуге делаю пейнт на делфи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  
Старый 03.10.2010, 01:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Возможно там рисуется не точками, а отрезками, тогда разрывов не будет.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 03.10.2010, 02:21
yanot yanot вне форума
Прохожий
 
Регистрация: 03.10.2010
Сообщения: 7
Репутация: 12
По умолчанию

Дело в том что там и другие инструменты: Кисть и Ластик рисуюца без разрывов.


У кисти есть различные стили - т.е тут будет не обычная линия, а нада будет писать свою процедуру

неужели они так заморачивались?)
Ответить с цитированием
  #4  
Старый 03.10.2010, 09:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну вот смотрите, поведение аналогичное паинту:
Код:
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  
Старый 03.10.2010, 16:05
yanot yanot вне форума
Прохожий
 
Регистрация: 03.10.2010
Сообщения: 7
Репутация: 12
По умолчанию

ага, а как быть с кистью - у нее 12 стилей: эллипс, квадрат, и диагональные линии.

т.е так просто 2 соседние точки не соединишь отрезком)

Надо в каждой точке отрезка рисовать форму кисти.


я тоже думаю, что рисуеца отрезками, но мб возможен другой вариант более простой? (:
Ответить с цитированием
  #6  
Старый 07.10.2010, 17:27
Аватар для Zander_driver
Zander_driver Zander_driver вне форума
Прохожий
 
Регистрация: 07.03.2008
Сообщения: 29
Репутация: 10
По умолчанию

А в чем проблема? любая сложная задача разбивается на ряд простых. Пишешь процедуру отрисовки формы кисти в произвольной точке, потом по циклу вызываешь ее для каждой точки отрезка.
Ответить с цитированием
  #7  
Старый 07.10.2010, 20:53
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А ничего не меняется, у Canvas.Pen есть свойство Style вот оно и определяет тип заполнителя линии. Есть уже готовые шаблоны, но можно и свой сбацать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 18.12.2010, 01:51
Beekter Beekter вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 1
Репутация: 10
По умолчанию

Так ничего и не выяснили? У меня тоже пробелма с этим. Делаю арканоид. При рывке мышью получается, что бита не движется непрерывно, а перескакивает. В следствие чего мяч уходит вниз.. Может посоветуете чего???
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:39.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025