Delphi. Трюки и эффекты. Александр Чиртик. Читать онлайн. Newlib. NEWLIB.NET

Автор: Александр Чиртик
Издательство:
Серия:
Жанр произведения: Программы
Год издания: 0
isbn: 978-5-911-80219-6
Скачать книгу
региона указанным способом приведена в листинге 1.19.

Листинг 1.19. Построение региона по шаблону

      function RegionFromPicture(pict: TPicture; backcolor: TColor):

      HRGN;

      var

      rgn, resRgn: HRGN;

      x, y, xFirst: Integer;

      begin

      resRgn := CreateRectRgn(0, 0, 0, 0); //Результирующий регион

      //Анализируем каждую скан-линию рисунка (по горизонтали)

      for y := 0 to pict.Height – 1 do

      begin

      x := 0;

      while x < pict.Width do

      begin

      if (pict.Bitmap.Canvas.Pixels[x, y] <> backcolor) then

      begin

      xFirst := x;

      Inc(x);

      //Определим часть линии, окрашенной не цветом фона

      while (x < pict.Width) and

      (pict.Bitmap.Canvas.Pixels[x, y] <> backcolor) do Inc(x);

      //Создаем регион для части скан-линии и добавляем его

      //к результурующему региону

      rgn := CreateRectRgn(xFirst, y, x–1, y+1);

      CombineRgn(resRgn, resRgn, rgn, RGN_OR);

      DeleteObject(rgn);

      end;

      Inc(x);

      end;

      end;

      RegionFromPicture := resRgn;

      end;

      Загрузка изображения-шаблона и создание региона может происходить, например, при создании формы следующим образом (листинг 1.20).

Листинг 1.20. Создание региона для области отсечения формы

      procedure TfrmTemplate.FormCreate(Sender: TObject);

      var

      pict: TPicture;

      begin

      //Загрузка изображения и создание региона (считаем, что

      //цвет фона – белый)

      pict := TPicture.Create;

      pict.LoadFromFile('back.bmp');

      SetWindowRgn(Handle, RegionFromPicture(pict, RGB(255,255,255)),

      True);

      end;

      В листинге 1.20 подразумевается использование файла back.bmp, находящегося в той же папке, что и файл приложения. Цвет фона – белый. Таким образом, если шаблон, показанный на рис. 1.11, хранится в файле back. bmp, то получим форму, как на рис. 1.12.

      Рис. 1.12. Результат построения региона по шаблону

      1.5. Немного о перемещении окон

      Кроме придания необычного вида окнам приложения способами, рассмотренными выше, можно также несколько разнообразить интерфейс за счет оригинального использования перемещения окон. Далее показано, как самостоятельно назначать области, за которые можно перетаскивать (и не только) форму. Еще один пример демонстрирует способ дать пользователю возможность самомузадавать расположение элементов управления на форме.

      Перемещение за клиентскую область

      Здесь на конкретном примере (перемещение формы за любую точку клиентской области) продемонстрировано, как можно самостоятельно определять положение некоторых важных элементов окна. Под элементами окна здесь подразумеваются:

      • строка заголовка (не только предназначена для отображения текста заголовка, но и служит областью захвата при перемещении окна мышью);

      • границы окна (при щелчке кнопкой мыши на верхней, нижней, правой и левой границе можно изменять размер окна, если, правда, стиль окна это допускает);

      • четыре угла окна (предназначены для изменения размера окна при помощи мыши);

      • системные кнопки – закрытия, разворачивания, сворачивания, контекстной справки (обычно расположены в строке заголовка окна);

      • полосы прокрутки – горизонтальная и вертикальная;

      •