Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 154

•  TDictionary Custom Sort  6 215

•  Fast Watermark Sources  6 015

•  3D Designer  8 911

•  Sik Screen Capture  6 350

•  Patch Maker  6 769

•  Айболит (remote control)  6 750

•  ListBox Drag & Drop  5 625

•  Доска для игры Реверси  96 186

•  Графические эффекты  6 970

•  Рисование по маске  6 240

•  Перетаскивание изображений  5 142

•  Canvas Drawing  5 510

•  Рисование Луны  5 212

•  Поворот изображения  4 761

•  Рисование стержней  3 366

•  Paint on Shape  2 620

•  Генератор кроссвордов  3 509

•  Головоломка Paletto  2 798

•  Теорема Монжа об окружностях  3 609

•  Пазл Numbrix  2 365

•  Заборы и коммивояжеры  3 046

•  Игра HIP  2 001

•  Игра Go (Го)  1 926

•  Симулятор лифта  2 283

•  Программа укладки плитки  1 987

•  Генератор лабиринта  2 441

•  Проверка числового ввода  2 123

•  HEX View  2 459

•  Физический маятник  2 078

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



Самый простой способ - воспользоваться функцией 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 © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте