Формирование и отображение звёзд разных размеров
Стандартная библиотека для всех 32-разрядных операционных систем - OpenGL. Структурная схема программы. Описание разработанного класса, реализации технологии Com, динамических библиотек. Средства использования сервисов, предоставляемых Microsoft Office.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 14.11.2010 |
Размер файла | 4,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ БЕЛАРУСЬ
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Факультет информационных технологий и робототехники (ФИТР)
Кафедра программного обеспечения вычислительной техники
и автоматизированных систем
КУРСОВАЯ РАБОТА
по дисциплине: ”Разработка приложений в визуальных средах”
на тему: ”Формирование и отображение звёзд разных размеров”
Выполнил: ст. гр. 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.
Подобные документы
Анализ временных рядов. Разработка программы для среды визуального проектирования Borland Delphi 7.0. Математическая формулировка задачи. Структурная схема программы. Описание реализации технологии COM, динамических библиотек, возможностей программы.
курсовая работа [4,3 M], добавлен 14.11.2010Microsoft Office — пакет приложений, созданных корпорацией Microsoft для операционных систем Microsoft Windows и Apple Mac OS X. Автоматизация процедуры выплаты заработной платы. Создание презентации в Power Point. Автоматическое создание блок-схем.
практическая работа [2,1 M], добавлен 14.07.2012Описание состава пакета Microsoft Office. Сравнение различных версий пакета Microsoft Office. Большие прикладные программы: Word, Excel, PowerPoint, Access. Программы-помощники. Система оперативной помощи.
реферат [22,5 K], добавлен 31.03.2007Программный код OpenGL. Синтаксис команд OpenGL. OpenGL как конечный автомат. Конвейер визуализации OpenGL. Библиотеки, относящиеся к OpenGL. Библиотека OpenGL. Подключаемые файлы. GLUT, инструментарий утилит библиотеки OpenGL.
курсовая работа [304,9 K], добавлен 01.06.2004Рассмотрение сущности, видов и особенностей применения учебных проектов в условиях школьного обучения. Разработка примерной программы на основе использования готовых дидактических разработок курса "Учебные проекты с использованием Microsoft Office".
курсовая работа [122,7 K], добавлен 15.07.2015Программы для делопроизводства, обмена информацией, деловой графики и презентаций. Работа с текстовыми и табличными процессорами, с системами управления базами данных на примере программы Microsoft Office Word. Описание основных функций программ.
курсовая работа [1,0 M], добавлен 12.01.2015Ознакомление с интерфейсом, основными возможностями и преимуществами использования программы OpenGL - популярной библиотекой для работы с 2D и 3D графикой. Рассмотрение назначения, базовых компонент и правил инициализации программного движка DirectX.
презентация [19,4 K], добавлен 14.08.2013Создание программы на языке C++ с использованием графических библиотек OpenGL в среде Microsoft Visual Studio. Построение динамического изображения трехмерной модели объекта "Нефтяная платформа". Логическая структура и функциональная декомпозиция проекта.
курсовая работа [1,8 M], добавлен 23.06.2011Основные функции библиотеки динамической компоновки (DLL) в операционной системе Windows. Характеристика механизмов связывания в среде Windows. Описание функций, использующихся в программах. Анализ примеров реализации DLL. Процесс использования ресурсов.
курсовая работа [365,3 K], добавлен 18.05.2014Общая характеристика приложения Microsoft Office system 2007. Особенности форматов Microsoft Office Open XML. Технологии управления миграцией на новую версию. Возможности приложений Office Word, Excel, Access и Office PowerPoint 2007, их интеграция.
реферат [1,0 M], добавлен 13.09.2011