2. Procedure TFormMain.ReportWord(AStringGrid:TStringGrid). Процедура позволяет создать отчет, принятый в Word.

3. Procedure TFormMain.PresentationClick(Sender: TObject). Активизация данной процедуры позволяет запустить презентацию, которая может использоваться в рекламных и учебных целях.


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

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

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

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


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

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

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

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

·          Области ввода данных;

·          Области вывода информации;

·          Управляющих кнопок.

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

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

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


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

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

Пункт меню «Вычислить» обеспечивает разложение временного процесса в тригонометрический ряд при заданном w и вывод соответствующей информации. Если w не задано, выводится сообщение об ошибке (рисунок 3.5).

Рисунок 3.5 – Сообщение об ошибке

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

На рисунке 3.6 приведены команды, вызываемые пунктом главного меню «Помощь».

Рисунок 3.6 - Пункт меню «Помощь»


При выборе пункта меню «Презентация» начинается просмотр возможностей программы под управлением Power Point.

Выбор пункта меню «Справка» приводит к появлению окна помощи, содержащим сведения о работе с программой (см. рисунок 3.7)

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

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

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

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

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

Также имеется четыре управляющие кнопки, показанные на рисунке 3.10.

Рисунок 3.10 - Управляющие кнопки

Кнопка «Вычислить» обеспечивает расчет состояния системы и вывод соответствующей информации. Кнопка «График» обеспечивает появление окна с графиком, т.е. имеется возможность просмотра результатов разложения временного процесса в тригонометрический ряд при заданном значении w. Можно просмативать сразу как несколько графиков (рисунок 3.11), так и один для определенного значения w (рисунок 3.12).


Рисунок 3.11 – График разложения временного процесса в тригонометрический ряд при заданном значении w=3

Рисунок 3.12 – График разложения временного процесса в тригонометрический ряд при заданном значении w=3 и w=1

Кнопка «Очистить» очищает область построения графиков. Для закрытия окна используется кнопка «Закрыть».

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


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

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

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

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

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

Испытание проведем с начальными данными, указанными в задании.

Начальные данные: при w=3

Результаты этого вычислительного эксперимента приведены на рисунках 4.1, 4.2.


Рисунок 4.1 -Тестовая таблица №1

Рисунок 4.2 - Тестовый график №1

Если w не выбрано, выводится сообщение об ошибке (рисунок 3.5).

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

Начальные данные: при w=5

Полученные результаты

Рисунок 4.3 - Тестовый график №2


Рисунок 4.4 - Тестовая таблица №2

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


Заключение

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

·          были закреплены знания по курсу «Конструирование программ и языки программирования»;

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

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

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

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

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

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

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

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

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


Литература

1.   Фаронов В.В. Delphi 6. Учебный курс.-М.: Издатель Молгачева С.В., 2001.-672с.

2.   Елмакова Н., Трепалин С., Тенцер А. Delphi 6 и технология COM.-СПб.: Питер, 2002. – 640 с.

3.   Федоров А.. Delphi 5.0 для всех. -М.: Тоо фирма “КомпьютерПресс”, 1998. - 464 с.

4.   Марко Кэнту. Delphi 5 для профессионалов.-СПб.: Питер. 2001. – 944 с.

5.   Бобровский С. Delphi 5: учебный курс- СПб: Издательство «Питер», 2000.- 640с.

6.   А.М.Епанешников, В.А.Епанешников Программирование в среде Delphi.-М.:»Диалог МИФИ», 1998.


Приложение   Файл проекта VremRiad.dpr

program VremRiad;

uses

 Forms,Windows,Classes,Dialogs,SysUtils,

 UnitMain in 'UnitMain.pas' {Form1},

 UnitRiad in 'UnitRiad.pas',

 UComRiad in 'UComRiad.pas',

 UCom_Tlb in 'UCom_Tlb.pas',

 UnitGraphic in 'UnitGraphic.pas' {FormGraphic},

 VremRiad_TLB in 'VremRiad_TLB.pas';

{$R *.TLB}

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

Type

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

 TProc=procedure(AOwner:TComponent);

 Var

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

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

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

 {$R *.res}

begin

 Application.Initialize;

//Загрузка иконки

Application.Icon.LoadFromFile('Prompt.ico');

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

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

if Handle <> 0 then

begin

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

@ShowPrompt:= GetProcAddress(Handle, PChar('ShowPrompt'));

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

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

end

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

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

 Application.CreateForm(TForm1, Form1);

 Application.CreateForm(TFormGraphic, FormGraphic);

 Application.Run;

end.

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

unit UnitMain;

interface

uses

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

Dialogs, StdCtrls, Menus, ToolWin, ComCtrls, XPMan, ImgList, Grids,

IniFiles, Clipbrd, WordXP, Math, ShellAPI, ExtCtrls, msppt8,

UCom_Tlb, ComObj, MSPpt2000, PowerPointXP, Activex, OleServer,

 Buttons;

type

 TForm1 = class(TForm)

 Panel1: TPanel;

 Panel2: TPanel;

 Label1: TLabel;

 Label2: TLabel;

 Label3: TLabel;

 Label4: TLabel;

 Label5: TLabel;

 Label6: TLabel;

 Label7: TLabel;

 Label8: TLabel;

 RadioGroup1: TRadioGroup;

 BitBtn1: TBitBtn;

 Panel3: TPanel;

 BitBtn2: TBitBtn;

 MainMenu1: TMainMenu;

 N1: TMenuItem;

 N2: TMenuItem;

 N3: TMenuItem;

 N4: TMenuItem;

 N6: TMenuItem;

 BitBtn3: TBitBtn;

 N7: TMenuItem;

 StringGrid1: TStringGrid;

 Label9: TLabel;

 Label10: TLabel;

 BitBtn4: TBitBtn;

 PowerPointApplication1: TPowerPointApplication;

 Presentation: TSpeedButton;

 N8: TMenuItem;

 Word1: TSpeedButton;

 Excel1: TSpeedButton;

 N9: TMenuItem;

 EXcel2: TMenuItem;

 SpeedButton1: TSpeedButton;

 SpeedButton2: TSpeedButton;

 procedure BitBtn3Click(Sender: TObject);

 procedure FormActivate(Sender: TObject);

 procedure BitBtn1Click(Sender: TObject);

 procedure BitBtn4Click(Sender: TObject);

 procedure BitBtn2Click(Sender: TObject);

 procedure N4Click(Sender: TObject);

 procedure PresentationClick(Sender: TObject);

 procedure Word1Click(Sender: TObject);

 procedure Excel1Click(Sender: TObject);

 procedure SpeedButton2Click(Sender: TObject);

 // Procedure TFormMain.PresentationClick(Sender: TObject);

 

 private

 { Private declarations }

 public

IniFileName : string; //Имя файла инициализации

procedure ReportExcel(AStringGrid : TStringGrid); //Передать отчет в Excel

procedure ReportWord (AStringGrid : TStringGrid); //Передать отчет в Word

 { Public declarations }

 end;


var

 Form1: TForm1;

 Flag : bool; //Флаг определения вида используемого объекта

 const x=1;

 const P=500;

 

 

implementation

uses UnitRiad, UnitGraphic;

{$R *.dfm}

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

 Close;

end;

procedure TForm1.FormActivate(Sender: TObject);

 var i:integer;

begin

 //По умолчанию установить работу с обычным (классическим) объектом

 Flag:= false;

 //Имя Ini-файла сохранения параметров

 IniFileName:= GetCurrentDir+'\Riad.ini';

 //Создать обычный объект

 Riad:= TRiad.Create(IniFileName);

 //Считать данные из Ini-файла

 Riad.ReadFromIniFile;

 //Вычисление и вывод данных в таблицу

 Riad.Table(StringGrid1);

 StringGrid1.Cells[0,0]:='Номер' ;

 StringGrid1.Cells[1,0]:='Время(с)';

 StringGrid1.Cells[2,0]:='F{t} при w=1';

 StringGrid1.Cells[3,0]:='F{t} при w=3';

 StringGrid1.Cells[4,0]:='F{t} при w=5';

 for i:=1 to 201 do

 StringGrid1.Cells[0,i]:=IntToStr(i) ;

 for i:=0 to 201 do

 begin

 StringGrid1.Cells[1,i+1]:=FloatToStr(0.5*i)

 end;

 label10.Caption:='';

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

 var i:integer;

 begin

 Riad.SetW();

 //Вычисление и вывод данных в таблицу

 Riad.Table(StringGrid1);

 end;

procedure TForm1.BitBtn4Click(Sender: TObject);

var i:integer;

begin

 for i:=0 to 201 do

 begin

 StringGrid1.Cells[2,i+1]:='';

 StringGrid1.Cells[3,i+1]:='';

 StringGrid1.Cells[4,i+1]:='';

 end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

 

 FormGraphic.Show;

end;

procedure TForm1.N4Click(Sender: TObject);

Type

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

TProc = procedure(AOwner:TComponent);

var

Handle : LongInt; //Дескриптор библиотеки

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

begin

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

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

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

if Handle = 0 then

begin

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

exit;

end;

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

@ShowAbout:= GetProcAddress(Handle, PChar('ShowAbout'));

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

ShowAbout(Application);

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

end;

procedure TForm1.PresentationClick(Sender: TObject);

var

name : string;

pw : TOleEnum;

begin

 //Запуск презетации

Name:= ExtractFileDir(Application.ExeName) + '\Vremennoj process.ppsx';

PowerPointApplication1.Activate;

PowerPointApplication1.Presentations.Open(Name, pw, pw, pw);

PowerPointApplication1.Presentations.Item(1).SlideShowSettings.Run;

//Другой способ запуска

// ShellExecute(Application.MainForm.Handle,PChar('Open'),

// PChar('Riad.pps'), NIL, PChar(''), sw_ShowNormal);

end;//TFormMain.PresentationClick

procedure TForm1.Word1Click(Sender: TObject);

begin //Отчет в Word

ReportWord(StringGrid1);

end;//TFormMain.Word1Click

Procedure TForm1.ReportExcel(AStringGrid : TStringGrid);

//Отчет в Excel

var

Excel : variant;

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

i, j : integer;

begin

//Cоздать форму для графика

FormGraphic:= TFormGraphic.Create(Form1);

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

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

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

Excel.Application.EnableEvents:= false;

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

WorkBook:= Excel.WorkBooks.Add;

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

for j:=0 to AStringGrid.ColCount do

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

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

WorkBook.WorkSheets[1].Cells[1,1]:= 'Отчет о колебаниях стержня';

//Заполнение ячеек таблицы Excel значениями из StringGrid

//Нумерация ячеек в Excel начинается с 1 и идет в формате строка-столбец

for i:= 1 to AStringGrid.RowCount + 1 do

for j:= 0 to AStringGrid.ColCount do

WorkBook.WorkSheets[1].Cells[i+1, j+1]:= AStringGrid.Cells[j, i-1];


//Вставит изображение графика в Excel

WorkBook.WorkSheets[1].Shapes.AddPicture(GetCurrentDir+'\PictureWord.bmp',

True, True, 0, (AStringGrid.RowCount+2)*12.5+10, FormGraphic.Chart1.Width*0.8,

FormGraphic.Chart1.Height*0.8);

//Уничтожить форму

FormGraphic.Release;

FormGraphic:= NIL;

//Показать Excel

Excel.Visible:=true;

end;//TFormMain.ReportExcel

Procedure TForm1.ReportWord(AStringGrid : TStringGrid);

//Отчет в Word

var

i,j,k : integer;

a,b,c : OleVariant;

wa : TWordApplication; //WordApplication

wd : TWordDocument; //WordDocument

begin

//Создать форму для графика

FormGraphic:= TFormGraphic.Create(Form1);

//Создать 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;

a:= 0;

b:= 0;

wd.Range.InsertAfter('Отчет');

c:= Length(wd.Range.Text) - 1;

a:= c;

b:= c + 10;

//Добавить таблицу

wd.Tables.Add(wd.Range(a), AStringGrid.RowCount,

AStringGrid.ColCount, EmptyParam, EmptyParam);

k:= 1;

//Перенести данные из StringGrid в таблицу

for i:= 1 to AStringGrid.RowCount do

for j:= 1 to AStringGrid.ColCount do

wd.Tables.Item(k).Cell(i,j).Range.Text:= AStringGrid.Cells[j-1, i-1];

//Загрузить изображение в Image

FormGraphic.Image1.Picture.LoadFromFile('PictureWord.bmp');

//Поместить изображение в буфер обмена

Clipboard.Assign(FormGraphic.Image1.Picture);

c:= Length(wd.Range.Text) - 1;

a:= c;

//Вставить изображение из буфера обмена

wa.Selection.Paste;

//Показать Word

wa.Visible:= true;

//Уничтожить форму

FormGraphic.Release;

FormGraphic:= NIL;

end;//TFormMain.ReportWord

procedure TForm1.Excel1Click(Sender: TObject);

begin

 ReportExcel(StringGrid1);

 end;

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

 WinExec('hh.exe 1.chm',SW_SHOW);

end;

end.

Файл вывода графика UnitGraphic.pas

unit UnitGraphic;

interface

uses

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

 Dialogs, TeEngine, Series, StdCtrls, ExtCtrls, TeeProcs, Chart, XPMan,

 TeeFunci, Buttons;

type

 TFormGraphic = class(TForm)

 Chart1: TChart;

 Button1: TButton;

 XPManifest1: TXPManifest;

 Series1: TLineSeries;

 Series2: TLineSeries;

 TeeFunction1: TAddTeeFunction;

 Series3: TLineSeries;

 Image1: TImage;

 BitBtn1: TBitBtn;

 BitBtn2: TBitBtn;

 BitBtn3: TBitBtn;

 BitBtn4: TBitBtn;

 procedure Button1Click(Sender: TObject);

 procedure BitBtn1Click(Sender: TObject);

 procedure BitBtn2Click(Sender: TObject);

 procedure BitBtn3Click(Sender: TObject);

 procedure BitBtn4Click(Sender: TObject);

 private

 { Private declarations }

 public

 { Public declarations }

 end;

var

 FormGraphic: TFormGraphic;

implementation

uses UnitRiad;


{$R *.dfm}

procedure TFormGraphic.Button1Click(Sender: TObject);

begin

Chart1.Series[0].Clear;

Chart1.Series[1].Clear;

Chart1.Series[2].Clear;

Close;

end;//TFormGraphic.Button1Click

procedure TFormGraphic.BitBtn1Click(Sender: TObject);

begin

 Riad.Graphic1(FormGraphic.Chart1);

end;

procedure TFormGraphic.BitBtn2Click(Sender: TObject);

begin

 Riad.Graphic2(FormGraphic.Chart1);

end;

procedure TFormGraphic.BitBtn3Click(Sender: TObject);

begin

 Riad.Graphic3(FormGraphic.Chart1);

end;

procedure TFormGraphic.BitBtn4Click(Sender: TObject);

begin

Chart1.Series[0].Clear;

Chart1.Series[1].Clear;

Chart1.Series[2].Clear;

end;

end.

end.

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

unit UnitRiad;

interface

uses Chart, Series, Math, Grids, SysUtils, Types, Graphics, IniFiles, Messages, Dialogs, StdCtrls, Variants, Classes, Controls, Forms,

 ExtCtrls, Buttons, Menus;

Type

TRiad = class //класс

private

IniFile : TIniFile; //Объект Ini-файла

w: integer;

public

Constructor Create(AIniFileName : string);

Destructor Destroy;

procedure Graphic1(AChart:TChart); //Постоение графика

procedure Graphic2(AChart:TChart); //Постоение графика

procedure Graphic3(AChart:TChart); //Постоение графика

procedure Table(AStringGrid:TStringGrid); //Вывод в таблицу

procedure WriteToIniFile; //Запись в Ini-файл

procedure ReadFromIniFile; //Чтение из Ini-файла

function GetW : integer; //Получить w

procedure SetW; //Установить w

function F(w:integer;t:extended):extended;//Вычисление суммы

//property ww : integer read GetW write SetW;

private

end;

var

Riad : TRiad; //Объект

implementation

uses UnitMain, UnitGraphic;

const P=500;

const x=1;

const TimeStart=0; //Время начала отсчета

const TimeEnd=100; //Время окончания отсчета

const TimeStep=0.5; //Шаг дискретизация времени

Constructor TRiad.Create(AIniFileName : string);

begin

//Создать объект Ini-файла

IniFile:= TIniFile.Create(AIniFileName);

end;//TRiad.Create

Destructor TRiad.Destroy;

begin

//Удалить из Heap объект Ini-файла

if Assigned(IniFile) then

begin

IniFile.Free;

IniFile:= NIL;

end;

end;//TRiad.Create

procedure TRiad.Graphic1(AChart : TChart);

//Построение графика

var

time : extended;

Y: extended;

begin

Time:= TimeStart;

AChart.Series[0].Clear; //Очистить Series[0]

AChart.BottomAxis.Increment:= Floor((TimeEnd - TimeStart) / 5);

//Занести значения в Series

while(time <= TimeEnd) do

begin

Y:= F(1,time);

AChart.Series[0].AddXY(time, Y);

time:= time + TimeStep / 4;

end;

end;//TRiad.Graphic1

procedure TRiad.Graphic2(AChart : TChart);

//Построение графика

var

time : extended;

Y: extended;

begin

Time:= TimeStart;

AChart.Series[1].Clear; //Очистить Series[0]

AChart.BottomAxis.Increment:= Floor(( TimeEnd- TimeStart) / 5);

//Занести значения в Series

while(time <= TimeEnd) do

begin

Y:= F(3,time);

AChart.Series[1].AddXY(time, Y);

time:= time + TimeStep / 4;

end;

end;//TRiad.Graphic2

procedure TRiad.Graphic3(AChart : TChart);

//Построение графика

var

time : extended;

Y: extended;

begin

Time:= TimeStart;

AChart.Series[2].Clear; //Очистить Series[0]

AChart.BottomAxis.Increment:= Floor((TimeEnd - TimeStart) / 5);

//Занести значения в Series

while(time <= TimeEnd) do

begin

Y:= F(5,time);

AChart.Series[2].AddXY(time, Y);

time:= time + TimeStep / 4;

end;

end;//TRiad.Graphic3

function TRiad.F(w : integer;t : extended) : extended;

//вычисление функции

var

j:integer;

begin

 F:=(2*P/x)*(sin(w*t)-1/2*sin(2*w*t)+1/3*sin(3*w*t)-1/4*sin(4*w*t))

end;//TRiad.F

procedure TRiad.Table(AStringGrid : TStringGrid);

//Вывод информации в таблицу

var

k : integer;

time : extended;

y: extended;

begin

k:= 0;

time:= TimeStart;

 if w=1 then

while (time <= TimeEnd) do

begin

inc(k);

y:= F(w, time);

Form1.StringGrid1.Cells[2,k]:= FloatToStrF(y , ffFixed, 5, 3);

time:= time + TimeStep;

end

 else if w=3 then

while (time <= TimeEnd) do

begin

inc(k);

y:= F(w, time);

Form1.StringGrid1.Cells[3,k]:= FloatToStrF(y , ffFixed, 5, 3);

time:= time + TimeStep;

end

 else if w=5 then

while (time <= TimeEnd) do

begin

inc(k);

y:= F(w, time);

Form1.StringGrid1.Cells[4,k]:= FloatToStrF(y , ffFixed, 5, 3);

time:= time + TimeStep;

end ;

end;//TRiad.Table

procedure TRiad.WriteToIniFile;

//запись в Ini-файл

begin

IniFile.WriteInteger('Parameters', 'W', W);

IniFile.UpdateFile;//очистка буфера и запись файла на диск

end;//TRiad.WriteToIniFile

procedure TRiad.ReadFromIniFile;

//чтение из Ini-файла

begin

W:= IniFile.ReadInteger('Parameters', 'W', w);

end;//TRiad.ReadFromIniFile

function TRiad.GetW :integer;

begin

 result:= W;

end;//TRiad.GetW

procedure TRiad.SetW;

begin

if Form1.RadioGroup1.ItemIndex=-1 then

 MessageDlg(Pchar('Не выбрано значение w!!!'),mtError,[mbOk],0);

 if Form1.RadioGroup1.ItemIndex =0 then

 begin

 Form1.Label10.Caption:='1';

 w:=1;

 end

 else if Form1.RadioGroup1.ItemIndex =1 then

 begin

 Form1.label10.Caption:='3';

 w:=3;

 end

 else

 begin

 Form1.label10.Caption:='5';

 w:=5;

 end ;

 end;//TRiad.SetW

end.

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

library About;

{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This

 applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }

uses

 SysUtils,

 Classes,

 Forms,

 UnitAbout in 'UnitAbout.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 UnitAbout;

interface

uses

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

 Dialogs, StdCtrls, ExtCtrls, XPMan, Buttons;

type

 TFormAbout = class(TForm)

 Image1: TImage;

 Label1: TLabel;

 Label2: TLabel;

 Label3: TLabel;

 Label4: TLabel;

 BitBtn1: TBitBtn;

 Label5: TLabel;

 XPManifest1: TXPManifest;

 procedure BitBtn1Click(Sender: TObject);

 private

 { Private declarations }

 public

 { Public declarations }

 end;

var

 FormAbout: TFormAbout;

implementation

{$R *.dfm}

procedure TFormAbout.BitBtn1Click(Sender: TObject);

begin

 Close;

end;

end.

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

library Prompt;

{ Important note about DLL memory management: ShareMem must be the

 first unit in your library's USES clause AND your project's (select

 Project-View Source) USES clause if your DLL exports any procedures or

 functions that pass strings as parameters or function results. This

 applies to all strings passed to and from your DLL--even those that

 are nested in records and classes. ShareMem is the interface unit to

 the BORLNDMM.DLL shared memory manager, which must be deployed along

 with your DLL. To avoid using BORLNDMM.DLL, pass string information

 using PChar or ShortString parameters. }

uses

 SysUtils,

 Classes,

 Windows,

 UnitPrompt in 'UnitPrompt.pas' {FormPrompt};

{$R *.res}

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

procedure ShowPrompt(AOwner:TComponent);

var

Time:extended;

Form:TFormPrompt;

begin

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

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

Form.Show; //Показать форму

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

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

while GetTickCount/1000<Time+4 do;

Form.Close; //Закрыть форму

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

end;

exports ShowPrompt;

begin

end.

unit UnitPrompt;

interface

uses

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

 Dialogs, ExtCtrls, XPMan;

type

 TFormPrompt = class(TForm)

 XPManifest1: TXPManifest;

 Image1: TImage;

 private

 { Private declarations }

 public

 { Public declarations }

 end;

var

 FormPrompt: TFormPrompt;

implementation

{$R *.dfm}

end.

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

library MyServer;

{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }

uses

 SysUtils,

 ComServ,

 UComRiad in 'UComRiad.pas',

 UCom_Tlb in 'UCom_Tlb.pas',

 Classes,

 MyServer_TLB in 'MyServer_TLB.pas';

exports

DllGetClassObject,

DllCanUnloadNow,

DllRegisterServer,

DllUnregisterServer;

{$R *.TLB}

{$R *.res}

begin

end.


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

unit UComRiad;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses

Windows, ActiveX, Classes, ComObj, Chart, Grids, Math, SysUtils, IniFiles,

UCom_Tlb, ExtCtrls;

type

TRiad = class(TComObject, IComRiad)

protected

IniFile : TIniFile; //Объект Ini-файла

w : integer;

public

Procedure Create(AIniFileName : string); stdcall;

Destructor Destroy;

procedure Graphic(AChart:TChart); stdcall; //Постоение графика

procedure Table(AStringGrid:TStringGrid); stdcall; //Вывод в таблицу

procedure WriteToIniFile; stdcall; //Запись в Ini-файл

procedure ReadFromIniFile; stdcall; //Чтение из Ini-файла

function GetW : integer; stdcall; //Получить w

procedure SetW; stdcall; //Установить w

function F(w:integer; t:extended):extended;stdcall;//Вычисление суммы


private

end;

implementation

uses ComServ, Dialogs, Graphics, UnitMain;

const P=500;

const x=1;

const TimeStart=0; //Время начала отсчета

const TimeEnd=100; //Время окончания отсчета

const TimeStep=0.5; //Шаг дискретизация времени

Procedure TRiad.Create(AIniFileName : string);

begin

//Создать объект Ini-файла

IniFile:= TIniFile.Create(AIniFileName);

end;//TRod.Create

Destructor TRiad.Destroy;

begin //Не используется

//Удалить из Heap объект Ini-файла

if Assigned(IniFile) then

begin

IniFile.Free;

IniFile:= NIL;

end;

end;//TRod.Create

procedure TRiad.Graphic(AChart : TChart);

//Построение графика

var

time : extended;

Y1, Y2 : extended;

begin

Time:= TimeStart;

AChart.Series[0].Clear; //Очистить Series[0]

AChart.Series[1].Clear; //Очистить Series[1]

AChart.BottomAxis.Increment:= Floor((TimeEnd - TimeStart) / 5);

//Занести значения в Series

while(time <= TimeEnd) do

begin

Y1:= F(w,time);

Y2:= F(w,time);

AChart.Series[0].AddXY(time, Y1);

AChart.Series[1].AddXY(time, Y2);

time:= time + TimeStep / 4;

end;

end;//TRiad.Graphic

function TRiad.F(w : integer;t : extended) : extended;

//вычисление функции

var

j:integer;

begin

 F:=(2*P/x)*(sin(w*t)-1/2*sin(2*w*t)+1/3*sin(3*w*t)-1/4*sin(4*w*t))

end;//TRiad.F

procedure TRiad.Table(AStringGrid : TStringGrid);

//Вывод информации в таблицу

var

k : integer;

time : extended;

y: extended;

begin

k:= 0;

time:= TimeStart;

while (time <= TimeEnd) do

begin

inc(k);

y:= F(w, time);

Form1.StringGrid1.Cells[2,k]:= FloatToStrF(y , ffFixed, 5, 3);

time:= time + TimeStep;

end;

end;//TRiad.Table

procedure TRiad.WriteToIniFile;

//запись в Ini-файл

begin

IniFile.WriteInteger('Parameters', 'W', W);

IniFile.UpdateFile;//очистка буфера и запись файла на диск

end;//TRiad.WriteToIniFile

procedure TRiad.ReadFromIniFile;

//чтение из Ini-файла

begin

W:= IniFile.ReadInteger('Parameters', 'W', w);

end;//TRiad.ReadFromIniFile


function TRiad.GetW :integer;

begin

 result:= W;

end;//TRiad.GetW

procedure TRiad.SetW;

begin

if Form1.RadioGroup1.ItemIndex=-1 then

 MessageDlg(Pchar('Не выбрано значение w!!!'),mtError,[mbOk],0);

 if Form1.RadioGroup1.ItemIndex =0 then

 begin

 Form1.Label10.Caption:='1';

 w:=1;

 end

 else if Form1.RadioGroup1.ItemIndex =1 then

 begin

 Form1.label10.Caption:='3';

 w:=3;

 end

 else

 begin

 Form1.label10.Caption:='5';

 w:=5;

 end ;

 end;//TRiad.SetW

initialization

TComObjectFactory.Create(ComServer, TRiad, Class_ServerRiad,

'ServerRiad', '', ciMultiInstance, tmApartment);

end.

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

unit UCom_Tlb;

interface

uses Chart, Grids, StdCtrls, ExtCtrls;

const

Class_ServerRiad: TGUID = '{1CB7B26E-5BAF-4BA7-8F17-EA174D7CD750}';

Type

IComRiad = interface

['{1326DD83-DB3E-4054-9572-CFB9EAE3FE95}']

Procedure Create(AIniFileName : string); stdcall;

procedure Graphic(AChart:TChart); stdcall; //Постоение графика

procedure Table(AStringGrid:TStringGrid); stdcall; //Вывод в таблицу

procedure WriteToIniFile; stdcall; //Запись в Ini-файл

procedure ReadFromIniFile; stdcall; //Чтение из Ini-файла

function Getw : integer; stdcall; //Получить w

procedure Setw; stdcall; //Установить w

function F(w:integer; t:extended):extended;stdcall;//Вычисление суммы

end;

implementation

end.


Информация о работе «Программная реализация разложения временного процесса в тригонометрический ряд»
Раздел: Информатика, программирование
Количество знаков с пробелами: 39869
Количество таблиц: 0
Количество изображений: 12

Похожие работы

Скачать
124889
11
2

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

Скачать
232852
0
0

... с приглашением по запросу (в машинной графике)required parameter обязательный параметрrequired space обязательный пробел (в системах подготовки текстов)requirements specification 1. техническое задание 2. описание требований к программному средствуrerun перезапуск, повторный запускreschedule переупорядочивать очередь (о диспетчере операционной системы)reschedule interval период переупорядочения ...

Скачать
97197
9
2

... одна из ее сторон – урок. В работе доказано, что самоанализ урока является основой эффективного управления процессом обучения. Дальнейшей же перспективой исследования является рассмотрение самоанализа всей деятельности учителя как основы управления процессом обучения математике. Изложенное выше позволяет считать, что самоанализ урока математики позволяет управлять процессом обучения школьников и ...

Скачать
185895
9
45

... .3 +810.3 Срок окупаемости Лет -- 0.242 --   Вывод Из данного расчета и проведенного анализа технико-экономических показателей делаем вывод о целесообразности внедрения «Автоматизированной системы управления компрессорной установкой». Так как в результате годовая экономия затрат от автоматизации системы составляет 3347839.05 рублей. Это достигается за счет экономии в зарплате 785925.5 ...

0 комментариев


Наверх