Главная      Учебники - Разные     Лекции (разные) - часть 22

 

Поиск            

 

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

 

             

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

Федеральное агенство по образованию

ГОУ ВПО Тульский государственный университет

Технологический факультет


Кафедра "Автоматизированные станочные системы"

Курс " Информатика "


МЕТОДИЧЕСКИЕ УКАЗАНИЯ

ДЛЯ ВЫПОЛНЕНИЯ ЛАБОРАТОРНЫХ РАБОТ

СТУДЕНТАМИ НАПРАВЛЕНИЯ 230100

ТУЛА 2007


РАЗРАБОТАЛ:

к.т.н., доц. Троицкий Д.И.

Рассмотрено на заседании кафедры

"3" сентября 2007, протокол №1

Зав. кафедрой АСС д.т.н., проф.

_______________

Иноземцев А.Н.


Содержание

1. Что такое Delphi? . 3

2. Первое знакомство . 3

3. Наша первая программа . 5

3.1 Свойства формы и программы .. 5

3.2 Ввод и вывод данных . 6

4. События . 7

5. Обработка ошибок . 8

6. Ввод – вывод массивов данных . 9

7. Пример: расчет синуса . 9

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

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

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

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


1. Что такое Delphi?

Новые системы плодят новые проблемы.

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

Delphi (произносится "Делфàй") – среда программирования для Windows, разработанная компанией Borland International. Название происходит от древнегреческого города Дельфы – того самого, где жил дельфийский оракул. Поэтому на значке системы Delphi изображена греческая колонна. Delphi соединяет в себе компилятор языка программирования Object Pascal, интегрированную среду разработки (IDE), библиотеку визуальных компонентов VCL, средства для работы с базами данных (BDE) и многое другое. При помощи Delphi можно решить практически любую программистскую задачу, включая работу с базами данных, написание приложений для Интернета, экранных заставок, системных утилит и пр.

Delphi – близкий родственник обычного языка Pascal, что обеспечило ему широкую популярность. В настоящее время Delphi стал основным инструментом разработки программного обеспечения во всем мире. Существует и версия Builder, в которой можно совместно использовать процедуры, написанные на языках C и Pascal.

Система Delphi постоянно развивается. По состоянию на 2003г. наиболее стабильной и отработанной являлась версия 6.0. Версия 7.0 заявлена разработчиком как переходная к 8.0 и не рекомендуется для широкого использования. В то же время почти все рассматриваемые далее примеры будут работать практически в любой версии Delphi, начиная с 3.0. Содержательные различия между версиями 3.0 … 7.0 незначительны, и для самостоятельной работы можно использовать литературу, описывающую любую из этих версий.

Официально бесплатной версией Delphi является Lazarus, примерно соответствующий Delphi 5.0.

Русской версии Delphi не существует . Все так называемые "русские версии" – продукция криворуких пиратов, работающая нестабильно. Всегда устанавливайте только исходную английскую версию.

2. Первое знакомство

Что бы с вами ни случилось, все это уже случалось

с кем-то из ваших знакомых, только было еще хуже.

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

Итак, запускаем Delphi. Запуск занимает некоторое время, причем даже на самых быстрых машинах. Картина, которую вы увидите, показана на рис. 1. Вполне возможно, что Delphi запомнил проект, который в него загружали в прошлый раз, и автоматически открыл его. Чтобы не трогать чужое, в этом случае закройте все файлы (меню File - Close All) и создайте новый проект (File - New - Application).

В отличие от обычного Pascal, программа на Delphi (она называется "проект") "рассыпана" по многим файлам с расширениями pas, dcu, dpr, dfm, res и другими. Поэтому необходимо неукоснительно соблюдать простое правило:

КАЖДЫЙ НОВЫЙ ПРОЕКТ – В ОТДЕЛЬНОМ КАТАЛОГЕ НА ДИСКЕ!

Несоблюдение этого правила приводит к самым печальным последствиям. Если два студента сохранят свои проекты в один и тот же каталог, файлы перемешаются и оба проекта погибнут.

При открытии ранее сохраненного проекта открывать надо только файл с расширением dpr . Если открыть какой-либо другой файл, проект загрузится не полностью и работать не будет.

Сохранение проекта (лучше всего это сделать сразу же) выполняется в два этапа. В меню File выберите пункт Save Project As. Перейдите в каталог, где будет храниться проект. Сначала надо ввести имя главного программного файла (стандартно – main.pas), а потом – имя самого проекта (расширение dpr). Полученный после компиляции exe-файл будет иметь такое же имя, как и проект. При дальнейшей работе желательно включить функцию автосохранения. При этом все файлы автоматически сохраняются перед каждым запуском программы, что гарантирует их сохранность даже в случае зависания машины. Для включения автосохранения войдите в меню Tools-Environment Options и установите флажки Editor Files и Project Desktop.



Рис. 1 – Экран системы Delphi.

Итак, что же мы видим на экране? Во-первых, так называемую форму . Форма – это будущее окно нашей программы. На форме размещаются компоненты , которые берутся из палитры компонентов . Компоненты бывают визуальные (кнопки, меню, поля ввода, изображения) и невизуальные (диалоги, таймер, базы данных). Визуальные компоненты отображаются в окне программы при ее работе.

Текст программы по большей части пишется автоматически в виде модуля (unit). Модуль делится на две секции: Interface и Implementation. Секцию Interface лучше пока не трогать и ничего там не добавлять и тем более не удалять.

И сама форма, и все компоненты являются объектами . У каждого объекта есть свойства, методы и события . Например, у объекта "Кнопка" есть свойство "Текст на кнопке" и событие "Нажатие на кнопку". Свойства и события отображаются в инспекторе объектов . Важно следить за тем, какой объект в данный момент выделен на форме (его название отображается в верхней части окна инспектора объектов), так как все отображаемые свойства и события относятся именно к выделенному объекту.

Запомните следующие горячие клавиши, необходимые для работы с Delphi:

F 12 – переключение между формой и текстом программы;

F 11 – вызов инспектора объектов;

F 9 – запуск программы на выполнение;

Ctrl + F 2 – прерывание работы запущенной программы.

3. Наша первая программа

Если эксперимент удался, что-то здесь не так...

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

Большинство компьютерных программ должны получать какую-то информацию от пользователя, обрабатывать ее и выводить на экран результат. Давайте напишем простейшую программу, которая будет вводить с клавиатуры два числа a и b и выводить результат вычисления формулы . Собственно расчет не будет ничем отличаться от аналогичного расчета на Pascal. А вот ввод и вывод данных делаются совершенно по-другому. В Delphi нет операторов Read/Write. Весь ввод-вывод обеспечивают визуальные компоненты, размещаемые на форме.

3.1 Свойства формы и программы

Прежде всего разберемся с самой формой. Каждому компоненту, и форме в том числе, автоматически присваивается уникальное имя, заносимое в свойство Name .

СВОЙСТВО NAME НЕ ТРОГАТЬ!!!

Свойство Name предназначено для обращения к компонентам из текста программы. У вашей формы имя по умолчанию будет Form1. Остальные ее свойства отображаются в инспекторе объектов. Обязательно проверьте, что именно форма является текущим объектом (в заголовке окна инспектора объектов написано Form1), иначе вы будете менять свойства не того компонента. Если в инспекторе рядом со свойством стоит символ + , это означает, что при щелчке по нему это свойство "раскроется" на несколько подпунктов.

Ниже приведен список основных свойств формы.

Табл. 1. Свойства формы

Свойство

Смысл

Рекомендуемое

значение

Caption

Текст, отображаемый в заголовке формы

Название программы

Position

Где форма будет размещаться на экране при запуске программы

PoDesktopCenter – в центре экрана

Color

Цвет формы

Без разницы

BorderStyle

Можно ли менять размер формы во время выполнения программы

BsSizeable – можно

BsSingle – нельзя

Icon

Значок, отображаемый в заголовке формы

Без разницы. Значки загружаются из файлов с расширением .ico

Height

Высота формы в пикселах

Лучше не более 639

Width

Ширина формы в пикселах

Лучше не более 479

BorderIcons

Кнопки, отображаемые на заголовке формы

Если форма постоянного размера (BorderStyle=bsSinlge), эти кнопки надо убрать

BiMinimize

Кнопка сворачивания формы

BiMaximize

Кнопка разворачивания формы

Помимо задания свойств формы, нужно еще задать свойства всего проекта. Зайдите в меню Project - Options и перейдите на закладку Application. В поле Title введите название программы, которое будет отображаться на панели задач Windows. Оно может не совпадать с текстом в заголовке формы. Здесь же при помощи кнопки LoadIcon можно загрузить значок для вашей программы из файла с расширением . ico.

3.2 Ввод и вывод данных

Удобнее всего вводить данные при помощи поля ввода . Компонент "поле ввода" в Delphi называется LabeledEdit и находится на закладке Additional палитры компонентов Его значок - . Выделите компонент и щелкните мышью на форме – компонент перенесется на нее. Передвиньте его в желаемое место. Точно также поместите на форму второй такой же компонент. По умолчанию они будут иметь имена LabeledEdit1 и LabeledEdit2 соответственно. Теперь нужно задать свойства полей ввода. Прежде всего обратите внимание на свойство Text. В нем хранится текст (тип данных STRING), вводимый пользователем в поле. Пока там ничего нет. В Text можно записать значения по умолчанию, чтобы при запуске программы поля не были пустыми. Занесите в свойства Text значение "0" (разумеется, без кавычек!) Далее следует задать подпись над полем ввода (кстати, подпись может располагаться и сбоку, и снизу – см. свойство LabelPosition). Разверните свойство EditLabel, щелкнув по плюсику, и найдите свойство Caption – оно написано зелеными буквами. Напишите в свойстве Caption название поля ввода, например, "А" и "В". Эти названия просто выводятся на экран и никак не влияют на работу программы.

Для вывода результатов расчета на закладке Standard найдите компонент Label со значком . Label – это просто текст, выводимый на экран. Поместите его на форму. Выводимый текст хранится в свойстве Caption. Для начала это свойство надо очистить, чтобы на экране не маячили надписи типа "Label1". Еще раз обратите внимание на то, что содержимое свойств Text и Caption никак не связано с именем компонента (свойство Name).

Наконец, на форму нужно поместить кнопку, при нажатии на которую будет выполняться расчет. Это общее правило Delphi: для выполнения той или иной процедуры должно произойти какое-то событие – щелчок по кнопке, выбор пункта меню, истечение заданного промежутка времени и т.д. Компонент "Кнопка" называется Button ( ) и находится на закладке Standard. У кнопки нужно задать свойство Caption – это надпись на ней. Чтобы одна из букв на кнопке работала как горячая клавиша, перед ней надо поставить символ &. Например, если в Caption записано "&Расчет", буква "Р" станет подчеркнутой и на кнопку можно будет нажать комбинацией клавиш Alt+Р. Цвет кнопки поменять нельзя, он устанавливается в Windows.

В результате ваша форма должна принять вид, показанный на рис. 2.

Рис. 2 – Вид формы.


4. События

Предоставленные сами себе, события имеют

тенденцию развиваться от плохого к худшему

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

Итак, нам нужно, чтобы при нажатии на кнопку выполнялась процедура расчета. Для этого нужно в инспекторе объектов перейти на закладку Events (События) и найти событие OnCLick (по щелчку). Очень важно : проверьте, что текущим компонентом является именно кнопка, иначе вы "повесите" событие на щелчок по форме или полю ввода, что, конечно, неправильно. Пока в OnClick ничего не написано. Дважды щелкните мышкой в этом пустом поле. Delphi автоматически создаст заготовку процедуры расчета: заголовок и BEGIN… END. Остальное надо будет писать самим. Заготовка должна выглядеть следующим образом:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

Если процедура называется не Button1Click, вы все же повесили событие не на тот компонент и ничего работать не будет.

Собственно расчет ничем не отличается от обычного Pascal:

VAR a,b,c:REAL;

c:=SQR(a+b);

Весь вопрос в том, как введенные пользователем в поля ввода числа попадут в переменные a и b и каким образом отобразить на экране значение переменной с. Делается это так:

a:=StrToFloat(LabeledEdit1.Text);

b:=StrToFloat(LabeledEdit2.Text);

c:=SQR(a+b);

Label1.Caption:=FoatToStr(c);

Что же здесь написано? Во-первых, из программы можно обратиться к любому компоненту по имени. Во-вторых, чтобы получить доступ к свойству компонента, достаточно написать название этого свойства через точку после имени самого компонента. Следовательно, запись LabeledEdit1.Text означает обращение к содержимому поля ввода LabeledEdit1, то есть к тому самому введенному пользователем тексту. Наконец, чтобы преобразовать текстовую строку (ведь свойство Text, как мы знаем, имеет тип STRING) в вещественное число, используется встроенная функция StrToFloat. Таким образом, в переменные a и b занесутся числа, введенные в поля ввода на форме. Результат расчета преобразуется из вещественного числа в текст (функция FloatToStr) и этот текст записывается в свойство Caption объекта Label1. Окончательный вид нашей процедуры таков:

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c:real;

begin

a:=StrToFloat(LabeledEdit1.Text);

b:=StrToFloat(LabeledEdit2.Text);

c:=SQR(a+b);

Label1.Caption:=FoatToStr(c)

end;

Все, программу можно запускать. Жмите F 9 и проверяйте ее работу. Ваша программа будет запущена как отдельное приложение, ее значок появится в панели задач. В отличие от Pascal программа автоматически не закрывается, вы сами должны завершить ее работу (закрыть ее окно). Вы не сможете редактировать исходный текст программы, если она запущена, поэтому не забывайте прекращать работу программы. Если ваше творение зависло, переключитесь в Delphi и снимите задачу комбинацией клавиш Ctrl + F 2 .

Кстати, вы сможете запускать программу и без Delphi – при компиляции на диске создается независимый exe-файл.

5. Обработка ошибок

Если за ошибку в расчете отвечает больше

одного человека, виноватых не найти.

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

Наша программа страдает существенным недостатком: если в поле ввода вместо числа ввести, скажем, "Вася", программа "свалится" с выдачей сообщения об ошибке (проверьте!) Оно и понятно – функция FloatToStr не может преобразовать "Васю" в вещественное число. В Delphi реализован очень элегантный механизм реакции на ошибки в программе при помощи оператора TRY..EXCEPT..END. Вот его общий вид:

TRY

здесь может произойти ошибка

EXCEPT

эти команды выполняются, если ошибка произошла

END;

Применим данный оператор в нашей процедуре:

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c:real;

begin

try

a:=StrToFloat(LabeledEdit1.Text);

b:=StrToFloat(LabeledEdit2.Text);

c:=SQR(a+b)

except

Label1.Caption:='Неверные данные';

Exit

end;

Label1.Caption:=FoatToStr(c)

e nd;

Оператор Exit вызывает досрочный выход из всей процедуры. Если бы его не было, оператор Label1.Caption:=FoatToStr(c) выполнятся бы в любом случае, так как он никак не связан с оператором try.

6. Ввод – вывод массивов данных

Не позволяйте фактам вводить вас в заблуждение.

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

Как быть, если результатом работы вашей программы является не один ответ, а целый массив данных? Например, нужно рассчитать значения функции f( x) при х , меняющемся от 0 до 1 с шагом 0.1 или вычислить сумму нескольких чисел, причем заранее неизвестно, сколько их будет.

Для ввода и вывода переменного числа данных удобно использовать компонент Memo, который находится на закладке Standard ( ). Главное его свойство – динамический массив текстовых строк Lines. По умолчанию в нем записана одна строчка – "Memo1". При помощи инспектора объектов уберите весь текст из свойства Lines, чтобы "Memo1" не маячило на экране. Для этого щелкните мышью по кнопке с троеточием рядом с Lines – (TStrings) для открытия окна текстового редактора.

Свойство Lines доступно из программы. С ним можно выполнять следующие основные операции:

Memo1.Lines.Clear – полностью очистить все строки;

Memo1.Lines.Add(s) – добавить текстовую строку s в список, отображаемый на экране.

Для обращения к строке с номером I нужно использовать запись Memo1.Lines[i].

7. Пример: расчет синуса

В военное время значение синуса может достигать четырех.

Армейская мудрость.

Решим задачу вычисления значений функции sin ( x ) при х , меняющемся от a до b с шагом h . Для ввода трех исходных данных (a ,b и h ) будем использовать привычные компоненты LabeledEdit, а для вывода результата – компонент Memo. Форма должна выглядеть так, как показано на Рис. 3. Чтобы у компонента Memo отображалась вертикальная полоса прокрутки, установите его свойство ScrollBars в значение ssVertical. Свойство ReadOnly этого же компонента надо установить в True, чтобы защитить информацию в нем от изменения пользователем (из программы ее все равно можно будет менять).

Рис. 3 - Вид формы для вычисления функции.

Теперь напишем процедуру, выполняющуюся при щелчке по кнопке "Расчет". Выделяем кнопку на форме, в инспекторе объектов переходим на закладку Events и дважды щелкаем мышкой в поле OnClick. На экране отобразится заготовка процедуры.

Прежде всего надо считать введенные в поля ввода данные и проверить их на корректность. Заведем три переменные Xmin, Xmax и h типа REAL для хранения введенных данных. Следует ясно понимать, что сами по себе переменные с компонентами на форме никак не связаны и значения, введенные пользователем, в переменных автоматически никак оказаться не могут. Поэтому нужно написать (подчеркнуты строки, которые пишет сам Delphi):

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.