Валерий Борисок - Delphi. Трюки и эффекты

Тут можно читать онлайн Валерий Борисок - Delphi. Трюки и эффекты - бесплатно ознакомительный отрывок. Жанр: Программы. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Delphi. Трюки и эффекты
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валерий Борисок - Delphi. Трюки и эффекты краткое содержание

Delphi. Трюки и эффекты - описание и краткое содержание, автор Валерий Борисок, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

«Delphi. Трюки и эффекты», как и все издания данной серии, адресована тем, кто хочет научиться делать с помощью уже знакомых программных пакетов новые, интересные вещи. В первой части книги многое говорится о среде разработки Delphi (самых последних версий) и программировании на языке Object Pascal. Благодаря этому издание подходит и новичкам, и начинающим программистам. Вторая (основная) часть книги описывает удивительные возможности, скрытые в языке, и на примерах учит читателя программистским фокусам – от «мышек-невидимок» и «непослушных окон» до воспроизведения МРЗ и управления офисными программами Word и Excel из приложений Delphi. Купив эту книгу, вы пройдете непростой путь к вершинам программистского мастерства весело и интересно.

Delphi. Трюки и эффекты - читать онлайн бесплатно ознакомительный отрывок

Delphi. Трюки и эффекты - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Валерий Борисок
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

«Дырявая» форма

Этот простейший пример сомнительной полезности предназначен для знакомства с операциями над регионами. Здесь применяется только одна из возможных операций – операция XOR для формирования «дырок» в форме (рис. 1.8).

Рис. 1.8. «Дырки» в форме

На рис. 1.8 явно видно, как в «дырках» просвечивается одно из окон среды разработки Delphi. При этом сообщения от мыши, когда указатель находится над «дыркой», получает не наше окно, а те, часть которых видна в «дырке». Программный код, приводящий к созданию формы столь необычного вида, приведен в листинге 1.17.

...

Листинг 1.17.

Создание «дырок» в форме

procedure TfrmHole.FormCreate(Sender: TObject);

var

rgn1, rgn2: HRGN; //"Регионы-дырки" в форме

formRgn: HRGN;

begin

//Создание региона для формы

formRgn := CreateRectRgn(0, 0, Width – 1, Height – 1);

//Создание регионов для «дырок»

rgn1 := CreateEllipticRgn(10, 10, 100, 50);

rgn2 := CreateRoundRectRgn(10, 60, 200, 90, 10, 10);

//Создание «дырок» в регионе формы

CombineRgn(formRgn, formRgn, rgn1, RGN_XOR);

CombineRgn(formRgn, formRgn, rgn2, RGN_XOR);

SetWindowRgn(Handle, formRgn, True);

//Регионы для «дырок» больше не нужны

DeleteObject(rgn1);

DeleteObject(rgn2);

end;

Сложная комбинация регионов

Теперь пришла очередь более сложного, но и гораздо более интересного примера. Последовательное применение нескольких операций над регионами приводит к созданию формы, показанной на рис. 1.9 (белое пространство – это вырезанные части формы).

Рис. 1.9. Сложная комбинация регионов

Процедура, в которой производятся операции над регионами, приведена в листинге 1.18.

...

Листинг 1.18.

Сложная комбинация регионов

procedure TfrmManyRgn.FormCreate(Sender: TObject);

var

r1, r2, r3, r4, r5, r6, r7: HRGN;

formRgn: HRGN;

butRgn: HRGN;

begin

//Создание регионов

r1 := CreateRoundRectRgn(100, 0, 700, 400, 40, 40);

r2 := CreateRectRgn(280, 0, 300, 399);

r3 := CreateRectRgn(500, 0, 520, 399);

r4 := CreateEllipticRgn(140, 40, 240, 140);

r5 := CreateEllipticRgn(0, 300, 200, 500);

r6 := CreateEllipticRgn(500, 40, 600, 140);

r7 := CreateEllipticRgn(540, 40, 640, 140);

//Комбинирование

//..разрезы в основном регионе

CombineRgn(r1, r1, r2, RGN_XOR);

CombineRgn(r1, r1, r3, RGN_XOR);

//..круглая «дырка» в правой стороне

CombineRgn(r1, r1, r4, RGN_XOR);

//..присоединение круга в левой нижней части

CombineRgn(r1, r1, r5, RGN_OR);

//..создание «дырки» в форме полумесяца

CombineRgn(r7, r7, r6, RGN_DIFF);

CombineRgn(r1, r1, r7, RGN_XOR);

formRgn := CreateRectRgn(0, 0, 0, 0);

CombineRgn(formRgn, r1, 0, RGN_COPY);

DeleteObject(r1);

DeleteObject(r2);

DeleteObject(r3);

DeleteObject(r4);

DeleteObject(r5);

DeleteObject(r6);

DeleteObject(r7);

//Создание круглой кнопки закрытия

butRgn := CreateEllipticRgn(50, 50, 150, 150);

SetWindowRgn(Button1.Handle, butRgn, False);

SetWindowRgn(Handle, formRgn, True);

end;

В листинге подписано, какие операции для создания каких элементов итогового региона предназначены. В операциях участвуют семь регионов. Расположение используемых в операциях регионов показано на рис. 1.10.

Рис. 1.10. Элементарные регионы, используемые для получения формы на рис. 1.9.

Использование шаблона

Предыдущий пример наглядно демонстрирует мощь функции CombineRgn при построении регионов сложной формы. Однако существует огромное количество предметов, контуры которых крайне сложно повторить, комбинируя простые регионы. Построение многоугольных регионов с большим количеством точек может в этом случае нас выручить, но ведь это крайне нудно и утомительно.

Если есть изображение предмета, контуры которого должны совпадать с контурами региона, то гораздо проще при построении региона обрабатывать само изображение, отбирая все точки, для которых выполняется определенное условие. Изображение и будет тем шаблоном, по которому «вырезается» регион нужной формы.

Рассмотрим простейший пример: есть монохромное изображение, каждая точка которого должна попасть в результирующий регион, если ее цвет не совпадает с заданным цветом фона. При этом изображение анализируется по так называемым «скан-линиям», то есть построчно. Из подряд идущих точек не фонового цвета формируются прямоугольные регионы, которые объединяются с результирующим регионом. Пример возможного шаблона приведен на рис. 1.11.

Рис. 1.11. Пример растрового изображения-шаблона

Функция построения региона указанным способом приведена в листинге 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. Немного о перемещении окон

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

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

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валерий Борисок читать все книги автора по порядку

Валерий Борисок - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Delphi. Трюки и эффекты отзывы


Отзывы читателей о книге Delphi. Трюки и эффекты, автор: Валерий Борисок. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x