Показать сообщение отдельно
  #5  
Старый 26.09.2012, 04:40
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от serenberg
Помогите пожалуйста!
в компонент timage загружена картинка
необходимо сделать аналог прямоугольного выделения фрагмента изображения (как в paint) линией и с запоминанием начальной и конечной точек координат данного выделения.
Пробуй так:
Код:
var
  SelRect: TRect; // В эту переменную запоминаются координаты выделенного прямоугольника

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    SelRect := Rect(X, Y, X, Y);
    Image1.Canvas.Pen.Style := psDashDot;
    Image1.Canvas.Pen.Mode := pmNot;
    Image1.Canvas.Brush.Style := bsClear;
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in Shift then
  begin
    Image1.Canvas.Rectangle(SelRect);
    SelRect.BottomRight := Point(X, Y);
    Image1.Canvas.Rectangle(SelRect);
  end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    Image1.Canvas.Rectangle(SelRect);
    SelRect.BottomRight := Point(X, Y);

    Image1.Canvas.Pen.Style := psSolid;
    Image1.Canvas.Pen.Mode := pmCopy;
    Image1.Canvas.Rectangle(SelRect);
    Image1.Canvas.Brush.Style := bsSolid;
  end;
end;
Ответить с цитированием