IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Рисование в Delphi, С помощью мыши
Shmaniche
сообщение 9.12.2012 17:44
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Надо нарисовать элипс. Самое простое что пришло в голову это поместить на форму PaintBox и написать:

Код

var
  Form1: TForm1;
  MouseButtonDown: Boolean= false;
  StartX, StartY: Integer;

implementation


procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
MouseButtonDown:=true;
StartX:=X;
StartY:=Y;
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Form1.Caption:=Format ('Координаты: x=%d, y=%d ' , [X, Y]); // Координаты в заголовке.

if  MouseButtonDown=true then
PaintBox1.Canvas.Ellipse(StartX, Starty, X, Y);

end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
MouseButtonDown:=false;
end;



Но от элипса остается след, если нажатую мышку двигать назад. Как избавиться от этого следа?

Сообщение отредактировано: Shmaniche - 9.12.2012 17:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Shmaniche
сообщение 10.12.2012 18:51
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Задумал добавить возможность рисовать мышкой простую линию при нажатой клавиши Alt:
Код

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

if (ssAlt in Shift)  
and (Button=mbLeft)
and not (ssShift in Shift)
then Line:=true
else Line:=false;

StartX:=X; StartY:=Y;
EndX:=X; EndY:=Y;
MouseButtonDown:=true; // Кнопка мыши нажата.
end;



procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
with Canvas do
begin
  Pen.Mode:=pmNotXor; // Этот режим помогает избавиться от следа при рисовании фигуры.
  Pen.Style:=psSolid;
  Pen.Width:=2;
  Brush.Style:=bsSolid;
end;



if (MouseButtonDown) and (Line) then // Если Если нажата клавиша мыши, и Line=true, то...
begin
  Canvas.MoveTo(StartX, StartY); // Рисуем фигуру откуда кликнули.
  EndX:=X; EndY:=Y; // Фиксируем конечные координаты,
  Canvas.LineTo(EndX, EndY); // Рисуем отрезок.
end;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
MouseButtonDown:=false;  // Кнопка мыши отпущена.
end;



Но при рисовании линии остается ненужный след sad.gif, и даже ” Pen.Mode:=pmNotXor;” не помогает sad.gif, только если "Repaint" применить, но он удаляет раньше нарисованные линии. sad.gif Как можно решить проблему со следом от линии? Как его стирать?


Сообщение отредактировано: Shmaniche - 10.12.2012 18:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Shmaniche   Рисование в Delphi   9.12.2012 17:44
TarasBer   Стирать след, оставленный на предыдущем кадре.   9.12.2012 20:34
Shmaniche   Стирать след, оставленный на предыдущем кадре. ...   10.12.2012 5:36
Shmaniche   Дорабоотал прежний код, чтобы можно было рисовать ...   10.12.2012 8:22
TarasBer   > if (MouseButtonDown=true) and (Rectangle=true...   10.12.2012 9:26
Shmaniche   TarasBer Не согласен, что условия выписаны напра...   10.12.2012 10:34
TarasBer   ответ неверный рисовать надо только тогда, когда к...   10.12.2012 10:52
Shmaniche   TaraBer Так, похоже разрулил :) : if (MouseB...   10.12.2012 11:03
TarasBer   > Так, похоже разрулил Теперь верно. > В...   10.12.2012 11:18
Shmaniche   Лови событие OnPaint у формы и в нём рисуй фигуру...   10.12.2012 13:10
TarasBer   А, тебе не нравится, что остаётся только последняя...   10.12.2012 13:22
Shmaniche   Ладно, с перерисовкой как-нибудь потом разберусь. ...   10.12.2012 13:38
Shmaniche   Ха-ха! Методом тыка нашел режим карандаша, кот...   10.12.2012 16:44
Shmaniche   Задумал добавить возможность рисовать мышкой прост...   10.12.2012 18:51
TarasBer   Да так же - брать и явно стирать.   11.12.2012 9:37
Shmaniche   TaraBer Можешь продемонстрировать? :)   11.12.2012 9:52
TarasBer   Да так же, как ты эллипсы явно стирал. Что такое x...   11.12.2012 10:26
Shmaniche   Да так же, как ты эллипсы явно стирал. Элипсы я...   11.12.2012 12:03
TarasBer   Эллипс ты стираешь не выбором режима, а именно тем...   11.12.2012 12:04
Shmaniche   Эллипс ты стираешь не выбором режима, а именно те...   11.12.2012 12:16
TarasBer   Похоже понял! :) Всё наоборот. Ты повторно р...   11.12.2012 14:05
Shmaniche   Поразмыслив придумал как из эллипса сделать окружн...   21.12.2012 15:56


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.06.2025 21:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"