StringGrid.ColCount, EmptyParam, EmptyParam);k:= 1;//Перенести данные из StringGrid в таблицуfor i:= 1 to AStringGrid.RowCount dofor j:= 1 to AStringGrid.ColCount dowd.Tables.Item(k).Cell(i,j).Range.Text:= AStringGrid.Cells[j-1, i-1];//Загрузить изображение в ImageFormGraphic.Image1.Picture.LoadFromFile('PictureWord.bmp');//Поместить изображение в буфер обменаClipboard.Assign(FormGraphic.Image1.Picture);c:= Length(wd.Range.Text) - 1;a:= c;//Вставить изображение из буфера обменаwa.Selection.Paste;//Показать Wordwa.Visible:= true;//Уничтожить формуFormGraphic.Release;FormGraphic:= NIL;end;//TFormMain.ReportWordprocedure TForm1.Excel1Click(Sender: TObject);begin ReportExcel(StringGrid1); end;procedure TForm1.SpeedButton2Click(Sender: TObject);begin WinExec('hh.exe 1.chm',SW_SHOW);end;end.Файл вывода графика UnitGraphic.pasunit UnitGraphic;interfaceuses 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;implementationuses UnitRiad;{$R *.dfm}procedure TFormGraphic.Button1Click(Sender: TObject);beginChart1.Series[0].Clear;Chart1.Series[1].Clear;Chart1.Series[2].Clear;Close;end;//TFormGraphic.Button1Clickprocedure 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);beginChart1.Series[0].Clear;Chart1.Series[1].Clear;Chart1.Series[2].Clear;end;end.end.Файл реализации класса - UnitRiad.pasunit UnitRiad;interfaceuses Chart, Series, Math, Grids, SysUtils, Types, Graphics, IniFiles, Messages, Dialogs, StdCtrls, Variants, Classes, Controls, Forms, ExtCtrls, Buttons, Menus;TypeTRiad = class //классprivateIniFile : TIniFile; //Объект Ini-файлаw: integer;publicConstructor 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; //Получить wprocedure SetW; //Установить wfunction F(w:integer;t:extended):extended;//Вычисление суммы//property ww : integer read GetW write SetW;privateend;varRiad : TRiad; //Объектimplementationuses 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.CreateDestructor TRiad.Destroy;begin//Удалить из Heap объект Ini-файлаif Assigned(IniFile) thenbeginIniFile.Free;IniFile:= NIL;end;end;//TRiad.Createprocedure TRiad.Graphic1(AChart : TChart);//Построение графикаvartime : extended;Y: extended;beginTime:= TimeStart;AChart.Series[0].Clear; //Очистить Series[0]AChart.BottomAxis.Increment:= Floor((TimeEnd - TimeStart) / 5);//Занести значения в Serieswhile(time <= TimeEnd) dobeginY:= F(1,time);AChart.Series[0].AddXY(time, Y);time:= time + TimeStep / 4;end;end;//TRiad.Graphic1procedure TRiad.Graphic2(AChart : TChart);//Построение графикаvartime : extended;Y: extended;beginTime:= TimeStart;AChart.Series[1].Clear; //Очистить Series[0]AChart.BottomAxis.Increment:= Floor(( TimeEnd- TimeStart) / 5);//Занести значения в Serieswhile(time <= TimeEnd) dobeginY:= F(3,time);AChart.Series[1].AddXY(time, Y);time:= time + TimeStep / 4;end;end;//TRiad.Graphic2procedure TRiad.Graphic3(AChart : TChart);//Построение графикаvartime : extended;Y: extended;beginTime:= TimeStart;AChart.Series[2].Clear; //Очистить Series[0]AChart.BottomAxis.Increment:= Floor((TimeEnd - TimeStart) / 5);//Занести значения в Serieswhile(time <= TimeEnd) dobeginY:= F(5,time);AChart.Series[2].AddXY(time, Y);time:= time + TimeStep / 4;end;end;//TRiad.Graphic3function TRiad.F(w : integer;t : extended) : extended;//вычисление функцииvarj: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.Fprocedure TRiad.Table(AStringGrid : TStringGrid);//Вывод информации в таблицуvark : integer;time : extended;y: extended;begink:= 0;time:= TimeStart; if w=1 thenwhile (time <= TimeEnd) dobegininc(k);y:= F(w, time);Form1.StringGrid1.Cells[2,k]:= FloatToStrF(y , ffFixed, 5, 3);time:= time + TimeStep;end else if w=3 thenwhile (time <= TimeEnd) dobegininc(k);y:= F(w, time);Form1.StringGrid1.Cells[3,k]:= FloatToStrF(y , ffFixed, 5, 3);time:= time + TimeStep;end else if w=5 thenwhile (time <= TimeEnd) dobegininc(k);y:= F(w, time);Form1.StringGrid1.Cells[4,k]:= FloatToStrF(y , ffFixed, 5, 3);time:= time + TimeStep;end ;end;//TRiad.Tableprocedure TRiad.WriteToIniFile;//запись в Ini-файлbeginIniFile.WriteInteger('Parameters', 'W', W);IniFile.UpdateFile;//очистка буфера и запись файла на дискend;//TRiad.WriteToIniFileprocedure TRiad.ReadFromIniFile;//чтение из Ini-файлаbeginW:= IniFile.ReadInteger('Parameters', 'W', w);end;//TRiad.ReadFromIniFilefunction TRiad.GetW :integer;begin result:= W;end;//TRiad.GetWprocedure TRiad.SetW;beginif 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.SetWend. Файл описания динамической библиотеки 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.
Страницы: 1, 2, 3
|