p align="left"> Delphi - прекрасный инструмент разработки, но в то же время и сложная программная среда, состоящая из многих элементов. 2. ПРАКТИЧЕСКИЕ АСПЕКТЫ ПРОГРАММЫ 2.1 Функционально-структурная схема
Рис. 1 - Функционально-структурная схема 2.2 Иерархия форм Рис.2 - Главная форма
Рис. 3- API -функции
Рис.4 - Главная форма (прорисовка графиков)
Рис.5 -Наглядный метод решения Рис.6 - Настройки
Рис 7 - Главная форма для вычисления интеграла Работа с программой начинается с этой формы. На этой форме вы можете рассчитать интеграл: 1. Выбрать интеграл 2. Выбрать метод (трапеций, Симпсона) 3. Ввести верхний предел интеграла 4. Ввести нижний предел интеграла 5. Ввести число разбиений 6. Нажав клавишу «Вперед» вычислить значение интеграла
Рис 8 - Форма для прорисовки графиков На этой форме можно получить значения интегралов в зависимости от значений нижней границы при фиксированных значениях верхней границы определенного интеграла и построить графики 1. Выбрать интеграл 2. Нажать клавишу «График» и получить график выбранного вами интеграла Рис 9 - Таблицы На этой форме показан более детально метод нахождения интегралов. Форма для применения функции Windows API SetForegroundWindow(HWND:hwnd); Рис 10 - API -функции На этой форме можно применить функцию SetForegroundWindow(HWND:hwnd) путем нажатия клавиши «Применить». Форма для применения функции Windows API SetCurrentDirectory(IpPathName:PChar):bool;
Рис.11 - API-функции На этой форме можно применить функцию SetCurrentDirectory(IpPathName:PChar):bool; путем нажатия клавиши «Применить». Форма настроек главной формы
Рис.12 - Настройки На этой форме расположены настройки с помощью которых настраивается цвет и шрифты главной формы. 2.3 Элементы главной формы |
Элемент формы | Назначение | Событие | | Bitgraf | Кнопка для запуска процедуры прорисовки графиков | BitgrafClick | | Buclear | Кнопка для очистки поля для вывода значений интегралов | BuclearClick | | Burun | Кнопка для запуска процедуры вычисления интегралов | BurunClick | | Cbint | Переключатель для выбора интеграла | CbintChange | | CBmet | Переключатель для выбора метода решения | | | ColorDialog | Палитра для выбора цвета | | | DateTimePicker | Календарь (день,месяц,год) | | | Edzn1 | Поле для ввода нижнего предела интеграла | | | Edzn2 | Поле для ввода верхнего предела интеграла | | | Gauge | Компонент для визуального отображения степени завершенности некоторой длительной орерации или процесса | | | Imgraf | Поле для вывода графически результатов вычисления | | | Imint | Поле для вывода графического изображения интеграла | | | Kurs | Главная форма | MainMenu FormCreate | | LbCbint | Метка которая указывает на переключатель Cbint | | | LbCbmet | Метка которая указывает на переключатель Cbmet | | | LbEdzn1 | Метка которая указывает поле Edzn1 | | | LbEdzn2 | Метка которая указывает поле Edzn2 | | | LbintGraf | Метка которая указывает поле Imgraf | | | MMoutput | Поле для вывода значений припостроении графика | | | LbznGr | Метка которая указывает поле MMoutput | | | N22SetCurrentDirectory | Пункт меню для применении функции SetCurrentDirectory | N22GetCurrentDirectory1Click | | N52SetForegroundWindow1Click | Пункт меню для применении функции SetForegroundWindow | N52SetForegroundWindow1Click | | RBint1 | Переключатель для построения графика на первый интеграл | RBint1Click | | RBint2 | Переключатель для построения графика на второй интеграл | RBint2Click | | StatusBar | Строка для вывода подсказок | | | |
2.4 Функции Windows API SetForeGroundWindow function SetForegroundWindow(hWnd: HWND): BOOL; Функция SetForegroundWindow(HWND:hwnd) предназначена для перевода окна, которое идентифицируемо пораметром hwnd,в" верхний слой " и перевода на него фокус, независимо от того, какой поток создал это окно. SetForegroundWindow( HWND hWnd // Маркер(дескриптор) окна, чтобы перенести к переднему плану) Параметры hWnd-дискриптор окна который идентифицирует окно, которое должно быть активизировано и перенесено к переднему плану. Применение: procedure TForm2.Timer1Timer(Sender: TObject); begin SetForegroundWindow(kurs.Handle); Timer1.Enabled:=false; end; Обработчиком события является таймер (Timer1Timer) который и запускает функцию SetCurrentDirectory function SetCurrentDirectory(lpPathName: PChar): BOOL; Функция SetCurrentDirectory(`lpPathName: PChar `) изменяет (устанавливает) текущий каталог. Возвращаемое значение было бы True, если текущий каталог был успешно изменен(заменен), или False, если ошибка произошла. SetCurrentDirectory( lpPathName // Адрес названия(имени) нового текущего каталога ); Параметры lpPathName Укажите на строку с нулевым символом в конце, которая определяет путь к новому текущему каталогу. Применение: procedure TForm3.Button1Click(Sender: TObject); begin SetCurrentDirectory('c:\'); end; Обработчиком события является кнопка (Button1Click) который и запускает функцию. 2.5 Основные процедуры Расчет интегралов 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 try try a:=strtoint(Edzn1.text); b:=strtoint(Edzn2.text); n:=strtoint(Edit3.Text); 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))); except on EConvertError do begin raise Exception.Create('Внимание!Ошибка в записи числа!'); end; end; finally if (a)>(b) then ShowMessage('Вверхняя граница должна быть больше нижней'); end; 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); var 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';
Страницы: 1, 2, 3, 4
|