БОЛЬШОЙ FAQ ПО 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;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Видеокурс ВЗЛОМ