Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algus0309.DOC
Скачиваний:
12
Добавлен:
31.03.2015
Размер:
629.76 Кб
Скачать

Val(Edit1.Text,k1,sign);

Val(Edit2.Text,k2,sign);

res:=k1+k2;

str(res,s1);

Edit3.Text:=s1;

end;

Точное описание использованных стандартных процедур можно получить с помощью Help. Приведенная процедура не соответствует требованиям надежности: если при вводе в полях были набраны не целые числа в диапазоне данных типа integer, то при выполнении процедуры val возникает ошибка.

Рекомендуем читателю повторить язык Pascal и ответить на вопрос: какой диапазон значений у переменных типа integer?

Можно разными способами предотвратить возникновение этой ошибки, ограничимся рассмотрением одного из них: используем в полях ввода маски. Например, маска ##.# означает, что можно ввести только числа в диапазоне от – 9.9 до 99.9. Никакие другие символы приняты не будут. Для использования масок переключите палитру компонент на Additional и спустите оттуда на форму компоненту MaskEdit (вместо использованных ранее компонент Edit), которая обозначена через ##. У нее имеется свойство EditMask, в которое можно самому писать требуемую маску, в нашем случае ### ; или можно открыть диалоговое окно для выбора требуемой маски из имеющихся. Справку о символах, применяемых в масках и их назначении можно получить с помощью контекстной подсказки по ключевому слову EditMask. Процедура нахождения суммы практически не меняется:

procedure TForm1.Button3Click(Sender: TObject);

Var

r1,r2,res :real;

sig :integer;

s2 :string;

begin

Val(MaskEdit1.Text,r1,sig);

Val(МaskEdit2.Text,r2,sig);

res:=r1+r2;

str(res:4:1,s2);

MaskEdit3.Text:=s2;

end;

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

    1. Событийно-управляемые программы

В предыдущем параграфе мы, по существу, уже составили событийно-управляемую программу. Вспомним, как она работает. После запуска программы откроется ее главное (и пока единственное) окно и программа как бы остановится, ожидая “приказов” от пользователя. При этом выполняется процедура, соответствующая событию onCreate (при ее наличии). Эти “приказы” могут поступить в нашем простейшем примере только от кнопок: как уже известно, каждой кнопке соответствует процедура, которая и будет выполнена при нажатии. После выполнения процедуры программа возвращается в исходное состояние и ждет новых приказов. Исключением является кнопка выхода из программы, после нажатия на которую ее выполнение прекращается.

Вспомним, как работают знакомые нам интегрированные среды программирования (Turbo Pascal, Borland Pascal, Delphi, . . . ): после запуска откроется экран с меню и среда готова к принятию приказов через него. После завершения набора текста программы можно дать команду перехода к трансляции и решению. Если при трансляции обнаружены синтаксические ошибки, то процесс трансляции будет остановлен, на экране появятся диагностические сообщения и среда ждет реакции пользователя. Если никаких ошибок при трансляции и решении не обнаружено, то программа выдаст ответ и возвращается в исходное состояние. Этот процесс продолжается до тех пор, пока не выдана команда выхода из среды. Это можно выразить и по-другому: интегрированная среда как бы находится в режиме бесконечного цикла – ожидание команды, ее выполнение, “отчет о выполнении”, опять ожидание – до тех пор, пока этот цикл не будет прерван извне. В программировании команды – приказы называют событиями и программу, работающую по описанной выше схеме, событийно-управляемой. Источниками событий могут быть:

  • нажатие кнопок;

  • выбор пунктов меню;

  • нажатие клавиш на клавиатуре;

  • нажатие клавиш или передвижение мыши и т.д.

Для сравнения вспомним схему работы традиционных программ: запуск – ввод исходных данных – выполнение – вывод результатов – останов. При создании событийно-управляемых программ необходимо обратить особое внимание на:

  1. Необходимость тщательной разработки интерфейса пользователя уже на стадии проектирования программы. Под интерфейсом пользователя понимают средства взаимодействия пользователя с программой во время выполнения. На стадии проектирования надо решить, какое будет меню, какие нужны кнопки, какие другие средства управления работой программы необходимы; какие нужны формы ввода/вывода.

  2. Обеспечение надежности программы: если при реакции на событие происходит программное прерывание, то цикл обработки событий прервется. Выходом из положения является тщательный анализ причин возможных ошибок во время решения (реакции на события) и предусмотрение их обработки.

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

  • главное меню – MainMenu,

  • всплывающее (локальное) меню – PopUpMenu.

Ограничимся рассмотрением создания главного меню. Для этого из палитры компонент Standard надо спустить на форму компоненту MainMenu (вторая слева) и делать на ней двойной щелчок: откроется проектировщик меню (Menu Designer), в котором Вы видите пустое меню. Создание меню заключается в передвижении по меню (традиционными средствами: стрелками передвижения курсора или щелканьем левой клавишей мыши на нужном пункте) и заполнении его пунктов. Для каждого пункта меню задают значение свойства Caption, куда записывают имя пункта меню (можно и на русском языке). Если имеем дело с пунктом меню нижнего уровня, которому должно соответствовать какое-то действие, то дополнительно задают:

  • Обязательно – реализацию пункта меню. Это делается аналогично реализации кнопок, рассмотренной выше. Делают двойной щелчок на том пункте меню, реализацию которого хотим задавать и заполняют предложенную процедуру.

  • Необязательно – “горячую клавишу” (ShortCut), т.е. клавишу, или комбинацию клавиш, нажатие на которую(ые) вызывает то же самое действие, что и выбор пункта меню. Для этого задают значение свойству ShortCut путем набора нужной комбинации или путем выбора из выпадающего списка.

  • Необязательно – можно отметить один пункт горизонтального меню и по одному пункту каждого выпадающего меню в качестве пункта, выбираемого по умолчанию.

  • Необязательно – можно отметить одну букву в каждом названии пункта меню. Для этого при наборе его названия перед выделяемой буквой ставят знак &. Результат будет точно такой, как в известных средах. Какой?

Разработку меню можно выполнять итерационно путем дополнения ранее созданного. Рекомендуем читателю дополнить приведенный в предыдущем параграфе простой пример меню. Обратим в связи с этим внимание на одно обстоятельство. Иногда возникает необходимость обеспечить реализацию одних и тех же действий как через меню, так и через кнопки. В этом случае нет необходимости повторять реализующую процедуру дважды. Допустим, что уже написана реализующая процедура для некоторого пункта меню и необходимо обеспечить выполнение этой же процедуры при нажатии на кнопку. Создаем кнопку, как было описано выше, но не пишем для нее процедуру. Вместо этого переключим соответствующий кнопке инспектор свойств на события (Events), найдем там событие onClick, ему соответствует список уже существующих процедур, остается лишь выбрать нужную из них.