Идёт загрузка страницы...

htp://aptem.net.ru





/|\АРТЕМ.NET.RU /|\ - Портал для программистов и не только: Delphi Visual Basic BORLAND С++ PERL PHP HTML

Delphi 1

Рисование прямоугольника на изображении

Я хочу узнать как можно позволить пользователю нарисовать на изображении прямоугольник, чтобы в дальнейшем выбранную часть, к примеру, масштабировать. Я хотел бы достичь такого же эффекта, как в других программах, где с помощью мышки можно при нажатой левой кнопке мыши выделить какую-либо область изображения.

Создайте логическое поле ImageMouse, для рисования прямоугольника ImageRect используйте метод холста drawfocusrect. Следующий код работает одинаково для левой и правой кнопок мыши:


   
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ImageMouse := True;
ImageRect.Left := X;
ImageRect.Top  := Y;
ImageRect.Right := X;
ImageRect.Bottom  := Y;
Image1.Canvas.DrawFocusRect(ImageRect);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
Var
NewRect : tRect;
begin
if ImageMouse then
If (X > ImageRect.Left) AND (Y > ImageRect.Top) then  begin
{Восстанавливаем фон}
Image1.Canvas.DrawFocusRect(ImageRect);
{Меняем прямоугольник}
ImageRect.Right := X;
ImageRect.Bottom := Y;
{Рисуем прямоугольник фокуса}
Image1.Canvas.DrawFocusRect(ImageRect);
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
{Восстанавливаем фон}
if ImageMouse then begin
ImageRect.Right := X;
ImageRect.Bottom := Y;
Image1.Canvas.DrawFocusRect(ImageRect);
ImageMouse := False;
Image1.Canvas.CopyRect(Image1.Canvas.ClipRect,
Image1.Canvas,ImageRect)
end;
end;

[000672]