Программный модуль учебного назначения по разделу математики "Многогранники"

Разработка и внедрение информационного и программного обеспечения для изучения темы "Многогранники" по геометрии; принципы проектирования учебно-методического комплекса; технология реализации интерфейса модуля; визуализация материала, контроль знаний.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 30.06.2012
Размер файла 3,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Рис. 20

Рис. 21

Изменять данные в открывшемся окне с последующим сохранением не предусмотрено, так как это окно вызывается данной процедурой именно для вывода результатов, с возможность сохранения и распечатки. Если необходимо, какие-то данные откорректировать, то нужно воспользоваться процедурой открытия БД, для этого необходимо нажать в главной форме кнопку «Открыть базу данных». Поиск в БД производится по средствам вызова макроса, встроенного в Excel книгу. Этот макрос прилагается (Приложение 1). В дальнейшем пользователь, имеющий соответственные знания по работе с макросами, может настроить работу этого макроса так, как ему нужно, но нельзя изменять имя данного макроса, так как вызов его происходит по имени. Открыть данную книгу Excel невозможно без утилиты «Teacher», так как она имеет пароль на открытие. Этот пароль заложен в самой программе, и никто кроме разработчика его не знает и не может изменить.

1.3) Редактирование вопросов теста

Модуль учебного назначения по разделу математики «Многогранники», содержит так же тест (Приложение 3). Для изменения вопросов теста также необходимо использовать эту утилиту. В утилите имеется встроенный редактор теста. Для вызова которого достаточно нажать на кнопку «Редактор» в главном окне программы. Редактор теста представляет собой окно, похожее на окно программы «Блокнот». В нем имеется встроенная справка, поясняющая как редактировать вопросы теста. Тест хранится в зашифрованном виде, но при открытии с помощью утилиты «Teacher», он расшифровывается. Функция кодирования, декодирования прилагается (Приложение 2). Это говорит о том, что человек, не имеющий доступ к этой программе, не сможет изменить вопрос или узнать правильный ответ. Утилита позволяет использовать подсветку текста вопросов для более комфортной работы. Окно этого редактора с загруженными вопросами изображено на рис. 22.

Рис. 22

Пример файлов вопросов в зашифрованном виде показан на рис. 23.

Рис. 23

Все эта защита вопросов теста гарантирует то, что человек, не имеющий соответствующего доступа, не сможет изменить или узнать правильные ответы на вопросы.

1.4) Параметры запуска приложения

Для того чтобы запретить запуск программного модуля учебного назначения по разделу математики «Многогранники» необходимо щелкнуть левой кнопкой мыши по кнопке «Параметры» в главном окне утилиты. Откроется окно изображено на рис. 24.

Рис. 24

В открывшемся окне «Параметры» нужно поставить галочку напротив надписи «Запретить запуск учебного модуля» и нажать на кнопку «OK». После чего при попытке запустить учебный модуль будет выдано сообщение «Запуск модуля запрещен преподавателем». Запустить учебный модуль каким-либо другим способом будет невозможно, пока преподаватель не изменит соответствующую настройку, то есть не снимет галочку в окне «Параметры».

1.5) Защита компонентов программы

Для защиты того или иного компонента программы нужно выбрать соответствующую кнопку в меню «Защита» главного окна «Teacher». После чего появится соответствующее окно, в которое необходимо ввести пароль. Пример окна защиты программы изображен на рис. 25.

Рис. 25

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

2) Настройка содержания

Программный модуль учебного назначения по разделу математики «Многогранники» является динамическим, то есть имеет возможность изменяться. Очень часто написанные программы учебного назначения не имеют функции добавления или удаления темы, раздела. Данный модуль по разделу математики «Многогранники» имеет встроенные функции для изменения содержания, пути к той или иной теме, а так же возможность автоматического построения содержания, что во много раз упрощает работу с модулем. Для настройки содержания нужно открыть папку «Многогранники», которая находится в папке с программой. В папке «Многогранники» содержатся все темы, вспомогательные библиотеки необходимые для работы учебного модуля по Многогранникам. В этой папке нужно запустить файл «Contents.xls», в котором определены все темы. Файл «Contents.xls» представляет собой таблицу, состоящую из столбцов: индекс, название темы и пути к этой теме. Примерное содержимое файла «Contents.xls» показано на рис. 26.

Рис. 26

Нужно учесть, что путь указывается от программы до html-страницы, содержащей необходимую тему. А сам файл содержания, как и все темы, находится в папке «Многогранники». Также в файле «Contents.xls» можно задать параметр автоматического создания содержания. Для этого в поле «Автоматически создавать содержание» нужно написать «Да» на русском или английском языке. Чтобы запретить автоматически создавать содержание, нужно оставить это поле пустым или написать «Нет».

Для защиты содержимого файла «Contents.xls» от несанкционированных изменений нужно выполнить следующие действия:

1) в главном меню выбрать пункт «Сервис»;

2) в пункте «Сервис» выбрать пункт «Защита»;

3) в открывшемся подменю выбрать пункт «Защитить лист…»:

4) в открывшемся окне «Защита листа» установить пароль.

Данное руководство по защите листа Excel подходит для продуктов Microsoft Office 2003, в продуктах других версий могут быть отличия в защите листа. Так как файл «Contents.xls» представляет собой книгу Excel, то для более тонкой работы с ним нужно иметь знания о работе в Excel. Наличие таких знаний от преподавателя не требуется, они необходимы только для внесения изменений в структуру самого файла «Contents.xls», что может привести к неработоспособности программы.

После внесения всех изменений в файл «Contents.xls» при выходе из него необходимо произвести операцию сохранения.

3.3.3 Руководство по инсталляции и сопровождению

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

1) центральный процессор класса Pentium III 433 МГц;

2) объём оперативной памяти не менее 128 Мб;

3) минимальная ёмкость жесткого диска 1,5 Гб;

4) стандартный манипулятор «мышь»;

5) стандартная клавиатура;

6) стандартный SVGA монитор.

Программный продукт, оперирует с достаточно большим объёмом информации. Данное обстоятельство накладывает дополнительные требования для компьютера, где будет установлена эта программа. Одним из таких требований является быстродействие системы в целом. При достаточно быстром обмене информации между процессором и памятью компьютера можно существенно сократить сроки поиска требуемой информации. Данное быстродействие можно достигнуть, используя современные процессор и модули памяти, которые работают на одной тактовой частоте системной шины не ниже 100 МГц. Для достижения требуемого быстродействия требуется наличие процессора класса Pentium III с тактовой частотой 433 МГц и объём оперативной памяти порядка 128 Мб. Так как в состав программы входит база данных, то одним из факторов, влияющим на быстродействие программного продукта, является ёмкость жесткого диска. В процессе работы с программой происходит постепенное накапливание информации, что приводит к неизбежному уменьшению емкости жесткого диска. Кроме этого, на диске находятся другие программы, которые также требуют определённого места на носителе. С учётом выше приведенных факторов требуется выбирать жесткий диск такого объёма, чтобы обеспечить оптимальную работу всей системы в целом. Для оптимальной работы программного продукта требуется минимальное наличие жесткого диска объёмом 1,5 Гб. Программа использует элементы графики, не требующие больших возможностей от видеокарты, поэтому видеосистема компьютера должна удовлетворять минимальным требованиям для обеспечения работы операционной системы. В качестве видеоадаптера можно использовать стандартный SVGA адаптер, а монитор должен обеспечивать разрешающую способность экрана 1280х1024 точек при частоте обновления экрана 85 Гц. Не допускается изменять имена папок, файлов, входящих в структуру программы и приложений, в противном случае действия программы могут не соответствовать функциональным характеристикам.

Заключение

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

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

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

Также проанализированы среды программирования, позволяющие использовать новые технологии, имеющие широкие возможности для предоставления разработчику соответствующего инструментария для скоростной разработки приложений. В качестве основной среды разработки была выбрана Delphi 2007, так как эта среда является первоклассным инструментом для быстрого и качественного создания приложений под Windows, в том числе Web-ориентированных приложений, за счет современного объектно-ориентированного языка, комплексной поддержки различных технологий и высокопроизводительного компилятора.

Реализованный программный продукт содержит следующие функции:

1) предоставление справочной информации по компонентам программы;

2) вывод текстовой и графической информации;

3) контекстный поиск;

4) сохранение информации;

5) вывод на печать, как теоретического материала, так и результатов тестирования;

6) тестирование;

7) защита компонентов программы.

Разработанная обучающе-тестирующая программа «Многогранники» может быть использована в учебном процессе и для самостоятельного обучения. Она способствует повышению мотивации учебно-познавательной деятельности, развитию логического и пространственного мышления студентов.

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

Данный программный продукт прошел апробацию в МОУ гимназии №23. Программный модуль учебного назначения по разделу математики «Многогранники» успешно использовался, как на уроках математики, так и на факультативных занятиях. Акт внедрения прилагается.

программный учебный модуль геометрия

Список используемых источников

1. Архангельский А.Я. Delphi 2006. Справочное пособие: Язык Delphi, классы, функции Win32 и .NET. -- М.: ООО «Бином-Пресс», 2006 г. -- 1152с.

2. Боровский А.Н. Программирование в Delphi 2005. -- СПб.: БХВ-Петербург, 2005. - 448 с.

3. Дарахвелидзе П.Г., Марков Е.П. Программирование в Delphi 2007. - СПб: БХВ - Петербург, 2003.-748 с.

4. Кнут Д.Э. Искусство программирования для ЭВМ. Т 1, 2. - М.: Мир, 2001.

5. Лабор В.В. Л 39 Си Шарп: Создание приложений для Windows/ В.В.

6. Лабор.-- Мн.: Харвест, 2003. - 384 с.

7. Педагогические технологии дистанционного обучения /под ред. Е.С. Полат. М.: Академия, 2006.

8. Нурмухамедов Г.М. О подходах к созданию электронного учебника // Информатика и образование. 2006. № 5.

9. ФЦП «Развитие единой образовательной информационной среды на 2001-2005 годы»

10. ФЦП «Электронная Россия (2002-2010 годы)»

11. Никонова Н.В. Программные средства для обучения математике Информатика и образование. 2006. № 5.

12. Роберт И.В. Современные информационные технологии в образовании: дидактические проблемы; перспективы использования. М.: Школа-Пресс, 1994.

13. Мартиросян Б.П. Оценка инновационной деятельности школы. М.: СпортАкадем-Пресс, 2003.

14. Карпова Е.А. Информатизация образовательного учреждения: Ростов-на-Дону, 2006 г.

15. http://www.delphikingdom.com/

16. http://www.delphiworld.narod.ru/

17. http://www.wikipedia.org

18. http://www.infojournal.ru

19. Л.С. Атанасян, В.Ф. Бутузов, С.Б. Кадомцев // Геометрия, 10-11: учеб. Для общеобразовательных учреждений// и 14-е изд.-М.: Просвещение, 2005.-206 с.: ил.

20. Коротков А.М., Петров А.В. Системный подход к обучению в дидактических компьютерных средах. http://www.vspu.ru/-tmepi/

Приложение 1

Вызов макроса из программы происходит по его имени «VB_Morozkin_2008», поэтому при изменении макроса его имя должно оставаться прежним. Далее представлен код макроса, написанного на Visual Basic for Application (VBA) с необходимыми комментариями.

Sub VB_Morozkin_2008()

Dim x, x1, x2 As String

Dim i, j, z, y, y1, y2, y3 As Integer

y = 0

y1 = 0

y2 = 0

y3 = 0

Следующий оператор выполняет поиск, если заполнены все поля поиска: «Дата», «Группа», «ФИО».

If (Sheets("Search").Cells(2, 1).Value <>"")_

And (Sheets("Search").Cells(2, 2).Value <> "") _

And (Sheets("Search").Cells(2, 6).Value <> "") Then

x = Cells(2, 1)

x1 = Cells(2, 2)

x2 = Cells(2, 6)

i = 2

j = 2

For i = 2 To 600

If (Sheets("Data").Cells(i, 6).Value = x2) And (Sheets("Data").Cells(i,

1).Value = x)_

And (Sheets("Data").Cells(i, 2).Value = x1) Then

Sheets("Search").Cells(j, 1).Value = Sheets("Data").Cells(i, 1).Value

Sheets("Search").Cells(j, 2).Value = Sheets("Data").Cells(i, 2).Value

Sheets("Search").Cells(j, 3).Value = Sheets("Data").Cells(i, 3).Value

Sheets("Search").Cells(j, 4).Value = Sheets("Data").Cells(i, 4).Value

Sheets("Search").Cells(j, 5).Value = Sheets("Data").Cells(i, 5).Value

Sheets("Search").Cells(j, 6).Value = Sheets("Data").Cells(i, 6).Value

j = j + 1

Else

End If

Next i

End If

Следующий оператор выполняет поиск, если заполнены следующие поля поиска: «Дата», «Группа».

If (Sheets("Search").Cells(2, 1).Value<> "")_

And (Sheets("Search").Cells(2, 2).Value = "") _

And (Sheets("Search").Cells(2, 6).Value <> "") Then

x = Cells(2, 1)

x2 = Cells(2, 6)

i = 2

j = 2

For i = 2 To 600

If (Sheets("Data").Cells(i, 6).Value = x2) And (Sheets("Data").Cells(i,

1).Value = x)_

Then

Sheets("Search").Cells(j, 1).Value = Sheets("Data").Cells(i, 1).Value

Sheets("Search").Cells(j, 2).Value = Sheets("Data").Cells(i, 2).Value

Sheets("Search").Cells(j, 3).Value = Sheets("Data").Cells(i, 3).Value

Sheets("Search").Cells(j, 4).Value = Sheets("Data").Cells(i, 4).Value

Sheets("Search").Cells(j, 5).Value = Sheets("Data").Cells(i, 5).Value

Sheets("Search").Cells(j, 6).Value = Sheets("Data").Cells(i, 6).Value

j = j + 1

Else

End If

Next i

End If

Следующий оператор определяет группу (класс) учащихся, необходимую для вывода в отчет.

Sheets("Chart").Cells(1, 2).Value = Sheets("Search").Cells(2, 1).Value

Следующий оператор определяет количество оценок и выводит их в отчет в виде таблице.

For i = 2 To 60

If Sheets("Search").Cells(i, 4).Value = 5 Then

y = y + 1

Else

If Sheets("Search").Cells(i, 4).Value = 4 Then

y1 = y1 + 1

Else

If Sheets("Search").Cells(i, 4).Value = 3 Then

y2 = y2 + 1

Else

If Sheets("Search").Cells(i, 4).Value = 2 Then

y3 = y3 + 1

End If

End If

End If

End If

Next i

Следующий оператор определяет средний балл успеваемости.

If (y <> 0) Or (y1 <> 0) Or (y2 <> 0) Or (y3 <> 0) Then

z = ((y * 5) + (y1 * 4) + (y2 * 3) + (y3 * 2)) / (y + y1 + y2 + y3)

End If

Следующий оператор выводит средний балл в ячейку таблицы.

Sheets("Chart").Cells(11, 2).Value = z

Следующий оператор выводит количество баллов в таблицу.

Sheets("Chart").Cells(6, 2).Value = y

Sheets("Chart").Cells(7, 2).Value = y1

Sheets("Chart").Cells(8, 2).Value = y2

Sheets("Chart").Cells(9, 2).Value = y3

Следующий оператор строит гистограмму успеваемости.

Range("B6:B9").Select

Charts.Add

ActiveChart.ChartType = xlColumnClustered

ActiveChart.SetSourceData Source:=Sheets("Chart").Range("B6:B9"),

PlotBy:= _

xlColumns

ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection(1).Values = "=Chart!R6C2"

ActiveChart.SeriesCollection(1).Name = "=""Количество пятёрок"""

ActiveChart.SeriesCollection(2).Values = "=Chart!R7C2"

ActiveChart.SeriesCollection(2).Name = "=""Количество четвёрок"""

ActiveChart.SeriesCollection(3).Values = "=Chart!R8C2"

ActiveChart.SeriesCollection(3).Name = "="" Количество троек"""

ActiveChart.SeriesCollection(4).Values = "=Chart!R9C2"

ActiveChart.SeriesCollection(4).Name = "="" Количество двоек"""

ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart"

With ActiveChart

HasAxis(xlCategory, xlPrimary) = False

HasAxis(xlValue, xlPrimary) = True

End With

ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic

With ActiveChart.Axes(xlCategory)

HasMajorGridlines = False

HasMinorGridlines = False

End With

With ActiveChart.Axes(xlValue)

HasMajorGridlines = False

HasMinorGridlines = False

End With

ActiveChart.SeriesCollection(1).Select

With Selection.Border

Weight = xlThin

LineStyle = xlAutomatic

End With

Selection.Shadow = False

Selection.InvertIfNegative = False

Selection.Fill.OneColorGradient Style:=msoGradientHorizontal, Variant:=3,

_

Degree:=0.231372549019608

With Selection

Fill.Visible = True

Fill.ForeColor.SchemeColor = 4

End With

ActiveChart.SeriesCollection(2).Select

With Selection.Border

Weight = xlThin

LineStyle = xlAutomatic

End With

Selection.Shadow = False

Selection.InvertIfNegative = False

Selection.Fill.TwoColorGradient Style:=msoGradientHorizontal, Variant:=3

With Selection

Fill.Visible = True

Fill.ForeColor.SchemeColor = 5

Fill.BackColor.SchemeColor = 41

End With

ActiveChart.SeriesCollection(3).Select

With Selection.Border

Weight = xlThin

LineStyle = xlAutomatic

End With

Selection.Shadow = False

Selection.InvertIfNegative = False

Selection.Fill.OneColorGradient Style:=msoGradientHorizontal, Variant:=3,

_

Degree:=0.231372549019608

With Selection

Fill.Visible = True

Fill.ForeColor.SchemeColor = 8

End With

ActiveChart.SeriesCollection(4).Select

With Selection.Border

Weight = xlThin

LineStyle = xlAutomatic

End With

Selection.Shadow = False

Selection.InvertIfNegative = False

Selection.Fill.OneColorGradient Style:=msoGradientHorizontal, Variant:=3,

_

Degree:=0.231372549019608

With Selection

Fill.Visible = True

Fill.ForeColor.SchemeColor = 3

End With

ActiveChart.SeriesCollection(1).Select

ActiveChart.SeriesCollection(1).ApplyDataLabels AutoText:=True,

LegendKey:= _

False, ShowSeriesName:=False, ShowCategoryName:=False,

ShowValue:=True, _

ShowPercentage:=False, ShowBubbleSize:=False

ActiveChart.SeriesCollection(2).Select

ActiveChart.SeriesCollection(2).ApplyDataLabels AutoText:=True,

LegendKey:= _

False, ShowSeriesName:=False, ShowCategoryName:=False,

ShowValue:=True, _

ShowPercentage:=False, ShowBubbleSize:=False

ActiveChart.SeriesCollection(3).Select

ActiveChart.SeriesCollection(3).ApplyDataLabels AutoText:=True,

LegendKey:= _

False, ShowSeriesName:=False, ShowCategoryName:=False,

ShowValue:=True, _

ShowPercentage:=False, ShowBubbleSize:=False

ActiveChart.SeriesCollection(4).Select

ActiveChart.SeriesCollection(4).ApplyDataLabels AutoText:=True,

LegendKey:= _

False, ShowSeriesName:=False, ShowCategoryName:=False,

ShowValue:=True, _

ShowPercentage:=False, ShowBubbleSize:=False

Следующий оператор открывает первую страницу книги Excel.

Sheets("Search").Select

Следующий оператор делает лист базы данных невидимым.

Sheets("Data").Visible = 0 - xlSheetHidden

End Sub

Приложение 2

function Decode(bCode: boolean; s:string):string;

const

// Крайние символы для кодирования

chBigFirstLetterRus: char = 'А';

chBigLastLetterRus: char = 'Я';

chFirstLetterRus: char = 'а';

chLastLetterRus: char = 'я';

chBigFirstLetterEng: char = 'A';

chBigLastLetterEng: char = 'Z';

chFirstLetterEng: char = 'a';

chLastLetterEng: char = 'z';

chFirstNumber='0';

chLastNumber='9';

var

iMinOrd: integer; // Код символа с наименьшим кодом

iMaxOrd: integer; // Код символа с наибольшим кодом

i: integer; // Для цикла

iTempOrd: integer; // Код подставляемого символа

ch: char; // Каждый символ текста

s1: string; // Преобразуемый текст

begin

s1 := Trim(form2x.RichEdit1.Text);

if s1 <> '' then // Если есть текст

for i := 1 to Length(s1) do // Проходит каждый символ

begin

ch := s1[i];

// Если очередной символ нужно кодировать

if ch in [chBigFirstLetterRus .. chBigLastLetterRus] then

// Заглавные буквы русского алфавита

begin

iMinOrd := Ord(chBigFirstLetterRus);

iMaxOrd := Ord(chBigLastLetterRus);

end

else

if ch in [chFirstLetterRus .. chLastLetterRus] then

// Строчные буквы русского алфавита

begin

iMinOrd := Ord(chFirstLetterRus);

iMaxOrd := Ord(chLastLetterRus);

end

else

if ch in [chBigFirstLetterEng .. chBigLastLetterEng] then

// Заглавные буквы английского алфавита

begin

iMinOrd := Ord(chBigFirstLetterEng);

iMaxOrd := Ord(chBigLastLetterEng);

end

else

if ch in [chFirstLetterEng .. chLastLetterEng] then

// Строчные буквы английского алфавита

begin

iMinOrd := Ord(chFirstLetterEng);

iMaxOrd := Ord(chLastLetterEng);

end

else

if ch in [chFirstNumber..chLastNumber] then // цифры

begin

iMinOrd := Ord(chFirstNumber);

iMaxOrd := Ord(chLastNumber);

end

else // Символ кодировать не нужно

continue;

if bCode then // Закодировать

begin

iTempOrd := Ord(ch) + n; // Получаем потенциальную позицию

if iMaxOrd - iTempOrd < 0 then

// Если символ зашел за границу предельного

ch := Chr(iMinOrd + abs(iMaxOrd - iTempOrd) - 1)

// Возьмем символ с другого конца круга

else // Если нет

ch := chr(iTempOrd); //все нормально

end

else // Раскодировать

begin

iTempOrd := Ord(ch) - n; // Получаем потенциальную позицию

if iMinOrd - iTempOrd > 0 then

// Если символ зашел за границу предельного

ch := Chr(iMaxOrd - (iMinOrd - iTempOrd - 1))

// Возьмем символ с другого конца круга

else // Если нет..

ch := chr(iTempOrd); //все нормально

end;

s1[i] := ch;

end;

Decode:= s1;

end;

Приложение 3

// масштабирование иллюстрации

Procedure ScaleImage(Image1:TImage);

var

w,h:integer; // максимально допустимые размеры картинки

scaleX:real; // коэф. масштабирования по X

scaleY:real; // коэф. масштабирования по Y

scale:real; // общий коэф. масштабирования

begin

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

w:=Form1x.ClientWidth-10;

h:=Form1x.ClientHeight

- Form1x.Panel1.Height -5

- Form1x.Label5.Top

- Form1x.Label5.Height - 5;

if Form1x.Label1.Caption <> ''

then h:=h-Form1x.Label1.Height-5;

if Form1x.Label2.Caption <> ''

then h:=h-Form1x.Label2.Height-5;

if Form1x.Label3.Caption <> ''

then h:=h-Form1x.Label3.Height-5;

if Form1x.Label4.Caption <> ''

then h:=h-Form1x.Label4.Height-5;

// определить масштаб

if w>Image1.Picture.Bitmap.Width

then scaleX:=1

else scaleX:=w/Image1.Picture.Bitmap.Width;

if h>Image1.Picture.Bitmap.Height

then scaleY:=1

else scaleY:=h/Image1.Picture.Bitmap.Height;

if ScaleY<ScaleX

then scale:=scaleY

else scale:=scaleX;

// здесь масштаб определен

Image1.Top:=Form1x.Label5.Top+Form1x.Label5.Height+5;

Image1.Width:=Round(Image1.Picture.Bitmap.Width*scale);

Image1.Height:=Round(Image1.Picture.Bitmap.Height*scale);

end;

// вывод вопроса на экран

Procedure VoprosToScr(var f:TextFile;frm:TForm1x;var vopros:integer);

var

i:integer;

code:integer;

s,buf:string;

b, ifn:string; // файл иллюстрации

begin

b:='Многогранники/Image/';

vopros:=vopros+1;

str(vopros:3,s);

frm.caption:='Вопрос' + s;

//Выведем текст вопроса

buf:='';

repeat

readln(f,s);

s:=Decode(false,s);

if (s[1] <> '$') and (s[1] <> '\')

then buf:=buf+s+' ';

until (s[1] ='$') or (s[1] ='\');

frm.Label5.caption:=buf;

if s[1] <> '\'

then Form1x.Image1.Tag:=0

else // к вопросу есть иллюстрация

begin

Form1x.Image1.Tag:=1;

ifn:=copy(s,2,length(s));

try

Form1x.Image1.Picture.LoadFromFile(b+ifn);

except

on E:EFOpenError do

frm.tag:=0;

end;

end;

// Читаем варианты ответов

i:=1;

repeat

buf:='';

repeat // читаем текст варианта ответа

readln(f,s);

s:=Decode(false,s);

if (s[1]<>'}') and (s[1] <> ',')

then buf:=buf+s+' ';

until (s[1]=',')or(s[1]='}');

// прочитан альтернативный ответ

val(s[2],score[i],code);

case i of

1: frm.Label1.caption:=buf;

2: frm.Label2.caption:=buf;

3: frm.Label3.caption:=buf;

4: frm.Label4.caption:=buf;

end;

i:=i+1;

until s[1]='}';

// здесь прочитана иллюстрация и альтернативные ответы

// текст вопроса уже выведен

if Form1x.Image1.Tag =1 // есть иллюстрация к вопросу

then begin

ScaleImage(Form1x.Image1);

Form1x.Image1.Visible:=TRUE;

end;

// вывод альтернативных ответов

if Form1x.Label1.Caption <> ''

then begin

if Form1x.Image1.Tag =1

then frm.Label1.top:=frm.Image1.Top+frm.Image1.Height+5

else frm.Label1.top:=frm.Label5.Top+frm.Label5.Height+5;

frm.RadioButton1.top:=frm.Label1.top;

frm.Label1.visible:=TRUE;

frm.RadioButton1.visible:=TRUE;

end;

if Form1x.Label2.Caption <> ''

then begin

frm.Label2.top:=frm.Label1.top+ frm.Label1.height+5;

frm.RadioButton2.top:=frm.Label2.top;

frm.Label2.visible:=TRUE;

frm.RadioButton2.visible:=TRUE;

end;

if Form1x.Label3.Caption <> ''

then begin

frm.Label3.top:=frm.Label2.top+ frm.Label2.height+5;

frm.RadioButton3.top:=frm.Label3.top;

frm.Label3.visible:=TRUE;

frm.RadioButton3.visible:=TRUE;

end;

if Form1x.Label4.Caption <> ''

then begin

frm.Label4.top:=frm.Label3.top+ frm.Label3.height+5;

frm.RadioButton4.top:=frm.Label4.top;

frm.Label4.visible:=TRUE;

frm.RadioButton4.visible:=TRUE;

end;

end;

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.