Рефераты
 

Формирование и отображение звёзд разных размеров

Формирование и отображение звёзд разных размеров

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет информационных технологий и робототехники (ФИТР)

Кафедра программного обеспечения вычислительной техники

и автоматизированных систем

КУРСОВАЯ РАБОТА

по дисциплине: ”Разработка приложений в визуальных средах”

на тему: ”Формирование и отображение звёзд разных размеров”

Выполнил: ст. гр. 107218 Бербаш Н.Р.

Принял: доц. Гурский Н.Н.

Минск 2010

Белорусский национальный технический университет

Кафедра программного обеспечения вычислительной техники

и автоматизированных систем

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту (работе)

по дисциплине_Разработка приложений___

__в визуальных средах__

Тема __Формирование и отображение звёзд разных размеров________

_____________________________________________________________

Исполнитель:______________________________(фамилия, инициалы)

(подпись)

Студент____2____курса__107218__группы

Руководитель : _____________________________(фамилия, инициалы)

(подпись)

Минск 2010

Содержание:

Введение

1.Математическая формулировка задачи

2.Описание программы

2.1 Структурная схема программы

2.2 Описание разработанного класса

2.3 Описание реализации технологии Com

2.4 Описание динамических библиотек

2.5 Основные возможности программы

2.6 Средства использования сервисов, предоставляемых Microsoft Office

3.Руководство пользователя

4.Методика испытаний

Заключение

Литература

ПРИЛОЖЕНИЕ

Файл проекта Stars.dpr

Файл головного модуля Unit1.pas

Файл вывода формы настройки таймера Unit2.pas

Файл реализации класса - UStar.pas

Файл описания динамической библиотеки About.dpr

Файл описания динамической библиотеки Screen.dpr

Файл проекта COM-сервера - StarServer.dpr

Файл описания COM- класса - UCom.pas

Файл библиотеки типов COM- класса - ULibType.pas

Введение

Представленная в этой работе программа выполняет формирование и отображение звёзд разных размеров. Это осуществляется с помощью графической библиотеки OpenGL.

OpenGL -- это стандартная библиотека для всех 32-разрядных операционных систем, в том числе и для операционной системы Windows.

OpenGL -- не отдельная программа, а часть операционной системы. Это означает, что откомпилированное приложение, использующее OpenGL, не нуждается ни в каких дополнительных программах и модулях, кроме стандартных, содержащихся на любом компьютере с установленной операционной системой Windows 95 версии OSR2 и выше.

Для разработки программы была выбрана среда визуального проектирования Borland Delphi 7.0. Она позволяет за короткий промежуток времени и с наименьшими затратами физических и умственных сил создавать прикладные программы различной направленности, обеспечивая при этом наличие дружественного оконного интерфейса.

В состав стандартной поставки Delphi (начиная с третьей версии) входит заголовочный файл, позволяющий строить приложения с использованием OpenGL, а также справочный файл по командам этой библиотеки. Указанные (а также ряд других) преимущества среды Delphi 7.0. обуславливают широкое её использование при создании программного обеспечения разнообразного назначения.

1. Математическая формулировка задачи

Формирование звёзд в представленой работе происходит с помощью библиотеки OpenGL путем рисования сгруппированных треугольноков. Построения на основе треугольников являются оптимальными по своим скоростным показателям: треугольники строятся наиболее быстро, и именно этот формат чаще всего предлагается для аппаратного ускорения.

Сначала рисуется пятиугольник, состоящий из 5-и треугольников, координаты вершин которых вычисляются по формулам:

Х1=0; Y1=0;

X2= r * cos (2 * Pi * i / 5); Y2= r * sin (2 * Pi * i / 5);

X3= r* cos (2 * Pi * (i + 1) / 5; Y3= r * sin (Pi-2 * Pi * (i + 1)/ 5);

где i изменяется от 0 до 4;

Затем к нему пририсовываются «лучи» - ещё 5 треугольников с координатами:

Х1= r * cos (2 * Pi * i / 5); Y1= r * sin (2 * Pi * i / 5);

X2= 2*r * cos (2 * Pi * i / 5 + Pi /5); Y2= 2*r * sin (2 * Pi * i / 5 + Pi / 5);

X3= r * cos (2 * Pi * (i + 1) / 5 ); Y3= r * sin (Pi-2 * Pi * (i + 1)/ 5);

где i изменяется от 0 до 4;

2. Описание программы

2.1 Структурная схема программы

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

Com-сервер Заставка Модуль

(MS Excel) (Screen.dpr) Com - класса

(Uscreen.pas) (UCom.pas)

DLL

Com - сервер

Com-сервер (StarServar.dpr)

(MS Word)

Главное окно Модуль

программы интерфейса

Модуль класса (Form1) (ULibType.pas)

TStar (Unit1.pas)

(UStar.pas)

Окно Форма для

«About» настройки таймера

(About.dpr) (Form2)

(UAbout.pas) (Unit2.pas)

DLL

Рисунок-2.1. Структурная схема связей модулей программы

2.2 Описание разработанного класса

В результате анализа предметной области для её описания и моделирования был
разработан класс TStar, инкапсулирующий поля, методы и свойства, применимые к рассматриваемому объекту.

type

TStar = class

private

Ac1,Ac2:TColor; //переменные для установки цвета

public

procedure PaintStar; //процедура рисования звёзд

procedure SetC1(cv1:TColor); //установить цвет фона

procedure SetC2(cv2:TColor); //установить цвет звёзд

function GetC1:TColor; //получить цвет фона

function GetC2:TColor; //получить цвет звёзд

property c1:TColor read GetC1 write SetC1;

property c2:TColor read GetC2 write SetC2;

end;

Описание и реализация класса структурно оформлено в отдельном Unit - UStar. Используемые секции public и private определяют области видимости элементов класса. Так, видно, что все поля класса являются полностью закрытыми, а доступ к ним организуется с помощью методов и свойств.

2.3 Описание реализации технологии COM

В соответствии с требованиями на разработку данной курсовой работы была также реализована возможность экспорта методов созданного класса с помощью технологии COM. Для этого был создан сервер в виде DLL - программный модуль

StarServer.

library StarServer;

uses

ComServ,

UCom in 'UCom.pas',

ULibType in 'ULibType.pas',

StarServer_TLB in 'StarServer_TLB.pas';

exports

DllGetClassObject,

DllCanUnloadNow,

DllRegisterServer,

DllUnregisterServer;

{$R *.TLB}

{$R *.RES}

begin

end.

Этот сервер позволяет создать COM-объект, описание класса которого находится в модуле UСom. Следует заметить, что данный класс полностью соответствует, приведенному в п.2.2 классу TStar. Непосредственный доступ к открытым элементам COM-класса осуществляется с помощью интерфейса IStar, описанного в модуде

ULibType.

2.4. Описание динамических библиотек

При разработке приложения были реализованы 2 динамические библиотеки. Динамическая библиотека Screen.dll содержит заставку, появляющуюся после запуска программы, но до появления главного окна.

library Screen;

uses

SysUtils,Classes,Windows,

UScreen in 'UScreen.pas' {FormScreen};

{$R *.res}

//показать заставку

procedure ShowScreen(AOwner:TComponent);

var

Time:extended;

FormSc:TFormScreen;

begin

FormSc:=TFormScreen.Create(AOwner); //создать форму

Time:=GetTickCount/1000; //запомнить время

FormSc.Show; //показать форму

FormSc.Repaint; //перерисовать форму

//пока не вышел лимит времени - ничего не делать

while GetTickCount/1000<Time+4 do;

FormSc.Close; //закрыть форму

FormSc.Free; //уничтожить форму

end;

exports ShowScreen;

begin

end.

Библиотека содержит 1 экспортируемую процедуру ShowScreen, служащую для отображения формы.

Библиотека About.dll содержит форму с информацией о программе.

library About;

uses

SysUtils,

Classes,

UAbout in 'UAbout.pas' {FormAbout};

{$R *.res}

//показать форму

procedure ShowAbout(AOwner:TComponent);

var

Form:TFormAbout;

begin

Form:=TFormAbout.Create(AOwner); //создать форму

Form.ShowModal; //показать форму

Form.Free; //уничтожить форму

end;

exports ShowAbout;

begin

end.

Библиотека содержит экспортируемую функцию ShowAbout для отображения формы.

2.5 Основные возможности программы

Программа начинается с отображения оригинальной заставки (содержится в Screen.dll), а затем на экране появляется главное окно программы (модуль Unit1). Главный модуль управляет работой всех других модулей в соответствии с запросами пользователя.

Он содержит:

· Вызов окна «About»;

· Передачу данных в Word и Excel;

· Вызов формы настройки таймера;

· Вызов окна помощи;

· Сохранение данных в Ini-файлах;

· Использование возможностей разработанного COM-сервера;

Диалог с пользователем поддерживается с помощью главного и выпадающего меню, панели инструментов, кнопок и других интерфейсных элементов.Окно «About» содержит краткую информацию о приложении.

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

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

2.6 Средства использования сервисов, предоставляемых Microsoft Office

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

1. Procedure TForm1.ReportExcel.Данная процедура обеспечивает передачу данных в Excel.

2. Procedure TForm1.ReportWord. Процедура позволяет создать отчет, принятый в Word.

3. Руководство пользователя

Для активизации программы необходимо вызвать файл
Stars.exe. При этом, на экране появится заставка, показанная на рисунке 3.1.

Рисунок 3.1 - Заставка программы

После того как заставка через несколько секунд исчезнет, появится главное окно программы (см. рисунок 3.2).

Рисунок 3.2 - Главное окно программы

Как видно, данное окно состоит из следующих частей:

· Главного меню;

· Панели инструментов;

· Области вывода графического изображения;

Пункты главного меню показаны на рисунке 3.3.

Рисунок 3.3 - Главное меню программы

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

Рисунок 3.4 - Пункт меню «Настройки»

При выборе пункта «Выход» происходит завершение работы приложения.

Пункт меню «Отобразить звёзды» обеспечивает выполнение поцедуры формирования и отображения звёзд.

Пункт меню «Таймер» обеспечивает задание настроек таймера при помощи окна следующего вида:

Рисунок 3.5 - Окно настройки таймера

Для подтверждения ввода необходимо нажать кнопку "OK", для закрытия формы "Close". Также тут можно выключить таймер, поставив галочку в поле «Выкл таймер».

После выбора пунктов «Цвет фона» или «Цвет звёзд» на экране появится стандартное диалоговое окно выбора цвета, где можно выбрать необходимый цвет.

Рис 3.6 - Окно выбора цвета

Выбор пункта меню «О программе» позволяет получить на экране краткие сведения о программе в виде, показанном на рисунке 3.7.

Рисунок 3.7 - Окно «About»

Кроме главного меню программа управляется также кнопками на панели инструментов, которые дублирует наиболее важные пункты главного меню и предназначены для оперативного выполнения основных команд:

Рисунок 3.8 - Панель инструментов

При выборе кнопки происходит вызов окна помощи, содержащим сведения о работе с программой (см. рисунок 3.9)

Рисунок 3.9 - Окно справочной системы

Кнопки и обеспечивают по желанию пользователя формирование отчетов с параметрами формы в виде текстового документа в стиле редактора Ms Word или в табличном процессоре MS Excel.

Также на панели управления можно указать тип обьекта (классический или COM), который будет создаваться для отображения звёзд.

Рисунок 3.10 - Выбор типа обьекта

При щелчке правой кнопкой мыши в главном окне, появляется контекстное меню, приведенное на рисунке 3.11.

Рисунок 3.10 - Контекстное меню программы

Для выхода из программы следует нажать кнопку «Выход».

4. Методика испытаний

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

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

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

Для использования COM-сервера, он должен быть предварительно зарегистрирован в системе. Тестовые примеры выполнялись в среде операционной системы Windows XP Profesional при разрешении экрана 1024*768. Для работы с программой необходимо также наличие клавиатуры и манипулятора типа «мышь».

Первое испытание произведем с созданием классического типа обьекта. Результаты испытания показаны на рисунке 4.1.

Рисунок 4.10 - Работа программы

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

Рисунок 4.2 - Сообщение ошибки ввода данных

Произведем также испытание с использованием разработанного COM-объекта.

Рисунок 4.3 - Работа программы с использованием Com - объекта

Таким образом, проведенное тестирование программы не выявило сбойных ситуаций и некорректностей в ее работе. Следует считать, что в целом программа протестирована, отвечает поставленным требованиям и вполне работоспособна.

Заключение

В ходе выполнения курсовой работы

·
были закреплены знания по курсу «Разработка приложений в визуальных средах»;

· приобретен опыт при разработке объектно-ориентированных программ;

· изучены принципы создания динамических библиотек;

· изучены и реализованы способы создания клиент-серверных приложений на базе COM-технологий;

· освоены методы передачи данных между приложениями;

· изучены возможности создания справочной системой высокой степени сложности и различных форматов.

При разработке программы использовался модульный принцип программирования. Такая структура программы позволяет в дальнейшем модифицировать отдельные её части без нарушения работоспособности и потери функциональности приложения.

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

Таким образом, разработанное в ходе выполнения курсовой работы приложение является законченным программным продуктом.

Литература

1. Краснов М.В. OpenGL графика в проектах Delphi. -СПб.: БХВ-Петербург, 2002.

2. Конспекты по курсу «Разработка приложений в визуальных средах»

ПРИЛОЖЕНИЕ

Файл проекта Stars.dpr

program Stars;

uses

Forms,

Windows,

Classes,

Dialogs,

SysUtils,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2},

UStar in 'UStar.pas';

Type

//Процедурный тип для функции, вызываемой из DLL

TProc=procedure(AOwner:TComponent);

Var

Handle : LongWord; //Дескриптор DLL

ShowScreen : tproc; //Переменная для функции

{$R *.res}

begin

Application.Initialize;

//*****Загрузка библиотеки и показ заставки******//

Handle:= LoadLibrary('Screen.dll');

if Handle <> 0 then

begin

//Получить адрес функции из библиотеки

@ShowScreen:= GetProcAddress(Handle, 'ShowScreen');

ShowScreen(Application); //Показать заставку

FreeLibrary(Handle); //Удалить библиотеку

end

else ShowMessage('Не найдена библиотека Screen.dll');

//***********************************************//

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Application.Run;

end.

Файл головного модуля Unit1.pas

unit Unit1;

interface

uses

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

Dialogs, OpenGL, Menus, ExtCtrls, Buttons, ToolWin, ComCtrls,inifiles,WordXP,

StdCtrls;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N7: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

Timer1: TTimer;

ColorDialog1: TColorDialog;

ColorDialog2: TColorDialog;

PopupMenu1: TPopupMenu;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

ToolBar1: TToolBar;

SpeedButton1: TSpeedButton;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

SpeedButton4: TSpeedButton;

SpeedButton5: TSpeedButton;

SpeedButton6: TSpeedButton;

SpeedButton7: TSpeedButton;

SpeedButton8: TSpeedButton;

ToolButton1: TToolButton;

CheckBox1: TCheckBox;

ToolButton2: TToolButton;

procedure N3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure SpeedButton5Click(Sender: TObject);

procedure ReadParams;

procedure WriteParams;

procedure SpeedButton7Click(Sender: TObject);

procedure ReportWord;

procedure SpeedButton8Click(Sender: TObject);

procedure ReportExcel;

private

hrc: HGLRC;

end;

var

Form1: TForm1;

c1,c2:TColor;

implementation

uses Unit2,ULibType,ComObj,Unit3;

{$R *.dfm}

procedure SetDCPixelFormat (hdc : HDC);

var

pfd : TPixelFormatDescriptor;

nPixelFormat : Integer;

begin

FillChar (pfd, SizeOf (pfd), 0);

pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;

nPixelFormat := ChoosePixelFormat (hdc, @pfd);

SetPixelFormat (hdc, nPixelFormat, @pfd);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

ReadParams;

SetDCPixelFormat(Canvas.Handle);

hrc := wglCreateContext(Canvas.Handle);

Timer1.Interval:=1000;

Timer1.Enabled:=false;

c1:=RGB(0,0,255);

c2:=RGB(255,255,0);

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

wglDeleteContext(hrc);

end;

procedure TForm1.N3Click(Sender: TObject);

var

Test:IStar;

Star:TStar;

begin

wglMakeCurrent(Canvas.Handle, hrc);

glViewPort (0, 0, Form1.ClientWidth, Form1.ClientHeight); // область вывода

if Form1.CheckBox1.Checked

then begin

Test:=CreateComObject(Class_Star) as IStar;

Test.SetC1(c1);

Test.SetC2(c2);

Test.PaintStar; end

else begin

Star:=TStar.Create();

Star.c1:=c1;

Star.c2:=c2;

Star.PaintStar;

end;

SwapBuffers(Canvas.Handle); // содержимое буфера - на экран

wglMakeCurrent(0, 0);

Test:=Nil;

if Form2.CheckBox1.Checked then

Form1.Timer1.Enabled:=false

else

Form1.Timer1.Enabled:=true;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

WriteParams;

Close;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

N3Click(Sender);

end;

procedure TForm1.N4Click(Sender: TObject);

begin

if ColorDialog1.Execute then

c1:=ColorDialog1.Color;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

if ColorDialog2.Execute then

c2:=ColorDialog2.Color;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

Form2.Show;

end;

procedure TForm1.N2Click(Sender: TObject);

Type

//Процедурный тип для вызова процедуры из DLL

TProc = procedure(AOwner:TComponent);

var

HLib : THandle; //Дескриптор библиотеки

ShowAbout : TProc; //Переменая для вызова функции из DLL

begin

//Получить значение дескриптора загруженной библиотеки

HLib:=LoadLibrary('About.dll');

//Проверить существование библиотеки

if HLib = 0 then

begin

ShowMessage('Библиотека не найдена : About.dll');

exit;

end;

//Получить адрес вызываемой функции

@ShowAbout:= GetProcAddress(HLib, 'ShowAbout');

//Вызов функции, показывающей форму About

ShowAbout(Application);

FreeLibrary(HLib); //Выгрузка библиотеки

N3Click(Sender);

end;

procedure TForm1.SpeedButton5Click(Sender: TObject);

begin

Application.HelpFile := 'Help\NewProject.hlp';

Application.HelpCommand(HELP_FINDER, 3);

end;

procedure TForm1.ReadParams;

Var

IniFile:TIniFile; // объявление переменной, через которую будут обрабатываться данные

Path:String; // Переменная, где будет храниться путь к программе

begin

Path:=Application.ExeName; // полный путь и название запущенной программы

Path:=ExtractFileDir(Path); // отбрасываем название программы. Остается путь.

if Path[Length(Path)]<>'\' then Path:=Path+'\'; // если последний символ не \ то добавить его

{Последняя строка нужна для присвоения последнего символа '\',

потому что при обрезке файла 'C:\PROG.EXE' получим 'C:\',

а при обрезке 'C:\WINDOWS\PROG.EXE' получим 'C:\WINDOWS' }

IniFile:=TIniFile.Create(Path+'project.ini'); // полный путь к программе и имя ini файла

Form1.Top:=IniFile.ReadInteger('FORM1','Form1Top',Form1.Top); // верхнее положение окна

Form1.Left:=IniFile.ReadInteger('FORM1','Form1Left',Form1.Left); // левое положение окна

Form1.Height:=IniFile.ReadInteger('FORM1','Form1Height',Form1.Height); // высота

Form1.Width:=IniFile.ReadInteger('FORM1','Form1Width',Form1.Width); // ширина

IniFile.Free; // если сами создаем, то сами уничтожаем.

end;

procedure TForm1.WriteParams;

Var

IniFile:TIniFile;

Path:String; // Переменная, где будет храниться путь к программе

begin

Path:=Application.ExeName; // полный путь и название запущенной программы

Path:=ExtractFileDir(Path); // отбрасываем название программы. Остается путь.

if Path[Length(Path)]<>'\' then Path:=Path+'\'; // если последний символ не \ то добавить его

IniFile:=TIniFile.Create(Path+'project.ini'); // полный путь к программе и имя ini файла

IniFile.EraseSection('FORM1'); //удаление секции

IniFile.WriteInteger('FORM1','Form1Top',Form1.Top);

IniFile.WriteInteger('FORM1','Form1Left',Form1.Left);

IniFile.WriteInteger('FORM1','Form1Height',Form1.Height);

IniFile.WriteInteger('FORM1','Form1Width',Form1.Width);

IniFile.Free;

end;

procedure TForm1.SpeedButton7Click(Sender: TObject);

begin

ReportWord;

end;

procedure TForm1.ReportWord;

//Отчет в Word

var

wa : TWordApplication; //WordApplication

wd : TWordDocument; //WordDocument

begin

//Создать com-объект

wa:= TWordApplication.Create(Form1);

//Подключиться к серверу Word

wa.Connect;

//Добавить новый документ

wa.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);

wd:= TWordDocument.Create(Form1);

wd.ConnectTo(wa.ActiveDocument);

//Отменить проверку правописания

wa.Options.CheckSpellingAsYouType:=False;

//Отменить проверку орфографии

wa.Options.CheckGrammarAsYouType:=False;

wd.Range.InsertAfter('Отчет: '+#13);

wd.Range.InsertAfter('Параметры формы: '+#13);

wd.Range.InsertAfter('Отступ сверху '+IntToStr(Form1.Top)+#13);

wd.Range.InsertAfter('Отступ слева '+IntToStr(Form1.Left)+#13);

wd.Range.InsertAfter('Высота '+IntToStr(Form1.Height)+#13);

wd.Range.InsertAfter('Ширина '+IntToStr(Form1.Width)+#13);

//Показать Word

wa.Visible:= true;

end;

procedure TForm1.SpeedButton8Click(Sender: TObject);

begin

ReportExcel;

end;

procedure TForm1.ReportExcel;

//Отчет в Excel

var

Excel : variant;

WorkBook : variant; //Рабочая книга

j : integer;

begin

//Создать Соm-объект

Excel:= CreateOleObject('Excel.Application');

//Отключить реакцию на внешние события-для ускорения процесса передачи данных

Excel.Application.EnableEvents:= false;

//Добавить рабочую книгу

WorkBook:= Excel.WorkBooks.Add;

//Изменение ширины столбцов

for j:=0 to 2 do

WorkBook.WorkSheets[1].Columns[j+1].ColumnWidth:= 20;

//Вывод строки

WorkBook.WorkSheets[1].Cells[1,1]:= 'Отчет: ';

WorkBook.WorkSheets[1].Cells[2,1]:= 'Параметры формы: ';

WorkBook.WorkSheets[1].Cells[3,1]:= 'Отступ сверху: ';

WorkBook.WorkSheets[1].Cells[3,2]:= Form1.Top;

WorkBook.WorkSheets[1].Cells[4,1]:= 'Отступ слева: ';

WorkBook.WorkSheets[1].Cells[4,2]:= Form1.Left;

WorkBook.WorkSheets[1].Cells[5,1]:= 'Высота: ';

WorkBook.WorkSheets[1].Cells[5,2]:= Form1.Height;

WorkBook.WorkSheets[1].Cells[6,1]:= 'Ширина: ';

WorkBook.WorkSheets[1].Cells[6,2]:= Form1.Width;

//Показать Excel

Excel.Visible:=true;

end;

end.

Файл вывода формы настройки таймера Unit2.pas.

unit Unit2;

interface

uses

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

Dialogs, StdCtrls;

type

TForm2 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

CheckBox1: TCheckBox;

Button1: TButton;

Button2: TButton;

procedure CheckBox1Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

Procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.CheckBox1Click(Sender: TObject);

begin

if CheckBox1.Checked then

Edit1.Enabled:=false

else

Edit1.Enabled:=true;

end;

procedure TForm2.Button1Click(Sender: TObject);

begin

if CheckBox1.Checked then

Form1.Timer1.Enabled:=false

else begin

Form1.Timer1.Enabled:=true;

Form1.Timer1.Interval:=StrToInt(Edit1.Text)*1000; end;

end;

Procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);

begin //Фильтр ввода данных

if not(Key in ['0'..'9', #8]) then

begin MessageBox(0,'Допускается только ввод чисел','Ошибка',mb_ok);

Key:= #0;

end;

end;

procedure TForm2.Button2Click(Sender: TObject);

begin

Close;

Form1.N3Click(Sender);

end;

end.

Файл реализации класса - UStar.pas

unit UStar;

interface

Uses OpenGL,Graphics,Windows;

type

TStar = class

private

Ac1,Ac2:TColor; //переменные для установки цвета

public

procedure PaintStar; //процедура рисования звёзд

procedure SetC1(cv1:TColor); //установить цвет фона

procedure SetC2(cv2:TColor); //установить цвет звёзд

function GetC1:TColor; //получить цвет фона

function GetC2:TColor; //получить цвет звёзд

property c1:TColor read GetC1 write SetC1;

property c2:TColor read GetC2 write SetC2;

end;

implementation

Uses Unit1;

procedure TStar.SetC1(cv1:TColor);

begin

Ac1:=cv1;

end;

procedure TStar.SetC2(cv2:TColor);

begin

Ac2:=cv2;

end;

function TStar.GetC1:TColor;

begin

result:=Ac1;

end;

function TStar.GetC2:TColor;

begin

result:=Ac2;

end;

procedure TStar.PaintStar;

var

i,n,j:integer;

x,y,r:real;

begin

glClearColor (GetRValue(c1)/256, GetGValue(c1)/256, GetBValue(c1)/256, 1.0); // цвет фона

glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета

glColor3f (GetRValue(c2)/256, GetGValue(c2)/256, GetBValue(c2)/256); // текущий цвет примитивов

for n:=1 to 12 do begin

x:=(random(100)/100) - (random(100)/100);

y:=(random(100)/100) - (random(100)/100);

glTranslatef (x, y, 0.0);

j:= random(180);

glRotatef (j, 0.0, 0.0, 1.0); //54

r:=random(10)/100;

glBegin (GL_TRIANGLES);

For i := 0 to 4 do begin

glVertex2f (0, 0);

glVertex2f (r * cos (2 * Pi * i / 5),

r * sin (2 * Pi * i / 5)); //0.25

glVertex2f (r* cos (2 * Pi * (i + 1) / 5 ),

r * sin (Pi-2 * Pi * (i + 1)/ 5));

end;

glEnd;

glBegin (GL_TRIANGLES);

For i := 0 to 4 do begin

glVertex2f (r * cos (2 * Pi * i / 5),

r * sin (2 * Pi * i / 5));

glVertex2f (2*r * cos (2 * Pi * i / 5 + Pi /5),

2*r * sin (2 * Pi * i / 5 + Pi / 5));

glVertex2f (r * cos (2 * Pi * (i + 1) / 5 ),

r * sin (Pi-2 * Pi * (i + 1)/ 5));

end;

glEnd;

glRotatef (-j, 0.0, 0.0, 1.0); //-54

glTranslatef (-x, -y, 0.0);

end;

end;

end.

Файл описания динамической библиотеки About.dpr

library About;

uses

SysUtils,

Classes,

UAbout in 'UAbout.pas' {FormAbout};

{$R *.res}

//показать форму

procedure ShowAbout(AOwner:TComponent);

var

Form:TFormAbout;

begin

Form:=TFormAbout.Create(AOwner); //создать форму

Form.ShowModal; //показать форму

Form.Free; //уничтожить форму

end;

exports ShowAbout;

begin

end.

unit UAbout;

interface

uses

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

Dialogs, StdCtrls, jpeg, ExtCtrls;

type

TFormAbout = class(TForm)

Button1: TButton;

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

end;

var

FormAbout: TFormAbout;

implementation

{$R *.dfm}

procedure TFormAbout.Button1Click(Sender: TObject);

begin

Close;

end;

end.

Файл описания динамической библиотеки Screen.dpr

library Screen;

uses

SysUtils,

Classes,

Windows,

UScreen in 'UScreen.pas' {FormScreen};

{$R *.res}

//показать заставку

procedure ShowScreen(AOwner:TComponent);

var

Time:extended;

FormSc:TFormScreen;

begin

FormSc:=TFormScreen.Create(AOwner); //создать форму

Time:=GetTickCount/1000; //запомнить время

FormSc.Show; //показать форму

FormSc.Repaint; //перерисовать форму

//пока не вышел лимит времени - ничего не делать

while GetTickCount/1000<Time+4 do;

FormSc.Close; //закрыть форму

FormSc.Free; //уничтожить форму

end;

exports ShowScreen;

begin

end.

unit UScreen;

interface

uses

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

Dialogs, jpeg, ExtCtrls;

type

TFormScreen = class(TForm)

Image1: TImage;

end;

var

FormScreen: TFormScreen;

implementation

{$R *.dfm}

end.

Файл проекта COM-сервера - StarServer.dpr

library StarServer;

uses

ComServ,

UCom in 'UCom.pas',

ULibType in 'ULibType.pas',

StarServer_TLB in 'StarServer_TLB.pas';

exports

DllGetClassObject,

DllCanUnloadNow,

DllRegisterServer,

DllUnregisterServer;

{$R *.TLB}

{$R *.RES}

begin

end.

Файл описания COM- класса - UCom.pas

unit UCom;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses

Windows, ActiveX, Classes, ComObj,OpenGL,ULibType, Graphics;

type

TStar = class(TComObject,IStar)

protected

Ac1,Ac2:TColor;

public

procedure PaintStar;stdcall;

procedure SetC1(cv1:TColor); stdcall;

procedure SetC2(cv2:TColor); stdcall;

function GetC1:TColor; stdcall;

function GetC2:TColor; stdcall;

property c1:TColor read GetC1 write SetC1;

property c2:TColor read GetC2 write SetC2;

end;

const

Class_Star: TGUID = '{AF564D37-C789-4A62-8530-EE0AB25F52F7}';

implementation

uses ComServ;

procedure TStar.SetC1(cv1:TColor);

begin

Ac1:=cv1;

end;

procedure TStar.SetC2(cv2:TColor);

begin

Ac2:=cv2;

end;

function TStar.GetC1:TColor;

begin

result:=Ac1;

end;

function TStar.GetC2:TColor;

begin

result:=Ac2;

end;

procedure TStar.PaintStar;

var

i,n,j:integer;

x,y,r:real;

begin

glClearColor (GetRValue(c1)/256, GetGValue(c1)/256, GetBValue(c1)/256, 1.0); // цвет фона

glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета

glColor3f (GetRValue(c2)/256, GetGValue(c2)/256, GetBValue(c2)/256); // текущий цвет примитивов

for n:=1 to 12 do begin

x:=(random(100)/100) - (random(100)/100);

y:=(random(100)/100) - (random(100)/100);

glTranslatef (x, y, 0.0);

j:= random(180);

glRotatef (j, 0.0, 0.0, 1.0); //54

r:=random(10)/100;

glBegin (GL_TRIANGLES);

For i := 0 to 4 do begin

glVertex2f (0, 0);

glVertex2f (r * cos (2 * Pi * i / 5),

r * sin (2 * Pi * i / 5)); //0.25

glVertex2f (r* cos (2 * Pi * (i + 1) / 5 ),

r * sin (Pi-2 * Pi * (i + 1)/ 5));

end;

glEnd;

glBegin (GL_TRIANGLES);

For i := 0 to 4 do begin

glVertex2f (r * cos (2 * Pi * i / 5),

r * sin (2 * Pi * i / 5));

glVertex2f (2*r * cos (2 * Pi * i / 5 + Pi /5),

2*r * sin (2 * Pi * i / 5 + Pi / 5));

glVertex2f (r * cos (2 * Pi * (i + 1) / 5 ),

r * sin (Pi-2 * Pi * (i + 1)/ 5));

end;

glEnd;

glRotatef (-j, 0.0, 0.0, 1.0); //-54

glTranslatef (-x, -y, 0.0);

end;

end;

initialization

TComObjectFactory.Create(ComServer, TStar, Class_Star,

'Star', 'Star Server', ciMultiInstance, tmApartment);

end.

Файл библиотеки типов COM- класса - ULibType.pas

unit ULibType;

interface

uses

Windows, Graphics;

const

Class_Star: TGUID = '{AF564D37-C789-4A62-8530-EE0AB25F52F7}';

type

IStar= interface['{A7DA5480-DF7C-4053-8418-FF2B9BBBACB4}']

procedure PaintStar;stdcall;

procedure SetC1(cv1:TColor); stdcall;

procedure SetC2(cv2:TColor); stdcall;

function GetC1:TColor; stdcall;

function GetC2:TColor; stdcall;

end;

implementation

end.


© 2010 BANKS OF РЕФЕРАТ