3.1 Системные требования
Pentium 133 Mhz, RAM 32 Mb, HDD 10Mb, Windows 98
3.2 Помощь
Для справки нажмите F1, и появится окно
Рис.8- Справка
3.3 Установка программы
Для установки программы необходимо скопировать папку EXE
Содержимое папки:
Project1.exe
Mydll.dll
Helpkurs
Выводы
Таким образом,данная работа позволила мне:
1. закрепить на опыте знания, полученные при изучении дисциплины “Системное программирование”.
2. научился разрабатывать программные продукты под операционную среду Windows
3. закрепил следующие знания:
- Программирование в Delphi
- Программирование программ использующие код, написанный на других языках программирования (использование DLL )
- Динамическая компоновка с DLL
- Численные методы для вычисления определенных интегралов
- Написание Help в стиле Windows.
Список используемой литературы
1. Delphi 6. Для профессионалов. Разработка COM: Пер.с англ.:-464c. 2005
2. Разработка приложений в среде Delphi: пер.с англ.:Уч.пос-М.:Издательский дом «Вильямс»,2006.-464с.
Листингпрограммы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus, ExtDlgs, ExtCtrls, ToolWin, Gauges,
AppEvnts, TeEngine, Series, TeeProcs, Chart, TeeFunci, Buttons, ShellAPI,
ScktComp, ImgList;
type
TKurs = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Edzn1: TEdit;
Edzn2: TEdit;
Edit3: TEdit;
MainMenu1: TMainMenu;
file1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
SavePictureDialog1: TSavePictureDialog;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
StatusBar1: TStatusBar;
Imint: TImage;
Cbint: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
CBmet: TComboBox;
Memo1: TMemo;
Label5: TLabel;
Burun: TButton;
N7: TMenuItem;
N22GetCurrentDirectory1: TMenuItem;
N52SetForegroundWindow1: TMenuItem;
DateTimePicker1: TDateTimePicker;
Imgraf: TImage;
Label6: TLabel;
Buclear: TButton;
Bitgraf: TBitBtn;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ApplicationEvents1: TApplicationEvents;
N8: TMenuItem;
N9: TMenuItem;
ImageList1: TImageList;
Timer1: TTimer;
Gauge1: TGauge;
N10: TMenuItem;
N11: TMenuItem;
ColorDialog1: TColorDialog;
ColorDialog2: TColorDialog;
N12: TMenuItem;
procedure N1Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure CbintChange(Sender: TObject);
procedure BurunClick(Sender: TObject);
procedure int1(a,b:real;n:integer;var ss:real);
procedure int2(a,b:real;n:integer;var ss:real);
procedure FormCreate(Sender: TObject);
procedure N22GetCurrentDirectory1Click(Sender: TObject);
procedure N52SetForegroundWindow1Click(Sender: TObject);
procedure ApplicationEvents1Hint(Sender: TObject);
procedure BuclearClick(Sender: TObject);
procedure BitgrafClick(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
tfun=function(x:real):real;
var
Kurs: TKurs;
INT,F1,f2:tfun;
han:thandle;
k:boolean;
a,b,s,h,ss,y0,yn,s2,x2,xx1,xx2,xk:real;
n,n1,i1:integer;
mplementation
uses Unit2, Unit3, Unit4, Unit5 ;
{$R *.dfm}
procedure TKurs.N1Click(Sender: TObject);
begin
Imgraf.Picture.SaveToFile(SavePictureDialog1.FileName+'.bmp');
end;
procedure TKurs.N4Click(Sender: TObject);
begin
if k=true then begin
N1.Enabled:=true;
if SavePictureDialog1.Execute then
Imgraf.Picture.SaveToFile(SavePictureDialog1.FileName+'.bmp');
end
else
ShowMessage('Ãðàôèê íå îòðèñîâàí');
end;
procedure TKurs.N6Click(Sender: TObject);
begin
Application.HelpCommand(HELP_FINDER,0);
end;
procedure TKurs.CbintChange(Sender: TObject);
begin
if CBint.Text='Èíòåãðàë ¹1' then
Imint.Picture.LoadFromFile('int.bmp') else
Imint.Picture.LoadFromFile('int1.bmp');
end;
procedure TKurs.BurunClick(Sender: TObject);
begin
a:=strtofloat(Edzn1.text);
b:=strtofloat(Edzn2.text);
n:=strtoint(Edit3.Text);
if (edzn1.Text<>'') and (Edzn2.Text<>'') and
(Cbint.ItemIndex<>-1)and (CBmet.ItemIndex<>-1) then
begin
try
If (Cbint.Text='Èíòåãðàë ¹1') then
int:=f1;
if (CBmet.Text='Ìåòîäîì Ñèìïñîíà') then
int1(a,b,n,ss);
if (CBint.Text='Èíòåãðàë ¹1') then
int:=f1;
if (CBmet.Text='Ìåòîäîì òðàïåöèé') then
int2(a,b,n,ss);
if (Cbint.Text='Èíòåãðàë ¹2') then
int:=f2;
if (CBmet.Text='Ìåòîäîì Ñèìïñîíà')then
int1(a,b,n,ss);
if (CBint.Text='Èíòåãðàë ¹2') then
int:=f2;
if (CBmet.Text='Ìåòîäîì òðàïåöèé')then
int2(a,b,n,ss);
Memo1.Lines.Add(' '+CBint.Text);
Memo1.Lines.Add((CBmet.Text)+' = '+(FloatToStrF(ss,ffNumber,9,3)));
finally
if (a)>(b)
then
ShowMessage('Ââåðõíÿÿ ãðàíèöà äîëæíà áûòü áîëüøå íèæíåé');
end;
end
else
if (Edzn1.Text=' ') then ShowMessage('Íå ââåäåíà ââåðõíÿÿ ãðàíèöà!');
if (Edzn2.Text=' ') then ShowMessage('Íå ââåäåíà íèæíÿÿ ãðàíèöà!');
if (Cbint.ItemIndex=-1) then ShowMessage('Âíèìàíèå!Íå âûáðàí èíòåãðàë!');
if (CBmet.ItemIndex=-1) then ShowMessage('Íå âûáðàí ìåòîä ðåøåíèÿ!');
end;
procedure TKurs.FormCreate(Sender: TObject);
begin
han:=loadlibrary('mydll.dll');
if han=0 then showmessage('+Áèëèîòåêà íå íàéäåíà!')
else
begin
@f1:=getprocaddress(han,'f1');
@f2:=getprocaddress(han,'f2');
end;
end;
procedure TKurs.int1(a,b:real;n:integer;var ss:real);
ar i1,i2,i:integer;h,s,s1,x1,s2,x2,yn,x:real;
begin
i:=1;
s1:=0;
y0:=INT(a);
h:=(b-a)/n;
repeat
x1:=a+i*h;
s1:=s1+INT(x1);
i:=i+2;
until i>n-1;
i1:=2;
s2:=0;
yn:=INT(b);
repeat
x2:=a+i1*h;
s2:=s2+INT(x2);
i1:=i1+2;
until i1>n-2;
yn:=a-n*h;
s:=(h/3)*(y0+4*s1+2*s2+yn);
ss:=s;
end;
procedure TKurs.int2(a,b:real;n:integer;var ss:real);
var i,j:integer;k:real;
begin
Form5.StringGrid1.Cells[0,0]:='I';
Form5.StringGrid1.Cells[1,0]:='Xi';
form5.StringGrid1.Cells[2,0]:='SQR(Xi)';
Form5.StringGrid1.Cells[3,0]:='(0.5*sqr(Xi)+1.5))';
Form5.StringGrid1.Cells[4,0]:='y0..yn';
Form5.StringGrid1.Cells[5,0]:='y1..yn';
s:=0;
h:=(b-a)/n;
Form5.Label2.Caption:=floattostr(h);
Form5.StringGrid1.RowCount:=n+3;
for i:=0 to n do begin
s:=s+iNT(a+i*h);
j:=0;
Form5.StringGrid1.Cells[j,i+1]:=intToStr(i);
j:=1;
Form5.StringGrid1.Cells[j,i+1]:=FloatToStrF((a+i*h),ffNumber,4,4);
j:=2;
orm5.StringGrid1.Cells[j,i+1]:=FloatToStrF(sqr(a+i*h),ffNumber,4,4);
j:=3;
form5.StringGrid1.Cells[j,i+1]:=FloatToStrF(0.5*sqr(a+i*h)+1.5,ffNumber,4,4);
j:=5;
Form5.StringGrid1.Cells[j,i+2]:=FloatToStrF(int(a+(i+1)*h),ffNumber,4,4);
end;
Form5.Show;
Form5.StringGrid1.Cells[0,n+2]:='Ñóììà';
Form5.StringGrid1.Cells[5,n+2]:=FloatToStrF(s-(int(a+(n)*h)+int(a+0*h)),ffNumber,4,4);
Form5.StringGrid1.Cells[4,1]:=FloatToStrF(int(a+0*h),ffNumber,4,4);
Form5.StringGrid1.Cells[4,n+1]:=FloatToStrF(int(a+(n)*h),ffNumber,4,4);
Form5.StringGrid1.Cells[4,n+2]:=FloatToStrF(int(a+(n)*h)+int(a+0*h),ffNumber,4,4);
s:=((INT(a)+INT(b))/2+s)*h;
ss:=s;
end;
procedure TKurs.N22GetCurrentDirectory1Click(Sender: TObject);
begin
form2.Show;
end;
procedure TKurs.N52SetForegroundWindow1Click(Sender: TObject);
begin
form3.Show;
end;
procedure TKurs.ApplicationEvents1Hint(Sender: TObject);
begin
StatusBar1.Panels[0].Text:=Application.Hint;
end;
procedure TKurs.BuclearClick(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TKurs.BitgrafClick(Sender: TObject);
var
x,ymin,ymax,hx1,hx,hy,xn,xk,mx,sx,my,sy,yy,xx:real;i,X1,Y1,Y2,x3,xa,ya,xb,yb:integer;
begin
if Timer1.Enabled=false then
Timer1.Enabled:=true;
Kurs.Imgraf.Canvas.FillRect(rect(0,0,620,370));
xn:=strtofloat(Edzn1.text);
xk:=StrTofloat(Edzn2.Text);
n:=strtoint(Edit3.Text);
x:=xn;ymax:=-1e30;ymin:=1e30;
while x<=xk do
begin
if RadioButton1.Checked then
int:=f1;
if RadioButton2.Checked then
int:=f2;
int1(x,xk,n,ss);
if ss>ymax then ymax:=ss;
if ss<ymin then ymin:=ss;
x:=x+0.01;
end;
x:=xn;
int1(x,xk,n,ss);
x1:=round(mx*x+sx);
y1:=round(my*x+sy);
repeat
int1(x,xk,n,ss);
x3:=ROUND(mx*x+sx);y2:=round(-my*ss+sy);
kurs.Imgraf.Canvas.Pen.Color:=ColorDialog2.color;
kurs.Imgraf.Canvas.Brush.Color:=clwhite;
kurs.Imgraf.Canvas.MoveTo(x1,y1);
kurs.Imgraf.Canvas.LineTo(x3,y2);
x1:=x3;y1:=y2;
k:=true;
kurs.Imgraf.Canvas.Pen.Color:=clred;
kurs.Imgraf.Canvas.Pen.Width:=2;
hx1:=1;
hx:=(xk-xn)/10;
xa:=0;ya:=0;xb:=450;yb:=310;
mx:=(xb-xa)/(xk-xn);my:=(yb-ya)/(ymax-ymin);
sy:=ya+my*ymax;sx:=xa-mx*xn;
kurs.Imgraf.Canvas.MoveTo(xb,yb);
kurs.Imgraf.Canvas.LineTo(xa,yb);
x:=x+0.01;
until x>xk;
i:=3;
xx:=xn;
//âåðòèêàëüíûå ñîñòîâëÿþùèå
repeat
kurs.Imgraf.Canvas.MoveTo(i,ya);
kurs.Imgraf.Canvas.LineTo(i,yb);
kurs.Imgraf.Canvas.TextOut(i,yb+5,FloatToStr(xx));
inc(i,Round((Imgraf.Width-50)/10));
xx:=xx+hx;
until i>Imgraf.Width;
//ãîðèçîíòàëüíûå ñîñòàâëÿþùèå
i:=Imgraf.Height-50;
repeat
yy:=(sy-i)/my;
kurs.Imgraf.Canvas.MoveTo(0,i);
kurs.Imgraf.Canvas.LineTo(Imgraf.Width,i);
kurs.Imgraf.Canvas.TextOut(0,i-5,FloatToStrF(yy,ffNumber,4,2));
i:=i-round(hy);
dec(i,Round((Imgraf.Height-50)/10));
until i<0 ;
end;
rocedure TKurs.RadioButton1Click(Sender: TObject);
begin
Bitgraf.Enabled:=true;
end;
procedure TKurs.RadioButton2Click(Sender: TObject);
begin
Bitgraf.Enabled:=true;
end;
procedure TKurs.Button3Click(Sender: TObject);
begin
SetForegroundWindow(HWND_TOP );
end;
procedure TKurs.N9Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TKurs.Timer1Timer(Sender: TObject);
begin
Gauge1.Progress:=Gauge1.Progress+10;
if Gauge1.Progress=100 then begin
Timer1.Enabled:=false;
Gauge1.Progress:=0;
end;
end;
procedure TKurs.N10Click(Sender: TObject);
begin
if ColorDialog2.Execute then
kurs.Imgraf.Canvas.Pen.Color:=ColorDialog1.Color;
end;
procedure TKurs.N11Click(Sender: TObject);
begin
if ColorDialog1.Execute then
kurs.Imgraf.Canvas.Pen.Color:=ColorDialog1.Color;
end;
procedure TKurs.N12Click(Sender: TObject);
begin
Kurs.Close;
end;
end.