Реферат: 2 е упражнение по Delphi
2 - е упражнение по Delphi 2 ЗаданиеСоставить программу с формой Form1 вида (рис. 1)
Рис. 1
где
Label1, Label2, Label3 – метки (тип TLabel, инструмент Label ).
Edit1, Edit2, Edit3 – поля ввода (тип T Edit, инструмент ).
Button1 – командная кнопка (тип TButton, инструмент ).
ComboBox1 – раскрывающийся список (тип TcomboBox, инструмент ),
под которым (на рисунке не виден) расположен УЭ-т
Label4 – метка (тип Tlabel, инструмент Label ), которая при старте программы должна выходить па передний план с символом ‘+’ в заголовке, загораживая УЭ-т ComboBox1 (рис. 2).
Рис. 2
При старте программы должны также обновляться тексты полей УЭ-тов Edit1, Edit2 и Edit3, как показано на рис. 2.
При щелчке на УЭ-те Label4 на передний план должен выйти УЭ ComboBox1, раскрыв который можно выбрать другой знак операции или функцию (рис. 3),
Рис. 3
после чего список закроется, а на передний план вновь выйдет УЭ с текстом в заголовке в виде выбранного знака операции (рис. 4 – выбрана операция возведения в степень) или функции (рис. 5 – выбрана функция вычисления десятичного логарифма). При выборе функции должны также исчезать УЭ-ты Label1 и Edit1, а также изменяться текст в заголовке УЭ-та Label2.
Рис. 4
Рис. 5
Щелчок на кнопке должен приводить к выполнению вычисления и появлению результата в УЭ-те Edit3.
Следует также сделать, чтобы после выполнения любой операции (+ - * / ^) (рис. 6 – вид после возведения в степень)
Рис. 6
по двойному щелчку на Edit1 (Edit2) текст из Edit3 копировался в Edit1 (в Edit2), текст Edit2 (Edit1) убирался и фокус ввода получал УЭ-т Edit2 (Edit1) (рис. 7),
Рис. 7
а после вычисления функции (рис. 8 – вид после вычисления lg(4))
Рис. 8
по двойному щелчку на Edit2 текст из Edit3 копировался в Edit2, текст Edit1 убирался и фокус ввода получал УЭ-т Edit2 (рис. 9).
Рис. 9
2 - Сведения о среде
Назначение окон
Главное окно – ввод команд с помощью меню и панелей инструментов.
Конструктор формы – создание образа формы с размещенными на ней управляющими элементами (УЭ), а также размещение не визуальных компонентов, используемых, например, для разработки главного или всплывающих меню. Для помещения на форму нового компонента следует щелкнуть на соответствующем значке панели инструментов Палитра компонентов (Component Palette, см. рисунок, вкладки Standard, Additional, Win32,…). Для работы с компонентом в Инспекторе объектов его следует выделить щелчком.
Редактор кода – редактирование текста программы.
Проводник кода – для быстрого (по двойному щелчку) перехода в тексте программы к ссылке на модуль, к описанию переменной, константы, поля в классе формы или к началу тела подпрограммы метода - обработчика события.
Инспектор объектов – задание на вкладке Properties свойств выделенного объекта и создание (двойным щелчком) на вкладке Events для событий объекта новых методов (обработчиков с пустым телом, заполняемым в дальнейшем в Редакторе кода) или назначение (выбором из раскрывающегося списка) событиям объекта уже имеющихся обработчиков.
Обозреватель дерева объектов – для выделения объекта, с которым предстоит работать в Инспекторе объектов.
Окно сообщений об ошибках, вкладка Messages – содержит сообщения об ошибках и расположении в программе соответствующих операторов (мест), для перехода к которым следует сделать двойной щелчок на сообщении.
Окно наблюдения, вкладка Watch List – для отображения в процессе отладки текущих значений переменных или выражений. Появляется по команде Run\Add Watch…. Объединяется с Окном сообщений перетаскиванием на последнее.
Конструирование формы
Добавить стандартный УЭ на форму – щелкнуть на УЭ на вкладке Standard, щелкнуть на форме в месте вставки УЭ.
Удалить УЭ с формы – щелкнуть на нем и нажать клавишу Delete.
Изменить значение свойства УЭ-та – выделить УЭ, щелкнуть на свойстве на вкладке Properties в окне Инспектор объектов, ввести или выбрать нужное значение в строке этого свойства.
Добавить для УЭ-та обработчик события - выделить УЭ, на вкладке Events в окне Инспектор объектов или сделать двойной щелчок на событии, или щелкнуть на событии и ввести или выбрать нужное значение в его строке.
Удалить обработчик события – удалить текст обработчика и его заголовок в описании типа класса формы, а также очистить строку соответствующего события в окне Инспектор объектов.
Выполнение и отладка программы
Запуск программы – или Run\Run, или кнопка , или F9
Выполнить до курсора – Run\Run to Cursor или F4
Выполнить строку с заходом в п\п – или Run\Trace Into, или кнопка , или F7
Выполнить строку без захода в п\п – или Run\Trace Over, или кнопка , или F8
Завершить отладку – Run\Program Reset или Ctrl+F2
Отобразить окно наблюдения - Run\Add Watch… или нажать Ctrl+F5, ввести имя переменной или выражение, нажать OK. Появившееся окно Watch List можно отбуксировать к нижней части окна редактора кода и объединить с окном Messages, как показано на рисунке. Чтобы добавить в окно наблюдения новую переменную, можно установить на ней курсор в окне редактора кода, активизировать окно наблюдения, сделать на нем двойной щелчок и нажать кнопку OK.
Установить точку останова – щелкнуть в окне редактора кода на сером поле перед строкой, на которой д.б. эта точка (см. рисунок).
Убрать точку останова – повторить действия п. 7.
^ 3 – Сведения из Паскаля и Delphi для выполнения задания Типы строк
ShortString – то же, что и string в Турбо Паскале (от 0 до 255 символов),
String - то же, что и string в Турбо Паскале, но длиной от 0 до 2 Гбайт (231),
Pchar – строка с нулем (#0) в конце, как в Си,
есть и другие типы строк.
Строку [Short]String можно привести к типу PChar так: PChar(строка типа [Short]String) и наоборот: String(строка типа PChar).
Рекомендуется использовать тип String, но некоторые стандартные функции требуют в качестве параметров тип PChar, и тогда следует применить приведение типов.
- TComboBox – раскрывающийся список, объединенный с полем ввода
Вид с закрытым (раскрытым) списком представлен на рис. 1 (рис. 3).
Если свойство Enabled имеет значение True и список закрыт, то поле ввода используется как обычное поле ввода (допускает ввод текста, откликается на события и т.п.), а когда список открыт, щелчком мыши можно выбрать его элемент и она отобразится в поле ввода.
Если свойство Enabled имеет значение False, то этот УЭ служит только для отображения текста (не реагирует на нажатия клавиш и кнопок мыши).
При проектировании формы список можно создать и заполнить (см. ниже)
^ 3 - Выполнение задания
После выполнения шагов задания не забывайте запускать программу на выполнение (для контроля результатов) и сохранять введенные добавления и изменения в файлах.
^ Создание проекта и макета формы
Запустите Delphi 6. При этом автоматически будет создана форма с именем Form1. Если Delphi 6 уже запущена и использовалась для создания другой программы, то следует ввести команду File\New\Application.
Сохраните программу в новом подкаталоге Программа 2 рабочего каталога командой File\Save All (Delphi 6 последовательно предложит сохранить программу в файлах Project1.dpr и Unit1.pas. Не меняйте эти имена. В дальнейшем, если Delphi 6 открывается для загрузки программы на редактирование, выбирайте файл Project1.dpr или, после открытия Delphi 6, используйте команду File\Open Project… для этого файла). В процессе работы не забывайте периодически сохранять файлы программы щелчком на кнопке панели инструментов Standard.
Щелчком активизируйте окно формы, в диалоге (в окне диалога) Инспектора объектов (Object Inspector) на вкладке Properties щелкните на поле Caption и введите заголовок формы Задание 2.
Измените размеры формы мышкой или заданием значений в свойствах Height и Width.
Разместите на форме (см. рис.1) в следующем порядке УЭ-ты: Edit1, Edit2, Edit3, Label1, Label2, Label3, Button1, ComboBox1 и Label4, совместив ее с ComboBox1.
Задайте Ун-там нужные положения, размеры, заголовки и тексты, как на рис. 1. Если не удается выделить щелчком мыши нужный элемент, то сделать это можно выбором его имени в списке Обозревателя дерева объектов.
Выделите УЭ-т ComboBox1, щелкните на кнопке в строке свойства Items Инспектора объектов и введите в открывшемся окне диалога String List Editor тексты строк списка так, как они видны в списке на рис. 3.
Программирование
Создайте обработчик события создания формы, который будет задавать символ ‘2’ в качестве значений свойства Text УЭ-та Edit1, значение ‘4’ – для УЭ-та Edit2 и значения ‘’ – для УЭ-та Edit2, выполнив следующие действия:
Щелкните на форме и затем сделайте двойной щелчок на строке события Increate на вкладке Events в диалоге Object Inspector.
В тело обработчика вставьте операторы:
Edit1.Text:='2';Edit2.Text:='4';Edit3.Text:='';
Создайте для ComboBox1 обработчик события Unclose1 для запоминания выбранного преобразования и вывода на передний план УЭ-та Edit4 с текстом из выбранной строки списка ComboBox:
В начале раздела реализации дайте описание переменной d: byte, которая будут использоваться для хранения номера элемента списка, представляющего выбранное преобразование (0 ~ +(сложить), 1 ~ (вычесть), 2 ~ *'(умножить), и т.д.).
Сохраните в d индекс выбранного элемента списка
d:=ComboBox1.ItemIndex;
Введите код, обеспечивающий при выборе знака операции вид рис. 4 (УЭ-т Label4 содержит знак выбранной операции и загораживает ComboBox1), иначе – вид рис. 5 (УЭ-ты Label1 и Edit1 не отображены, УЭ-т Label2 имеет заголовок Аргумент, УЭ-т Label4 содержит выбранной функции и загораживает ComboBox1):
if d in [4,5,7] then begin
Edit1.Visible:=False;
Label2.Caption:='Аргумент';
Label1.Visible:=False;
end
else begin
Edit1.Visible:=True;
Label2.Caption:='Операнд 2';
Label1.Visible:=True;
end;
Label4.Caption:=ComboBox1.Items[d];
ComboBox1.Visible:=false;
Label4.Repaint;
Label4.BringToFront;
Label4.Visible:=True;
Создайте для Label4 обработчик события OnClick, который будет прятать Label4, а ComboBox1 делать видимым и передавать ему фокус:
ComboBox1.Visible:=True;
Label4.Visible:=False;
ComboBox1.SetFocus;
Чтобы при выполнении программы размер шрифта для Label4 становился таким, как на рис. 4 и рис. 5, добавьте в обработчик события создания формы операторы и подберите присваиваемые значения:
Label4.Font.Height:=<целое>; // 22;
Label4.Font.Style:=<множество>; // [fsBold];
Label4.Font.Name:=<строка>; // 'Times New Roman';
!!! Значения можно подобрать с помощью Инспектора объектов, где для Font.Style и Font.Name представлены все возможные значения, а затем опробовать и программную установку.
!!! Описание свойства можно найти так: установить на него курсор \ вызвать локальное меню \ выбрать пункт Find Declaration.
Создайте для кнопки ^ Button1 обработчик события OnClick, который будет выполнять двуместные операции над данными из полей Edit1 и Edit2 или вычислять функцию для аргумента из поля Edit2 в зависимости от выбранного преобразования в списке ComboBox1, выводить результат в поле Edit3 и устанавливать на него фокус:
Дайте в процедуре описания переменных, которые будут использоваться для преобразований “число строка” при выполнении преобразований
s1, s2, s3: string; r1, r2, r3:extended; k: integer;
Добавьте в обработчик операторы преобразования текста из поля ввода Edit2 в число r2, а если в поле не число, то выдачи сообщения об ошибке и выход из обработчика:
s2:=Edit2.Text;
Val(s2,r2,k);
if k<>0 then begin
if d in [0..3,6] then
ShowMessage(‘Второй операнд должен быть числом!')
else
ShowMessage(‘Аргумент должен быть числом!');
exit
end;
Добавьте далее операторы аналогичной обработки текста из поля ввода Edit1 в число r1, а если в поле не число, то выдачи сообщения об ошибке и выход из обработчика.
if d in [0..3,6] then begin
s1:=Edit1.Text;
Val(s1,r1,k);
if k<>0 then begin
ShowMessage(‘Первый операнд должен быть числом!');
exit
end;
end;
Добавьте далее оператор case для выполнения заданного преобразования:
case d of
0: r3:=r1+r2;
1: r3:=r1-r2;
2: r3:=r1*r2;
3: if r2=0 then begin
ShowMessage('Делитель должен быть отличен то нуля!');
exit
end
else
r3:=r1/r2;
4: r3:=sin(r2);
5: r3:=cos(r2);
6: if r1<=0 then begin
ShowMessage('Первый аргумент должен быть больше нуля!');
exit
end
else if r2>0 then
r3:=exp(abs(r2)*ln(r1))
else
r3:=1/exp(abs(r2)*ln(r1));
7: if r2<=0 then begin
ShowMessage ('Аргумент должен быть больше нуля!');
exit
end
else
r3:=ln(r2)/ln(10);
end{case};
s3:=FloatToStr(r3);
k:=Pos(',',s3);
if k>0 then begin
Delete(s3,k,1);
Insert('.',s3,k);
end;
Edit3.Text:=s3;
Edit3.SetFocus;
Проверьте работу программы.
^ Дополнения к заданию
Сделайте так, чтобы двойной щелчок на Edit1 приводил к пересылке значения из поля ввода Edit3 в поле ввода Edit1, очистке поля Edit2 и передаче ему фокуса:
Edit1.Text :=Edit3.Text;
Edit2.Clear;
Edit2.SetFocus;
Сделайте так, чтобы, когда поле ввода Edit1 отображено, двойной щелчок на Edit2 приводил к пересылке значения из поля ввода Edit3 в поле ввода Edit2, очистке поля Edit1 и передаче ему фокуса, иначе – к пересылке значения из поля ввода Edit3 в поле ввода Edit2 и передаче ему фокуса:
Edit2.Text :=Edit3.Text;
if Edit1.Visible then begin
Edit1.SetFocus;
Edit1.Clear;
end
else
Edit2.SetFocus;
Добавьте на форму командные кнопки с цифрами 0..9, символами “минус” , ‘E’, “точка” и сделайте для них общий обработчик щелчка, добавляющий соответствующие символы в позицию курсора последнего из полей Edit1 и Edit2, имевшего фокус.
Рекомендации:
Используйте в разделе реализации дополнительную переменную для хранения номера последнего из полей Edit1 и Edit2, имевшего фокус, например, var e:1..2; которой при создании формы присваивается значение 1, если при этом фокус устанавливается на Edit1. В обработчиках щелчка этих полей Edit1 и Edit2 этой переменной присваивайте соответствующие значения.
Добавьте на форму командную кнопку с заголовком ‘0’ и сделайте следующий обработчик щелчка на ней:
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
if e=1 then begin
Edit1.ClearSelection;
i:=Edit1.SelStart;
Edit1.Text:=Copy(Edit1.Text,1,Edit1.SelStart)
+(Sender as TButton).Caption
+Copy(Edit1.Text,Edit1.SelStart+1,length(Edit1.Text));
Edit1.SelStart:=i+1;
Edit1.SelLength:=0;
end
else begin
Edit2.ClearSelection;
i:=Edit2.SelStart;
Edit2.Text:=Copy(Edit2.Text,1,Edit2.SelStart)
+(Sender as TButton).Caption
+Copy(Edit2.Text,Edit2.SelStart+1,length(Edit2.Text));
Edit2.SelStart:=i+1;
Edit2.SelLength:=0;
end;
end;
где
Edit1.ClearSelection – удаление выделенного текста
(Sender as TButton) – предложение рассматривать объект, пославший сообщение, как командную кнопку,
Edit1.SelLength – длина выделенного текста (равна 0, если нет выделения текста)
Edit1.SelStart – позиция курсора в строке, если Edit1.SelLength = 0, иначе – начала выделенного текста.
Обычным копированием размножьте эту кнопку так, чтобы их было достаточно для всех остальных символов, и дайте им соответствующие заголовки (обратите внимание на то, что все эти копии будут вызывать по щелчку один и тот же обработчик).
Дайте удобное размещение кнопок на форме.
Добавьте на форму две селекторные кнопки с надписями “Радианы” и ”Градусы” и свойству Checked первой из них дайте значение True (вторая автоматически будет иметь значение False). Измените в обработчике кнопки Button1 алгоритм вычисления синуса и косинуса так, чтобы учитывались единицы измерения аргументов (радианы\градусы) в соответствии с установкой селекторных кнопок.
4: if RadioButton1.Checked then
r3:=sin(r2)
else
r3:=sin(r2/180*Pi);
5: if RadioButton1.Checked then
r3:=cos(r2)
else
r3:=cos(r2/180*Pi);
В результате всех добавлений форма примет примерно такой вид
еще рефераты
Еще работы по разное
Реферат по разное
Робоча програма навчальної дисципліни для студентів (назва навчальної дисципліни)
17 Сентября 2013
Реферат по разное
Робоча навчальна програма з медичної І біологічної фізики на 2007 2008 навчальний рік Факультет медичний
17 Сентября 2013
Реферат по разное
Робоча навчальна програма для студентів спеціальності 06050901 "радіотехніка"
17 Сентября 2013
Реферат по разное
1. Теоретичні аспекти проблеми державного боргу 4
17 Сентября 2013