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

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

•  TDictionary Custom Sort  6 339

•  Fast Watermark Sources  6 128

•  3D Designer  9 058

•  Sik Screen Capture  6 450

•  Patch Maker  6 866

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

•  ListBox Drag & Drop  5 727

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

•  Графические эффекты  7 068

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

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

•  Canvas Drawing  5 613

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

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

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

•  Paint on Shape  2 708

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

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

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

•  Пазл Numbrix  2 417

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

•  Игра HIP  2 058

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

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

•  Программа укладки плитки  2 045

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

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

•  HEX View  2 517

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

 
скрыть

  Форум  

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

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



Delphi Sources

Рисование прямоугольника на изображении



Билл Гейтс помер и попал на небеса, а там вместо апостола Петра машину с Windows поставили. И, значит, в окне на мониторе надпись: "Уважаемый Билл, за Ваши заслуги перед человечеством мы разрешаем Вам самому выбрать, куда Вы попадете - в ад или в рай Выбирайте - в ад или в рай?". И ниже три кнопки с вариантами ответов: "Yes, No,Cancel"...

Я хочу узнать как можно позволить пользователю нарисовать на изображении прямоугольник, чтобы в дальнейшем выбранную часть, к примеру, масштабировать. Я хотел бы достичь такого же эффекта, как в других программах, где с помощью мышки можно при нажатой левой кнопке мыши выделить какую-либо область изображения.

Создайте логическое поле ImageMouse, для рисования прямоугольника ImageRect используйте метод холста drawfocusrect. Следующий код работает одинаково для левой и правой кнопок мыши:


procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ImageMouse := True;
  ImageRect.Left := X;
  ImageRect.Top := Y;
  ImageRect.Right := X;
  ImageRect.Bottom := Y;
  Image1.Canvas.DrawFocusRect(ImageRect);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:
  Integer);
var
  NewRect: tRect;
begin
  if ImageMouse then
    if (X > ImageRect.Left) and (Y > ImageRect.Top) then
    begin
      {Восстанавливаем фон}
      Image1.Canvas.DrawFocusRect(ImageRect);
      {Меняем прямоугольник}
      ImageRect.Right := X;
      ImageRect.Bottom := Y;
      {Рисуем прямоугольник фокуса}
      Image1.Canvas.DrawFocusRect(ImageRect);
    end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  {Восстанавливаем фон}
  if ImageMouse then
  begin
    ImageRect.Right := X;
    ImageRect.Bottom := Y;
    Image1.Canvas.DrawFocusRect(ImageRect);
    ImageMouse := False;
    Image1.Canvas.CopyRect(Image1.Canvas.ClipRect,
      Image1.Canvas, ImageRect)
  end;
end;





Похожие по теме исходники

Рисование кривой звука

Рисование математических формул

Рисование компаса

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

 

Рисование Луны

Рисование по маске




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

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