Студопедия  
Главная страница | Контакты | Случайная страница

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

II. Пример.

Читайте также:
  1. Ветвящийся алгоритм. Графические блоки для описания ветвящегося алгоритма. Привести пример.
  2. Методы и способы борьбы с загрязнениями окружающей среды и биосферы. Назовите математические методы, применяемые в экологии. Привести пример.
  3. Например.
  4. Например.
  5. Предложите, на каких этапах желательно организовать когнитивные структуры, приведите пример.
  6. ПРИМЕР.
  7. ПРИМЕР.
  8. Пример.
  9. Пример.

I. Введение.

Программирование графики в Windows является достаточно сложным и трудоемким процессом, но в Delphi имеются классы, существенно упрощающие использование графических средств Windows:

- TCanvas – для дисплейного контекста;

- TFont – для шрифта;

- TPen – для пера;

- TBrush – для кисти.

Связанные с этими классами объекты автоматически создаются для всех видимых элементов и становятся доступны программе через свойства Canvas, Font, Pen, Brush.

Кроме перечисленных классов для работы с изображениями, в Delphi имеются классы: TPicture (контейнер для изображения); TGraphic (базовый класс для графических объектов-изображений); TBitmap (растровое изображение); TIcon (пиктограмма); TMetaFile (метафайл). На основе названных классов создаются другие классы. К графическим возможностям можно также отнести построение диаграмм.

Система Delphi предоставляет возможности рисования на поверхности компонентов в процессе выполнения приложения и создания изображений при конструировании приложения.

 

 

II. Пример.

 

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

 

type

TForm1 = class(TForm)

procedure FormResize(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.FormResize(Sender: TObject);

var w, h, wm, hm: integer;

begin

Form1.Refresh; {Устанавливает в канве умалчиваемые шрифт, перо и кисть}

wm:=Form1.ClientWidth; w:=wm div 8;

hm:=Form1.ClientHeight; h:=hm div 10;

with Form1.Canvas do

Begin

//Небо

Brush.Color:=clBlue;

Brush.Style:=bsDiagCross; {Сетка}

Rectangle(0,0,wm,hm); {Вычерчивает и заполняет прямоугольник}

//Солнце

Brush.Color:=clYellow;

Brush.Style:=bsSolid; {Сплошная заливка}

Pen.Color:=clYellow;

Ellipse(w,2*h,2*w,2*h+w); {Чертит эллипс в охватывающем прямоугольнике}

//Домик

Brush.Color:=clGray; {Серый}

Brush.Style:=bsSolid;

Pen.Color:=clRed;

Rectangle(2*w,hm-5*h,5*w,hm-h);

Polygon([Point(2*w,hm-5*h), Point(round(3.5*w), hm-7*h),

Point(5*w,hm-5*h), Point(2*w, hm-5*h)]);

Brush.Color:=clWhite;

Rectangle(3*w,hm-4*h,4*w,hm-2*h);

//Надпись

Font.Color:=clRed;

Font.Style:=[fsUnderLine,fsBold];

Font.Height:=round(h/3);

Canvas.TextOut(2*w,hm-5*h,'ЛГПУ');

end;

end;

end.

Для использования мультимедийных возможностей и средств компьютера в Delphi используются компоненты Animate (палитра Win32) и MediaPlayer (палитра System).

Под термином анимация понимается перемещение и изменение формы различных изображений на экране.

Компонент Animate предназначен для создания простой анимации и позволяет проигрывать файлы AVI (Audio-Video Interleaved – аудио- и видео-смесь). Компонент MediaPlayer представляет собой более сложный много функциональный компонент. Он обеспечивает воспроизведение аудио- и видео-файлов, а также управление соответствующими устройствами.

Для воспроизведения стандартного звука с помощью встроенного динамика можно использовать процедуру Beep модуля SysUtils.

Простейших анимационные фрагменты можно создать непосредственно средствами Delphi. Существует большое количество анимационных алгоритмов, различающихся способами вывода движущихся объектов, источниками поступления данных об изображении и т.д. Простейший алгоритм включает следующие шаги:

· выводится рисунок определенным цветом;

· рисунок формируется на том же месте цветом, совпадающим с цветом фона, что выглядит как исчезновение рисунка;

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

Если объект выводится с небольшими смещениями, то создается иллюзия его движения.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Timer1: TTimer;

DateTimePicker1: TDateTimePicker;

procedure FormPaint(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

Procedure ArrowDraw(DrawColor: TColor);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

CEnterX, CEnterY, Radius: Integer;

HourArrow, MinArrow, SecArrow: Integer;

Hour, Min, Sec, MSec: Word;

HourAngle, MinAngle, SecAngle: Real;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.FormPaint(Sender: TObject);

var i: integer;

begin

//Изображение циферблата

With Form1.Canvas do

Begin

//Окружность

Pen.Color:=clBlue;

Pen.Width:=4;

Brush.Color:=clWhite;

Ellipse(20,20,20+2*Radius, 20+2*Radius);

Pen.Width:=2;

//Риски

For i:=0 To 11 do

Begin

MoveTo(CenterX+Round((Radius-9)*sin(i/6*pi)),

CenterX-Round((Radius-9)*cos(i/6*pi)));

LineTo(CenterX+Round((Radius)*sin(i/6*pi)),

CenterX-Round((Radius)*cos(i/6*pi)));

End;

//Цифры

Font.Height:=10;

Font.Color:=clBlack;

Brush.Color:=Form1.Color;

TextOut(CenterX-TextWidth('12') div 2, CenterY-Radius-TextHeight('12')-5,'12');

TextOut(CenterX+Radius+5, CenterY-TextHeight('3'),'3');

TextOut(CenterX-TextWidth('6') div 2, CenterY+Radius+5,'6');

TextOut(CenterX-Radius-TextWidth('9')-5, CenterY-TextHeight('9'),'9');

// Надпись

Font.Height:=32;

Brush.Color:=clWhite;

TextOut(CenterX-26,CenterY+Radius-100,'ПО-2')

end;

 

end;

 

 

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.BorderStyle:=bsSingle;

Form1.BorderIcons:=[biSystemMenu, biMinimize];

Timer1.Interval:=1000;

Timer1.Enabled:=False;

CenterY:=Form1.ClientHeight div 2;

CEnterX:=CenterY;

Radius:=CenterX-20;

HourArrow:=Radius-50;

MinArrow:=Radius-30;

SecArrow:=Radius-10;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

If Button1.Caption='Старт' then

Begin

// Запуск часов

Form1.FormPaint(Form1);

DecodeTime(Time, Hour, Min, Sec, MSec);

HourAngle:=(Hour mod 12) / 12 *(2*PI);

MinAngle:= Min / 60 * (2*Pi);

SecAngle:=Sec / 60 * (2*Pi);

ArrowDraw(clRed);

Button1.Caption:='Стоп';

Timer1.Enabled:=true;

end

else

Begin

// Остановка часов

Button1.Caption:='Старт';

Timer1.Enabled:=False;

End;

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

// Стереть стрелки

ArrowDraw(clWhite);

Form1.Canvas.Font.Height:=32;

Form1.Canvas.Brush.Color:=clWhite;

Form1.Canvas.TextOut(CenterX-26,CenterY+Radius-100,'ПО-2');

// Нарисовать стрелки на новом месте

DecodeTime(Time, Hour, Min, Sec, MSec);

DateTimePicker1.Time:=Time; {DateTimePicker – компонент палитры Win32}

HourAngle:=(Hour mod 12) / 12 *(2*PI);

MinAngle:= Min / 60 * (2*Pi);

SecAngle:=Sec / 60 * (2*Pi);

ArrowDraw(clRed);

end;

 

Procedure TForm1.ArrowDraw (DrawColor: TColor);

Begin

With Form1.Canvas do

Begin

Pen.Color:=DrawColor;

MoveTo(CenterX, CenterY);

Pen.Width:=4;

LineTo(CenterX+Round(HourArrow*sin(HourAngle)),

CenterY-Round(HourArrow*cos(HourAngle)));

MoveTo(CenterX, CenterY);

Pen.Width:=3;

LineTo(CenterX+Round(MinArrow*sin(MinAngle)),

CenterY-Round(MinArrow*cos(MinAngle)));

MoveTo(CenterX, CenterY);

Pen.Width:=1;

LineTo(CenterX+Round(SecArrow*sin(SecAngle)),

CenterY-Round(SecArrow*cos(SecAngle)));

End;

End;

end.

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

Для отсчета времени используется Timer1, для которого установлен интервал, равный 1000, что соответствует генерации одного события OnTimer в секунду.

Пользователь не имеет возможности изменять размер формы, т.к. ее свойству BorderStyle установлено значение bsSingle.




Дата добавления: 2015-01-29; просмотров: 40 | Поможем написать вашу работу | Нарушение авторских прав

<== предыдущая лекция | следующая лекция ==>
I. События в Delphi| Процес взаємодії студентів з науковими керівниками

lektsii.net - Лекции.Нет - 2014-2024 год. (0.021 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав