Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2007, 18:49   #1
AnthyShock
 
Регистрация: 23.03.2007
Сообщений: 3
Вопрос Отмена прорисовки линии в Paint пр. кн. мыши. Как? Помогите!!!

Товарищи, подскажите как в простейшем графическом редакторе организовать отмену прорисовки линии и др. фигур нажатием пр. кн. мыши? Т.е. нарисовал не так, не отпуская левую кн. мыши нажал правую и линия и др. фигуры исчезают. ????? Ну как в обычном 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.
AnthyShock вне форума Ответить с цитированием
Старый 23.03.2007, 18:51   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Простейший вариант.
Любым способом запоминать параметры самого последнего рисования и, в случае отмены, повторить его автоматически, но с цветом фона.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вертикальные линии в отчете 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