Смекни!
smekni.com

Программная реализация разложения временного процесса в тригонометрический ряд (стр. 3 из 4)

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',

 UnitGraphicin 'UnitGraphic.pas' {FormGraphic},

 VremRiad_TLBin '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

elseShowMessage('Не найдена библиотека 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;

 procedureBitBtn3Click(Sender: TObject);

 procedureFormActivate(Sender: TObject);

 procedureBitBtn1Click(Sender: TObject);

 procedureBitBtn4Click(Sender: TObject);

 procedureBitBtn2Click(Sender: TObject);

 procedureN4Click(Sender: TObject);

 procedurePresentationClick(Sender: TObject);

 procedureWord1Click(Sender: TObject);

 procedureExcel1Click(Sender: TObject);

 procedureSpeedButton2Click(Sender: TObject);

 // ProcedureTFormMain.PresentationClick(Sender: TObject);

 

 private

 { Privatedeclarations }

 public

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

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

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

 { Publicdeclarations }

 end;


var

 Form1:TForm1;

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

 const x=1;

 const P=500;

 

 

implementation

uses UnitRiad,UnitGraphic;

{$R *.dfm}

procedureTForm1.BitBtn3Click(Sender: TObject);

begin

 Close;

end;

procedureTForm1.FormActivate(Sender: TObject);

 var i:integer;

begin

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

 Flag:= false;

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

 IniFileName:=GetCurrentDir+'&bsol;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 to201 do

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

 for i:=0 to201 do

 begin

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

 end;

 label10.Caption:='';

end;

procedureTForm1.BitBtn1Click(Sender: TObject);

 vari:integer;

 begin

 Riad.SetW();

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

 Riad.Table(StringGrid1);

 end;

procedureTForm1.BitBtn4Click(Sender: TObject);

var i:integer;

begin

 for i:=0 to201 do

 begin

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

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

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

 end;

end;

procedureTForm1.BitBtn2Click(Sender: TObject);

begin

 

 FormGraphic.Show;

end;

procedureTForm1.N4Click(Sender: TObject);

Type

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

TProc =procedure(AOwner:TComponent);

var

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

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

begin

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

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

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

if Handle = 0then

begin

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

exit;

end;

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

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

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

ShowAbout(Application);

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

end;

procedureTForm1.PresentationClick(Sender: TObject);

var

name : string;

pw : TOleEnum;

begin

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

Name:=ExtractFileDir(Application.ExeName) + '&bsol;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

procedureTForm1.Word1Click(Sender: TObject);

begin //Отчетв Word

ReportWord(StringGrid1);

end;//TFormMain.Word1Click

ProcedureTForm1.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 toAStringGrid.ColCount do

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

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

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

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

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

for i:= 1 toAStringGrid.RowCount + 1 do

for j:= 0 toAStringGrid.ColCount do

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


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

WorkBook.WorkSheets[1].Shapes.AddPicture(GetCurrentDir+'&bsol;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

ProcedureTForm1.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 toAStringGrid.RowCount do

for j:= 1 toAStringGrid.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

procedureTForm1.Excel1Click(Sender: TObject);

begin

 ReportExcel(StringGrid1);

 end;

procedureTForm1.SpeedButton2Click(Sender: TObject);

begin

 WinExec('hh.exe1.chm',SW_SHOW);

end;

end.

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

unitUnitGraphic;

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;

 procedureButton1Click(Sender: TObject);

 procedureBitBtn1Click(Sender: TObject);

 procedureBitBtn2Click(Sender: TObject);

 procedureBitBtn3Click(Sender: TObject);

 procedureBitBtn4Click(Sender: TObject);

 private

 { Privatedeclarations }

 public

 { Publicdeclarations }

 end;

var

 FormGraphic:TFormGraphic;

implementation

uses UnitRiad;


{$R *.dfm}

procedureTFormGraphic.Button1Click(Sender: TObject);

begin

Chart1.Series[0].Clear;

Chart1.Series[1].Clear;

Chart1.Series[2].Clear;

Close;

end;//TFormGraphic.Button1Click

procedureTFormGraphic.BitBtn1Click(Sender: TObject);

begin

 Riad.Graphic1(FormGraphic.Chart1);

end;

procedureTFormGraphic.BitBtn2Click(Sender: TObject);

begin

 Riad.Graphic2(FormGraphic.Chart1);

end;

procedureTFormGraphic.BitBtn3Click(Sender: TObject);

begin

 Riad.Graphic3(FormGraphic.Chart1);

end;

procedureTFormGraphic.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

ConstructorCreate(AIniFileName : string);

DestructorDestroy;

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

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

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

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

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

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

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

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

functionF(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;

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

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

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

ConstructorTRiad.Create(AIniFileName : string);

begin

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

IniFile:=TIniFile.Create(AIniFileName);

end;//TRiad.Create

DestructorTRiad.Destroy;

begin

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

ifAssigned(IniFile) then

begin

IniFile.Free;

IniFile:= NIL;

end;

end;//TRiad.Create

procedureTRiad.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