Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Практическое занятие 7





Работа с картинками в среде «Delphy»

Цель занятия

Знакомство студентов с компонентами Image, CheckBox, способами изменения параметров ввода из режима исполнения программы. Знакомство с типами заземляющих устройств, свойствами грунта и расчётом величины сопротивления растекания тока на землю промышленной частоты.

Задание 1

ЗапуститеДельфи. Измените заголовок формы на «Расчёт сопротивления заземлителя на частоте 50 Гц». Сохраните программу в папке практика 7. Проверьте число сохранённых файлов (должно быть не менее 6).

Поместите на форму компонент Panel, удалите её заголовок, измените её цвет на clInfoBk, измените размеры (1/4 по ширине и 2/3 по высоте формы) и переместите панель в левый верхний угол формы. Поместите на компонент Panel последовательно сверху вниз следующие компоненты:

1. label с названием «Тип грунта»;

2. ComboBox и создайте список грунтов (Items) в соответствии со столбцом 2 табл. 7.1;

Таблица 7.1. Типы грунтов и их удельные сопротивления

N Тип грунта Удельное сопротивление, r, Ом∙м
Торф, ил, солончак, песок сильно увлажнённый
Чернозём, зола, глина, земля садовая, бетон
Мергель глинистый, суглинок, песок увлажнённый
Супесь, песок влажный
Гравий глинистый, песок слегка влажный, лёсс, гнейс
Песчаник, песок сухой
Щебень мокрый, базальт
Гранит

 

3. label с названием «Тип заземлителя»;

4. ComboBox и создайте следующий список заземлителей (Items): вертикальный, вертикальный заглублённый, горизонтальный, контурный;

 

Рис. 7.1. Типы простых заземлителей

Сохраните рисунки четырёх заземлителей (см. рис. 7.1) в папке практика 7 с именами 1.bmp, 2.bmp, 3.bmp, 4.bmp. Если при выделении рисунка и нажатии правой кнопки мыши функция «сохранить рисунок как…» не поддерживается, то для выполнения операции сохранения рисунков сделайте следующее. Запустите какой-либо графический редактор, например, Paint из папки стандартных программ. Скопируйте в него рисунок и сохраните под указанным именем. Операцию повторите для всех рисунков. Убедитесь, что сохранённые рисунки 1.bmp, 2.bmp, 3.bmp, 4.bmp соответствует частям рис. 7.1.



5. шесть компонентов LabeledEdit из дополнительной палитры компонентов и измените их заголовки: «Длина (L), м»; «Диаметр (d), мм»; «Заглубление (h), м»; «Диаметр контура, м»; «Сторона a, м»; «Сторона b, м». В поле text каждого компонента введите числа, например 5;

6. компонент CheckBox из стандартной палитры компонентов;

7. компонент BitButton и измените его заголовок на Старт, а цвет шрифта на красный.

Положите на форму ниже панели отладочное поле Memo и вставьте линейки прокрутки.

Положите на форму справа от панели компонент Image и измените его размер так, чтобы он занимал оставшуюся часть формы. В свойство картинка Picture загрузите рисунок первого заземлителя.

Задание 2

Перейдите на окно кода программы, найдите раздел описания глобальных переменных (общих для всех процедур). Этот раздел должен содержать описание только var Form1: TForm1. Дополните этот раздел, добавив описание переменной rho:real;.

Двойным щелчком на форме создайте процедуру FormCreate. В теле процедуры запишите команды задания начальных значений номеров компонент ComboBox, значение переменной «rho», заголовки и видимость (свойство Visible:=True). Пример команд:

ComboBox1.ItemIndex:=0;

ComboBox2.ItemIndex:=0;

rho:=25;

chk1.Checked:=True;

chk1.Caption:='Кольцевой';

LabeledEdit1.Visible:=True;

LabeledEdit2.Visible:=True;

LabeledEdit3.Visible:=True;

LabeledEdit4.Visible:=True;

LabeledEdit5.Visible:=True;

LabeledEdit6.Visible:=True;

Двойным щелчком на компоненте ComboBox1 (типы грунтов) создайте процедуру ComboBox1.Change. В тело этой процедуры запишите значения, величин сопротивлений, которые соответствуют типам грунтов из табл. 7.1 по аналогии со следующим примером:

case ComboBox1.ItemIndex of

0:rho:=25;

end; {Case}.

Тогда, при выборе первого типа грунта его удельное сопротивление примет значение 25 Ом*м. Чтобы ввести второе значение, нужно после строки 0:rho:=25; вставить строку 1:rho:=50; и т.д. для всех типов грунтов.

Двойным щелчком на кнопке старт создайте основную процедуру и вставьте в её тело проверочную строку

memo2.Lines.Add(cbb1.Items[cbb1.ItemIndex]+' rho = '+FloatToStr(rho)+' Ом*м');.

Запустите программу на исполнение и проверьте правильность соответствия значений удельного сопротивления грунта названиям всех типов грунтов из табл. 7.1, выбирая тип грунта в ComboBox1 и нажимая кнопку «Старт».

Задание 3

Двойным щелчком на компоненте ComboBox2 (типы заземлителей) создайте процедуру ComboBox2.Change. В тело процедуры вставьте заготовку команды выбора:

case ComboBox2.itemindex of

0: begin

end; {0}

1: begin

end; {1}

2: begin

end; {2}

3: begin

end; {3}

end; {case – окончание процедуры выбора набора действий}



Операторные скобки begin end, стоящие после цифры 0 (1, 2 или 3), объединяют набор команд, записанных между ними, которые должны выполняться при выборе одного из значений списка ComboBox2.

Например, при выборе первого типа заземлителя (ComboBox2.itemindex = 0) должен загрузиться первый рисунок и измениться видимость некоторых компонент панели:

case ComboBox2.itemindex of

0: begin

img1.Picture.LoadFromFile('1.bmp');

LabeledEdit1.Visible:=True;

LabeledEdit2.Visible:=True;

LabeledEdit3.Visible:=false;

LabeledEdit4.Visible:=false;

LabeledEdit5.Visible:=false;

LabeledEdit6.Visible:=false;

chk1.Visible:=false;

end; {0}

1: begin

end; {1}

2: begin

end; {2}

3: begin

end; {3}

end; {Case}

По приведённому примеру запишите последовательность действий при выборе 2, 3 и 4 типа заземлителя (ComboBox2.itemindex = 1,2 или 3).

Проверьте изменения на панели при изменении выбора заземлителя.

Двойным щелчком на компоненте CheckBox1 (типы заземлителей) создайте процедуру CheckBox1Click. В тело процедуры впишите команды, которые должны выполняться при нажатии CheckBox1:

procedure TForm1. CheckBox1Click(Sender: TObject);

begin

if chk1.Checked

then

begin

LabeledEdit4.Visible:=true;

LabeledEdit5.Visible:=false;

LabeledEdit6.Visible:=false;

chk1.Caption:='Кольцевой';

end

else

begin

LabeledEdit4.Visible:=false;

LabeledEdit5.Visible:=true;

LabeledEdit6.Visible:=True;

chk1.Caption:='Прямоугольный';

end;

end;

Проверьте работу программы.

Задание 4

В разделе описания типов переменных основной процедуры запишите 3 переменных с плавающей запятой (например, типа Real): var d, L, R:real;.

В тело основной процедуры впишите команды чтения данных с формы, формулы вычисления сопротивления и вывода величины сопротивления. Поскольку для разных типов заземлителей различаются как типы исходных данных, так и формулы вычисления, наборы команд также должны различаться. Для реализации возможности таких различий создайте в теле основной процедуры заготовку выбора набора команд (оператор типа case I of….end) по аналогии с примером из задания 3. Между открывающей и закрывающей операторными скобками, соответствующими первому значению типа заземлителя 0: begin …end; {0} запишите команды чтения данных из элементов LabeledEdit, формулу вычисления сопротивления и вывод величины сопротивления в поле Memo. Напоминание:

1. значения исходных данных находятся в полях text соответствующих компонентов LabeledEdit и относятся к переменным типа TCaption (строка WideString), а в программе нужны численные значения этих переменных, относящихся к переменным с плавающей запятой (собирательное название всех таких переменных – Float). По этой причине команда типа L:= LabeledEdit1.Text приведёт к возникновению ошибки [Error] Unit1.pas(30): Incompatible types: 'Real' and 'TCaption'. Для преобразования строковой переменной в переменную с плавающей запятой служит функция StrToFloat(), а в круглых скобках указывается, какая строка преобразуется в число. Тогда правильная команда чтения значения должна иметь вид:

L:= StrToFloat(LabeledEdit1.Text);

2. Поскольку значение диаметра заземляющего устройства удобнее вводить в мм, а вычисления проводятся в м, то при записи команды чтения следует сразу же перевести значение диаметра из миллиметров в метры, умножив на 0,001 или разделив на 1000:

d:= StrToFloat(LabeledEdit2.Text)/1000;

3. После определения величин L и d, можно вычислять сопротивление заземляющего устройства, поскольку величина rho была определена ранее:

R:=rho/2/L/pi*ln(4*L/d);

4. Для вывода значения сопротивления в поле Memo следует осуществить обратное преобразование из числа с плавающей запятой (Float) в строковую переменную (String). Эта операция часто осуществляется с помощью функции FloatToStr(R). Недостатком этой функции является то, что она выводит до 14 знаков после запятой, что, вообще говоря, является ошибкой. Более правильное представление результатов расчётов будет, если использовать функцию FloatToStrF(R, ffFixed, 7, 2). В этой функции прямо указывается, что будет использоваться фиксированная форма вывода (ffFixed), в которой на число отводится 7 знаков, а на десятичную часть числа 2 знака. Более подробно о других форматах представления чисел с помощью этой функции можно ознакомиться, подведя курсор к названию функции и нажимая Ctrl+F1 (вызов справки, Help).

memo2.Lines.Add('Сопротивление заземления = '+ FloatToStrF(R, ffFixed, 7, 2)+ ' Ом');

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

Задание 5

По аналогии с заданием 4 дополните код основной процедуры вычислением сопротивления других типов простых заземлителей. Проверьте работу программы. При вводе информации для расчёта величины сопротивления заглублённого вертикального заземлителя величина h по определению не может быть меньше L/2 (см. рис. 7.1). Тем не менее, она может быть введена так, что значение 4h-L станет меньше нуля, а логарифм отрицательного числа не существует, что приведёт к ошибке и остановке программы. Для предотвращения такого сорта ошибки следует после ввода h из LabeledEdit поставить условие: если h < L/2, тогда h:= L/2 + 0.2.

Задание 6

Рассчитайте значения сопротивления для различных типов заземлителей, значений длины, глубины заземления, диаметра проводов и прочего. Ответьте на вопрос: как влияют различные параметры на величину сопротивления заземления.

Вопросы для самопроверки

1. Назовите 5 типов грунтов.

2. В каких единицах измеряется удельное сопротивление грунта?

3. Какое удельное сопротивление имеют чернозёмы, и суглинки?

4. Как влажность грунта изменяет его удельное сопротивление?

5. Что такое заземлитель?

6. Чем отличаются искуственные и естественные заземлители?

7. Перечислите типы простых искуственных заземлитетелей.

8. Как сопротивление заземлителя на частоте 50 Гц зависит от удельного сопротивления грунта?

9. Как сопротивление заземлителя на частоте 50 Гц зависит от диаметра заземлителя?

10. Как сопротивление заземлителя на частоте 50 Гц зависит от длины заземлителя?

11. Как сопротивление заземлителя на частоте 50 Гц зависит от формы заземлителя?

12. Что такое глобальные переменные программы?

13. То такое локальные переменные процедуры?

14. В какой части кода программы находится раздел описания глобальных переменных (общих для всех процедур)?

15. В какой части кода программы находится раздел описания локальных переменных процедуры?

16. Можно ли сделать компонент, положенный на форму, невидимым в режиме исполнения программы?

17. Как сделать компонент, положенный на форму, невидимым в режиме исполнения программы?

18. Как создать заголовок компонента при запуске программы на исполнение?

19. Как изменить значение удельного сопротивления грунта в момент выбора типа грунта?

20. Как проверить правильность соответствия типа грунта, задаваемого из компонента ComboBox значению удельного сопротивления?

21. Как создать заготовку процедуры, которая начинает исполняться в момент изменения значения компонента ComboBox?

22. Каким образом можно вызывать появление на форме появления рисунка заземлителя, который соответствует выбранному типу в компонента ComboBox?

23. Каким образом можно сделать так, чтобы на форме были видны только компоненты ввода значений переменных для выбранного типа заземлителя в компоненте ComboBox?

24. Для чего нужен компонент CheckBox?

25. Как создать заготовку процедуры, которая будет выполняться при нажатии компонента CheckBox?

26. Если в поле текст компонента LabeledEdit с заголовком «Unom, кВ» будет записана строка 110, то чему будет равно значение переменной Unom в программе?

27. Какой код нужно записать, чтобы значение, записанное в поле текст компонента LabeledEdit с заголовком «Unom, кВ» было присвоено переменной Unom в программе?

28. Чем различаются функции FloatToStr() и FloatToStrF()?

29. Что записывается в круглых скобках в функции FloatToStrF()?

30. Запишите функцию вывода в поле Memo значения переменной R, если её величина не превышает 50000, а точность определения не более двух знаков после запятой.

31. Как предотвратить ошибочный ввод переменной, если она вводится с компонента LabeledEdit, а её величина не может быть меньше 5?

32. Как предотвратить ошибочный ввод переменной, если она вводится с компонента LabeledEdit, а её величина не может быть больше 15?

 






Date: 2016-05-16; view: 126; Нарушение авторских прав

mydocx.ru - 2015-2019 year. (0.014 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию