![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 23.03.2007
Сообщений: 3
|
![]()
Товарищи, подскажите как в простейшем графическом редакторе организовать отмену прорисовки линии и др. фигур нажатием пр. кн. мыши? Т.е. нарисовал не так, не отпуская левую кн. мыши нажал правую и линия и др. фигуры исчезают. ????? Ну как в обычном Paint.
ИСХОДНИК Начало пропускаю! var fmExample: TfmExample; f,g: Byte;//Память вида рисуемой фигуры, толщины пера карандаша i: bool;//Память нажатой клавиши мыши n,m,o,p: integer;//Ячейки памяти для хранения промежуточных значений //координат точек рисуемой фигуры implementation {$R *.DFM} //Обработка выбора пункта меню "Файл-открыть": procedure TfmExample.N11Click(Sender: TObject); begin //Обработка события нажатия левой клавиши мыши: procedure TfmExample.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin //Устанавливаем необходимые для дальнейших действий переменные: i:=true; n:=x;m:=y;o:=x;p:=y; Image1.Canvas.Brush.Color:=ColorDia log2.Color;//Устанавливаем цвет кисти в //соответствии c цветом в диалоге "Кисть-цвет" Image1.Canvas.Brush.Style:=bsSolid;//Устанавливаем стиль кисти для сплошного //закрашивания замкнутых фигур Image1.Canvas.Pen.Width:=g;//Устанавливаем толшину пера (g пиксель) end; //Обработка события отпускания левой клавиши мыши: procedure TfmExample.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin i:=false; Image1.Canvas.Pen.Mode:=pmCopy;//Устанавливаем режим карандаша, когда //цвет линии определяется свойством Color пера if f=1 then begin //Выбран режим рисования линий - изображаем линию от точки //с позиции (n,m) до точки (x,y) Image1.Canvas.MoveTo(n,m); Image1.Canvas.LineTo(x,y); end; if f=2 then begin //Выбран режим рисования прямоугольников - изображаем фигуру //с противолежащими углами в точках (n,m) и (x,y) Image1.Canvas.Rectangle(n,m,x,y); end; if f=3 then begin //Выбран режим рисования элипса - изображаем его вписанным в //прямоугольник с противолежащими углами в точках (n,m) и (x,y) Image1.Canvas.Ellipse(n,m,x,y); end; end; //Обработка события перемещения мыши: procedure TfmExample.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if i=true then begin //Если во время движения мыши нажата левая клавиша - выполняем //постоянное стирание и рисование заново выбранной фигуры, чтобы возникло //впечатление ее перемещения Image1.Canvas.Pen.Color:=ColorDialo g1.Color;//Задаем цвет пера в //соответствии с цветом его диалога Image1.Canvas.Pen.Mode:=pmNotXor;//Устанавливаем режим инверсии //объединения цвета пера и фона операцией XOR if f=1 then begin //Для линии: стираем предыдущую с координатами точек //(n,m) и (o,p), рисуем новую между (n,m) и (x,y) Image1.Canvas.MoveTo(n,m); Image1.Canvas.LineTo(o,p); Image1.Canvas.MoveTo(n,m); Image1.Canvas.LineTo(x,y); end; if f=2 then begin //Для прямоугольника - по аналогии с линией Image1.Canvas.Rectangle(n,m,o,p); Image1.Canvas.Rectangle(n,m,x,y); end; if f=3 then begin //Для элипса - по предыдущей аналогии Image1.Canvas.Ellipse(n,m,o,p); Image1.Canvas.Ellipse(n,m,x,y); end; o:=x;p:=y;//Запоминаем координаты курсора для следующего цикла процедуры end; end; //Обработка события нажатия на кнопку рисования линий: procedure TfmExample.BlClick(Sender: TObject); begin f:=1; end; //Обработка события нажатия на кнопку рисования прямоуголиников: procedure TfmExample.BrClick(Sender: TObject); begin f:=2; end; //Обработка события нажатия на кнопку рисования элипсов: procedure TfmExample.BeClick(Sender: TObject); begin f:=3; end; //По умолчанию - установка режима рисования линий: procedure TfmExample.FormActivate(Sender: TObject); begin f:=1; end; пришлось удалить толщину и цвет линий! (много символов) пропускаю менюшки "сохранить" и др. end; end. |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Простейший вариант.
Любым способом запоминать параметры самого последнего рисования и, в случае отмены, повторить его автоматически, но с цветом фона. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вертикальные линии в отчете | Nikolaeva | БД в Delphi | 3 | 30.07.2019 09:45 |
paint | ben95 | Общие вопросы Delphi | 1 | 30.03.2008 09:27 |
ПОМОГИТЕ С курсором мыши | akaus | Свободное общение | 0 | 16.03.2008 14:36 |
сменить цвет линии в компоненте TChart | Blondinka | Общие вопросы Delphi | 1 | 24.12.2007 15:52 |
Метод постоения линии тренда в Excel | zetrix | Microsoft Office Excel | 0 | 31.10.2006 07:44 |