Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Упреждающее объявление процедур и функций (forward)






Для реализации алгоритмов с косвенной рекурсией в языке Delphi предусмотрена специальная директива предварительного описания подпрограмм forward. Предварительное описание состоит из заголовка подпрограммы и следующего за ним зарезервированного слова forward, например:

procedure Proc; forward;

function Func(X: Integer): Boolean; forward;

Заметим, что после такого первичного описания в полном описании процедуры или функции можно не указывать список формальных параметров и тип возвращаемого значения (для функции). Например:

procedure Proc2(< формальные параметры>); forward;

 

procedure Proc1;

begin

...

Proc2(< фактические параметры>);

...

end;

 

procedure Proc2; // Список формальных параметров опущен

begin

...

Proc1;

...

end;

 

begin

...

Proc1;

...

end.

 

Лекция 16

Графические построения

Основные понятия компьютерной графики

Фактически во всех приложениях для операционной системы Windows используется графический интерфейс пользователя (GUI – graphic user interface). При этом экран компьютера работает в графическом режиме. Он разбивается на отдельные точки, называемые пикселами (от picture element). Каждая точка может окрашиваться в тот или иной цвет.

Общее число точек, на которые разбивается весь экран, может меняться и зависит от имеющегося объема видеопамяти компьютера и возможностей используемого монитора. Число точек по горизонтали и вертикали экрана называется его разрешением. Например, используются разрешения 800х600, 1024х768 и другие. Почему число точек по вертикали меньше, чем по горизонтали? Дело в том, что традиционно соотношение сторон киноэкрана (неширокоформатного), телевизионного кадра, кадра на фотопленке или в цифровом фотоаппарате – 4: 3. Такое же соотношение сохраняется и на компьютерных экранах.

На каждый пиксел изображения операционная система отводит определенный объем видеопамяти. В настройках Windows этот параметр называется " цветовая глубина". Цветовая глубина может составлять 16, 24, 32 бита. Чем выше цветовая глубина, тем большее количество оттенков цвета может принимать каждая точка. При 16-битной цветовой глубине количество оттенков составляет 216=65536, а при глубине в 24 бита – уже 16777216. Подавляющее большинство людей просто не различает свыше 16 миллионов оттенков, поэтому дальнейшее наращивание цветовой глубины фактически бессмысленно.

А каким образом разрешение зависит от типа применяемого монитора? Для мониторов на электронно-лучевой трубке важнейшим параметром является частота кадровой развертки, показывающая, сколько раз в секунду электронный луч перерисовывает картинку на экране. Чем выше частота кадровой развертки, тем меньше мерцание изображение и тем меньше устают глаза. Рекомендуется работать при частоте не ниже 85Гц, а еще лучше – 100Гц. Мониторы поддерживают разную максимальную частоту в зависимости от разрешения. Это и понятно – чем выше разрешение, тем больше точек надо перерисовывать. Например, монитор может обеспечивать частоту 100Гц при разрешении 800х600 и 75Гц – при разрешении 1024х768.

Мониторы на основе ТFТ-матрицы (" плоские") имеют фиксированное разрешение, так как в них каждый пиксел является физически изготовленным светодиодом. Это крупный недостаток таких мониторов – при работе с ними разрешение можно только понизить, но в результате качество изображения резко ухудшится.

Цвет каждого пиксела задается смешением в заданных пропорциях трех базовых цветов – красного (Red), зеленого (Green) и синего (Blue) (RGB-модель). При R=0, G=0, B=0 получается черный цвет, а при R=255, G=255, B=255 – белый. Значения, при которых R=G=B, соответствуют оттенкам серого.

Еще одним важнейшим параметром изображения является линейное разрешение, измеряемое в количестве пикселов, приходящихся на один дюйм изображения (dpi – dots per inch). Применительно к компьютерному экрану линейное разрешение имеет " виртуальный" характер – оно не зависит от размера экрана, а определяется лишь возможностями операционной системы. Windows поддерживает экранные разрешения в 72 и 96dpi. Вообще говоря, это низкие разрешения, но они достаточны для экранного изображения. А вот при выводе на бумагу необходимо разрешение не ниже 300dpi.

16.2 Получение сведений о режимах экрана.
Эффекты прозрачности

Очевидно, что, прежде чем программировать графические задачи, необходимо знать текущее разрешение экрана, цветовую глубину и другие параметры. Для этого в каждом приложении на Delphi существует системная переменная-объект Screen типа TScreen. Объявлять ее не надо, это делается автоматически.

Рассмотрим основные свойства объекта TScreen:

 

Width – ширина экрана в пикселах;

Height – высота экрана в пикселах;

DesktopWidth – ширина виртуального рабочего стола в пикселах;

DesktopHeight – высота виртуального рабочего стола в пикселах;

PixelsPerInch – разрешение экрана, точек на дюйм.

 

Чем отличаются размеры экрана от размеров виртуального рабочего стола? Если на компьютере установлен один монитор, то ничем. Если же видеокарта поддерживает несколько устройств (например, монитор и телевизор, подключаемый к выходу TV-out), то Windows создает так называемый виртуальный рабочий стол, часть которого может отображаться на одном мониторе, а часть – на другом. Размеры такого виртуального стола в пикселах могут в два раза превышать размеры экрана.

Следующий фрагмент программы при нажатии на кнопку Button1 выводит в объект Label1 информацию о текущем состоянии экрана:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.Caption: =IntToStr(Screen.Width)+'x'+

IntToStr(Screen.Height)+', '+

IntToStr(Screen.PixelsPerInch)+'dpi'

end;

 

Объект " форма" (типа TForm) тоже имеет ряд свойств, относящихся к графике. Наиболее интересны из них те, что обеспечивают эффекты прозрачности всей формы или отдельных ее элементов. Следует иметь в виду, что эти эффекты работают только в операционных системах Windows2000/XP. При этом используется так называемый альфа-канал – дополнительный " невидимый" цветовой канал в дополнение к базовым красному, зеленому и синему каналам.

Свойство AlphaBlend (Boolean) включает/выключает режим прозрачности всей формы, а свойство AlphaBlendValue (BYTE) задает уровень прозрачности. При AlphaBlendValue=255 форма полностью непрозрачна и отображается, как обычно, а при AlphaBlendValue=0 форма вообще невидима.

Напишем следующий обработчик события создания формы OnActivate:

 

procedure TForm1.FormActivate(Sender: TObject);

 

var i: byte;

 

begin

AlphaBlend: =True;

for i: =0 to 127 do

begin

AlphaBlendValue: =i*2;

Repaint

end

end;

 

Предварительно установим у формы значение AlphaBlendValue=0. После запуска программы будет наблюдаться интересный эффект постепенного " проявления" формы. Аналогично можно сделать постепенное " выцветание" формы при завершении работы программы.

Чтобы сделать прозрачным отдельный элемент на форме, следует использовать свойства TransparentColor (Boolean) и TransparentColorValue (TColor). Если TransparentColor=True, то все элементы на форме, имеющие цвет, равный заданному в свойстве TransparentColorValue, будут прозрачными.

Создадим форму с круглым прозрачным окном посередине. Поместим на форму компонент Shape с палитры компонентов Additional и установим его свойство Shape в значение stCircle. Разместим полученную окружность в центре формы и поменяем ее цвет (свойство Brush.Color) на clSkyBlue. В свойствах формы зададим TransparentColor=True и TransparentColorValue=clSkyBlue. Запустим приложение и получим очень интересный эффект (Рис. 1).

 

Рис. 1. Форма с прозрачной областью.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.