На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / 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;



Источник: Дельфи. Вокруг да около.


Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz