Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как сделать прямоугольник для выделения части картинки для редактирования

Delphi , Графика и Игры , Изображения

Как сделать прямоугольник для выделения части картинки для редактирования

Самый простой способ - воспользоваться функцией Windows API DrawFocusRect. Функция DrawFocusRect использует операцию XOR при рисовании - таким образом вывод прямоугольника дважды с одними и теми же координатами стирает прямоугольник, и прямоугольник всегда будет виден, на фоне какого бы цвета он не выводился.


type
  TForm1 = class(TForm)
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject;
    Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
  private
    {Private declarations}
    Capturing : bool;
    Captured : bool;
    StartPlace : TPoint;
    EndPlace : TPoint;
  public
    {Public declarations}
end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

function MakeRect(Pt1: TPoint; Pt2: TPoint): TRect;
begin
  if pt1.x < pt2.x then
  begin
    Result.Left := pt1.x;
    Result.Right := pt2.x;
  end
  else
  begin
    Result.Left := pt2.x;
    Result.Right := pt1.x;
  end;
  if pt1.y < pt2.y then
  begin
    Result.Top := pt1.y;
    Result.Bottom := pt2.y;
  end
  else
  begin
    Result.Top := pt2.y;
    Result.Bottom := pt1.y;
  end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  if Captured then
    DrawFocusRect(Form1.Canvas.Handle,MakeRect(StartPlace, EndPlace));
  StartPlace.x := X;
  StartPlace.y := Y;
  EndPlace.x := X;
  EndPlace.y := Y;
  DrawFocusRect(Form1.Canvas.Handle, MakeRect(StartPlace, EndPlace));
  Capturing := true;
  Captured := true;
end;

procedure TForm1.FormMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then
  begin
    DrawFocusRect(Form1.Canvas.Handle,MakeRect(StartPlace,EndPlace));
    EndPlace.x := X;
    EndPlace.y := Y;
    DrawFocusRect(Form1.Canvas.Handle,MakeRect(StartPlace,EndPlace));
  end;
end;

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

Перевод контента на русский язык:

Это программное обеспечение на языке Delphi, использующее Windows API для рисования фокусной рамки (рамки с точками) на форме при перемещении мыши. Фокусная рамка используется для выбора части изображения для редактирования.

Вот разбивка кода:

  • Класс TForm1 имеет четыре процедуры: FormMouseDown, FormMouseMove, FormMouseUp и конструктор.
  • Функция MakeRect принимает два объекта TPoint в качестве входных параметров и возвращает объект TRect, представляющий прямоугольник. Она рассчитывает координаты прямоугольника на основе вводных точек.
  • В процедуре FormMouseDown, когда пользователь нажимает кнопку мыши, она проверяет, установлен ли флаг Captured на true. Если это так, она рисует фокусную рамку с помощью функции DrawFocusRect из Windows API. Затем она устанавливает переменные StartPlace, EndPlace, Capturing и Captured.
  • В процедуре FormMouseMove, когда пользователь перемещает мышь при нажатой кнопке, она проверяет, установлен ли флаг Capturing на true. Если это так, она рисует фокусную рамку с помощью функции DrawFocusRect из Windows API. Затем она обновляет переменную EndPlace.
  • В процедуре FormMouseUp, когда пользователь отпускает кнопку мыши, она устанавливает флаг Capturing на false.

Программа использует функцию DrawFocusRect для рисования фокусной рамки на форме. Эта функция использует операцию XOR для рисования рамки, что означает, что рамка всегда будет видна, независимо от цвета фона.

Вот альтернативное решение с использованием встроенных возможностей Delphi:

  • Вместо использования функции DrawFocusRect, можно использовать объект Canvas формы для рисования рамки.
  • Можно использовать свойства MoveTo, LineTo и Pen объекта Canvas для рисования рамки.
  • Также можно использовать класс TPen Delphi для создания объекта пера с дашеной схемой.

Вот пример, как можно модифицировать код для использования объекта Canvas:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  StartPlace.x := X;
  StartPlace.y := Y;
  EndPlace.x := X;
  EndPlace.y := Y;
  Capturing := true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then
  begin
    Canvas.Pen.Style := psDash;
    Canvas.Brush.Color := clWhite;
    Canvas.Rectangle(StartPlace.x, StartPlace.y, EndPlace.x, EndPlace.y);
  end;
end;

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

В этом примере мы используем свойство Pen объекта Canvas для установки стиля пера на дашеный и цвета кисти на белый. Затем мы используем метод Rectangle для рисования рамки. Процедура FormMouseDown модифицируется для инициализации переменных StartPlace и EndPlace, а процедура FormMouseMove модифицируется для обновления переменной EndPlace и рисования рамки. Процедура FormMouseUp остается неизменной.

Это альтернативное решение использует встроенные возможности Delphi для рисования дашеной рамки, что может быть более гибким и легче настраиваемым, чем использование функции DrawFocusRect.

Сделать прямоугольник для выделения части картинки для редактирования можно с помощью функции Windows API DrawFocusRect, которая использует операцию XOR при рисовании.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Изображения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-07 01:00:25/0.01176905632019/0