Смекни!
smekni.com

Курс " Информатика " методические указания для выполнения лабораторных работ студентами направления 230100 (стр. 3 из 3)

procedure TForm1.Button1Click(Sender: TObject);

VAR Xmin, Xmax, h : REAL;

begin

TRY

Xmin:=StrToFLoat(LabeledEdit1.Text);

Xmax:=StrToFLoat(LabeledEdit2.Text);

h:=StrToFLoat(LabeledEdit3.Text)

EXCEPT

MessageDlg('Неверные данные', mtError, [mbOK],0);

Exit

END;

IF Xmax<=Xmin THEN

BEGIN

MessageDlg('Xmin>Xmax!', mtError, [mbOK],0);

Exit

END

end;

Здесь применен новый способ отображения сообщений об ошибках – функция MessageDlg. Она отображает на экране стандартное окно сообщения об ошибке, как показано на Рис. 4.

Рис. 4 – Результат работы функции MessageDlg.

Параметр mtError отвечает за картинку, отображаемую. в левом верхнем углу сообщения (в данном случае это белый крест в красном круге; возможны также варианты mtInformation, mtConfirmation, mtWarning). Параметр [mbOK] указывает, что на окне будет одна-единственная кнопка OK. Квадратные скобки указывают на то, что это массив. апример, можно отобразить кнопки ОК и Отмена при помощи параметра [mbOK, mbCancel]. Наконец, последний ноль представляет собой номер темы в файле помощи, если бы таковой у нашей программы имелся.

Оператор Exit завершает выполнение процедуры в случае ошибки в исходных данных.

Собственно расчет весьма прост:

Memo1.Lines.Clear;

WHILE Xmin<=Xmax DO

BEGIN

Memo1.Lines.Add('sin('+FloatToStrF(Xmin,ffFixed,10,4)+')='+

FloatToStrF(sin(Xmin),ffFixed,10,4));

Xmin:=Xmin+h

END

Здесь прежде всего очищается список текстовых строк в компоненте Memo, иначе при неоднократных расчетах он будет расти и расти. В качестве переменной, меняющейся от Xmin до Xmax с шагом h, используется сама переменная Xmin. Строка Memo1.Lines.Add добавляет рассчитанный результат в компонент Memo. Для "красивого" преобразования типа данных Real в текстовую строку применена новая функция FloatToStrF(число, режим, всего, после_запятой). Режим ffFixed означает, что в числе будет именно столько знаков после запятой, сколько указано. В нашем случае мы отводим под все число 10 позиций, из них 4 – под дробную часть.

Результат работы программы показан на Рис. 5.

Рис. 5 – Результат работы программы.

8. Запись в файл

Все приказы отдавайте устно. Не оставляйте записей и

документов, которые могут обернуться против вас.

Из законов Мэрфи

Сохранение результатов работы программы в текстовый файл делается в Delphi гораздо проще, чем в обычном Pascal. Можно обойтись без использования процедур Assign, ReWrite, Writeln, Close, хотя они по-прежнему существуют. Чтобы наша программа выглядела прилично, надо применить стандартный диалог сохранения файла – такой же, как в самом Delphi, в Word'е и пр. На закладке Dialogs найдите компонент SaveDialog (

) и поместите в любое место его на форму. Этот компонент – невизуальный: при запуске программы на форме его не будет. Он появится только при явном вызове диалога сохранения файла из программы. Соответственно на форме должна появиться кнопка "Сохранить".

Зададим свойства нашего диалога. Во-первых, в свойстве Title надо написать заголовок окна диалога, например, "Введите имя файла для сохранения результатов". Во-вторых, в свойство DefaultExt записывается расширение, автоматически присоединяемое к введенному пользователем имени файла. Очевидно, оно должно быть txt, ведь мы сохраняем текстовый файл. Свойство Filter позволяет выбирать отображаемые в диалоге файлы по маске. Например, можно задать маски "Текстовые файлы (*.txt)" и "Все файлы (*.*)". Для этого окно редактирования фильтра нужно заполнить так, как показано на Рис. 6. Текст в левой колонке – подсказка для пользователя, в правой – собственно маска файла.

Диалог имеет свойство Options, "раскрывающееся" в длинный список параметров. Из них нам нужны следующие (их надо установить в True):

foPathMustExist – введенный путь к файлу доложен существовать;

Рис. 6 Окно редактирования фильтров файлового диалога.

foNoChangeDir – смена директории в файловом диалоге не будет приводить к смене текущей директории всей программы.

Остается написать очень простую процедуру сохранения результатов, вызывающуюся при щелчке по кнопке "Сохранить":

procedure TForm1.Button2Click(Sender: TObject);

begin

WITH SaveDialog1 DO

IF Execute THEN

Memo1.Lines.SaveToFile(filename)

end;

Оператор WITH "выносит за скобки" название компонента SaveDialog1, чтобы не писать одно и то же несколько раз. Без оператора WITH тот же фрагмент программы выглядел бы так:

begin

IF SaveDialog1.Execute THEN

Memo1.Lines.SaveToFile(SaveDialog1.filename)

end;

Здесь Execute – метод объекта SaveDialog, вызывающий отображение диалога на экране. Этот метод возвращает логическое значение в зависимости от того, ввел пользователь правильное имя файла или закрыл диалог, нажав Esc. Если имя было введено, то выполняется метод сохранения в файл SaveToFile, предусмотренный у свойства Lines компонента Memo. На вход метода подается имя файла, а оно хранится в свойстве FileName диалога SaveDialog.


9. Деактивация элементов интерфейса

То, что вы храните достаточно долго, можно выбросить.

Как только вы что-то выбросите, оно вам понадобится.

Из законов Мэрфи.

В нашей программе присутствует существенный промах. Пользователь может попытаться сохранить в файл результаты расчета до того, как этот расчет произведен. Ничего хорошего из этого не выйдет – будет создан файл нулевой длины. Было бы неплохо не давать возможности нажать на кнопку "Сохранить" до тех пор, пока расчет не выполнен. Такая возможность предусмотрена – любой элемент интерфейса можно временно сделать выключенным (он будет виден на форме, но не будет реагировать на действия пользователя). За включенность-выключенность отвечает свойство Disabled. В начальный момент расчет еще не выполнен, поэтому у кнопки "Сохранить" установите это свойство в True. А после выполнения расчета кнопку "Сохранить" надо оживить. Для этого в конец процедуры расчета надо добавить строку

Button2.Enabled:=True

10. Использование клавиши Tab

Если вы одновременно нажали две клавиши пишущей машинки,

то отпечатается та, которую вы нажали нечаянно.

Из законов Мэрфи

.

Клавиша Tab в программах для Windows используется для переключения между элементами интерфейса, что позволяет вводить данные только с клавиатуры, не пользуясь мышью. Порядок "обхода" элементов интерфейса на форме важен: будет очень неудобно, если после ввода Xmin и нажатия Tab активным окажется не поле ввода Xmax, а, скажем, кнопка "Расчет".

Для задания порядка обхода нажмите правую кнопку мыши в любом месте над формой и выберите из контекстного меню пункт Tab Order. В появившемся окне (Рис. 7) перечислены все имеющиеся на форме визуальные компоненты в порядке их обхода. Две клавиши со стрелками позволяют перемещать компоненты внутри списка, добиваясь нужного порядка следования.

Рис. 7 – Окно задания порядка табуляции.

Для нашей формы порядок обхода таков: Xmin-Xmax-h-Расчет-Сохранить. Чтобы в компонент Memo вообще нельзя было зайти, установите его свойство TabStop в False.

11. Всплывающие подсказки

Когда мы пытаемся вытащить что-нибудь одно,

оказывается, что оно связано со всем остальным.

Из законов Мэрфи.

Вам уже не раз встречались всплывающие подсказки (hints) – прямоугольнички с текстом, появляющиеся, если задержать курсор мыши над каким-либо элементом интерфейса в Delphi, Word и других программах. То же самое можно сделать и в нашей программе. Все визуальные компоненты имеют свойство Hint, в которое записывается текст сообщения. Для того, чтобы подсказка появлялась на экране, надо еще установить свойство ShowHint в True.

Самостоятельно сделайте всплывающие подсказки для всех элементов интерфейса нашей программы.