Шупрута В.В. - Delphi 2005 - Учимся программировать (1080891), страница 17
Текст из файла (страница 17)
Если вы сравните размеры файлов программдля .NET и Win32, то заметите, что первый занимает всего 30 Кб, второй почти 400 Кб. Почему такая большая разница, ведь по сути программы делаютидентичные действия и даже внешне состоят практически из одних и тех жекомпонентов?Такое существенное различие в размере выходного файла объясняетсяпросто. При компиляции в .NET в директивах главного модуля были ссылки набиблиотеки из Microsoft .NET Framework. Ссылки, но не сами библиотеки.Исполняемый' файл формировался с учетом того, что вся необходимаяинформация (информация о форме, компонентах и используемых функциях)хранилась во внешних библиотеках. Поэтому его размер достаточно мал.Достаточно большой размер файла, полученного компилятором для Win32,объясняется тем, что вся необходимая информация собрана внутри файла.Соответственно, для работы первого проекта необходимо наличиеустановленного пакета Microsoft .NET Framework (библиотек, указанных вдирективах главного модуля проекта).
Во втором случае этого не требуется,полученный файл абсолютно автономен.Запускаем полученную программуЗапустите программу любым удобным для вас способом (из среды разработкиили Проводника). После некоторого количества выполненных расчетов мызаметим, что в случае если корни уравнения являются дробными числами, торезультат отображается не очень красиво (рис. 2.37).Для более красивого вывода можно использовать другой вариантотображения чисел - функцию FloatToStrF, которая позволяет программистусамому определить внешний вид отображаемого числа (тип отображения,общее количество знаков, количество знаков после запятой).
В общем случаеформа использования функции F l o a t T o S t r F выглядит следующим образом:ГЛАВА 2 • Создаем первые проекты в Borland Delphi 2005Введите значения коэффициентов кваирэтчого уравненияXI0.219223593595585Х2-2.28077640640441Завершение работыРис. 2.37 т Дробные значения по умолчанию вычисляются с большой точностьюFloatToStrF(<Number>,<Type>,<precision>,<digits>)Параметр <Number> содержит переводимое в строку число, <Туре>определяет тип отображения, < p r e c i s i o n > - точность, < d i g i t s > количество цифр после запятой.Тип отображения по аналогии с рассмотренными ранее в табл.
2.9 можетпринимать следующие значения:>• универсальный (основной) формат - f f General;>• научный формат (с плавающей точкой) - f f Exponent;>• число с фиксированной точкой - f f Fixed;>• числовой формат - f f Number;>• денежный формат - ff Currency.В листинге 2.11 приведен фрагмент (с использованием функции F l o a t ToStrF) исходного кода процедуры обработки события C l i c k на кнопкеButtonl.Листинг 2.11 т Использование функции F l o a t T o S t r F// Выводим рассчитанные значения корней.Label5.Caption:='Xl= ' + F l o a t T o S t r F ( X I , f f F i x e d ,45 , 2 ) +Chr(13)+ // Перевод на следующую строку.•Х2 = '+FloatToStrF(X2,ffFixed,5,2);Результатом использования подобного кода будет более красивый выводрезультата (рис.
2.38).Последнее, чему следует уделить внимание, - это обработка возможныхошибок в процессе выполнения программы. Как мы уже знаем, в нашейпрограмме есть возможность ввода неправильных данных со стороныпользователя, поэтому в тексте программы это необходимо предусмотреть.Сделать это можно с помощью уже знакомой нам инструкции t r y (см. листинг2.12).Создаем первый проект для Win3 2Р Вычиспение коВведите значежя коэффициентов квадратного дезвменияXI - 0.22Х2-2.28Завершение работыРИС. 2.38 т Результат использования функции F l o a t T o S t r FЛистинг 2.12 • Итоговый вариант процедуры обработки события c l i c k на кнопке B u t t o n lprocedure TForml.ButtonlClick(Sender: TObject);var A,B,C:single,•Dsreal;XI,X2:real;begin// Ввод исходных данных.tryA:=StrToInt(Editl.Text);B:=StrToInt(Edit2.Text);C:=StrToInt(Edit3.Text);exceptOn EConvertError dobeginif (Editl.Text = 1 ') or (Edit2.Text='') or (Edit3.Text='')thenMessageDlg{'Необходимо в в е с т и в с е коэффициенты',mtlnformation,[mbOK],0)else,MessageDlgt'При задании коэффициентов используйте числа',mtlnformation,[mbOK],0);Exit;end;end;// Вычисление дискриминанта.D:=B*B-4*A*C;i f D<0 then/ / Если дискриминант отрицателен, то выводим сообщениеI/ о том, что уравнение не имеет корней.beginLabel5.Caption:='Уравнение не имеет действительных корней';end\wrГЛАВА 2 • Создаем первые проекты в Borland Delphi 2005// Если дискриминантбольше или равен 0, тоII вычисляем корни уравнения.else'beginXl:=(-B-sqrt(D))/(2*A);X2:=(-B+sqrt(D))/(2*А);// Выводим рассчитанныезначениякорней.• Label5.Caption:='XI = '+FloatToStrF(XI,ffFixed,5,2)+Chr(13)+ 'X2 = '+FloatToStrF(X2,ffFixed,5,2) ;end ;end;В данном примере для предотвращения ошибок используется инструкцияtry-.except.
Однако в синтаксисе записи возможных вариантов исключенийпроизошли изменения. В табл. 2.22 приведены наиболее часто возникающиеисключения (аналог исключений, описанных ранее в проекте для .NET, см. втабл. 2.10).Таблица 2.22 т Типовые исключенияТип исключенияПричина возникновенияEConvertErrorОшибка преобразования. Возникает при выполнении преобразования, еслипреобразуемая величина не может быть приведена к требуемому виду. Наиболеечасты случаи при переводе чисел в строки и обратноEZeroDivideEFileErrorОшибка переполнения. Возникает в результате выполнения операции при выходеза границы допустимого диапазона значения. Также возникает в случае операцииделения, если делитель равен нулюОшибка открытия файла (файл не найден).
Возникает при выполнении файловых, операций в том случае, если не удается найти необходимый файл на носителеДля информирования пользователя о неправильно введенных данныхиспользуется функция MessageDlg. В общем случае инструкция использованияэтой функции выглядит следующим образом:MessageDlg(<Текст>,<Тип окна>,[<Кнопки>],<Контекст справки>)Параметр <Текст> задает выводимую строку текста.С помощью параметра <Тип окна> задается тип выводимого сообщения.Сообщение может быть следующих типов:>• информационное - mtInformation;> предупредительное - mtWarning;>• сообщение об ошибке - mtError;>• запрос на подтвержидение - mtConf i r m a t i o n ;>• обычное - mtCustom.Создаем первый проект для Win3 2\1Л¥Параметр <Кнопки> задает тип отображаемой в окне сообщения кнопки(допускается указание нескольких кнопок через запятую).
В табл. 2.23приведены возможные значения этого параметра.Таблица 2.23 т Константы, задающие тип кнопки в окне сообщенияКонстанта, определяющая тип кнопкиВыводимые в окне сообщения кнопкиmbYesДаmbNoНетmbOkOkmbCancelОтменаmbAbortПрерватьmbRetryПовторитьmblgnorembHelpПропуститьПомощьПараметр <Контекст справки> определяет номер окна справочнойсистемы, которое будет выведено на экран в случае нажатия клавиши F1. Еслииспользование справочной системы не предусмотрено, то значение параметраравно нулю.Как и в предыдущем случае, мы можем контролировать символы, вводимыепользователем. Надо точно так же создать обработчик события нажатияклавиши (теперь оно называется OnKeyPress) и назначить его всем тремкомпонентам для ввода данных. Исходный код такого обработчика смотрите влистинге 2.13.Листинг 2.13т Контроль ввода данныхprocedure TForml.Checklnput(Sender: TObject; var Key: Char);beginif not (Key in [#8,',','0"..'9']) thenAbort;end;Выглядит очень похоже, не правда ли? Единственное отличие только в том,что вместо присваивания параметру обработчика какого-либо логического значения вызывается функция Abort.
Это вызов тихого исключения (Silentexception) - специальное исключение, которое не приводит к выводу сообщения об ошибке, однако успешно выполняет свою функцию - прерывает обработку события.ГЛАВА 2 • Создаем первые проекты в Borland Delphi 2005Выполняем окончательную настройку приложенияНа заключительном этапе приложению можно задать иконку (значок), а такжезаголовок приложения.Чтобы присвоить приложению значок, необходимо:1.
В меню Project выбрать команду Options.2. В появившемся диалоговом окне Project Options выбрать разделApplication.3. Щелкнуть по кнопке Load Icon... и, используя стандартное окно просмотра папок, найти подходящий значок (файл с расширением ico).В этом же окне в поле Title можно указать специфический заголовок приложения.ЯзыкпрограммированияDelphiПосле некоторой практики мы снова возвращаемся к теории. В прошлой главе мы получили некоторые познания о том, как создаютсяПрограммы в Borland Delphi 2005. В этой главе мы познакомимся сосновами языка Delphi.Зная основы языка, уже можно не только интуитивно понимать текстыпрограмм, но и разрабатывать их самому. Забегая немного вперед, скажу,что прежде чем писать программы, мы познакомимся с их основными элементами.Под элементами программы мы будем понимать минимальные неделимые еечасти, которые имеют определенное значение для компилятора.Любая программа в Delphi состоит из зарезервированных слов языка(операторов языка), идентификаторов (констант и переменных), выражений, подпрограмм (процедур и функций) и комментариев.
Сложно? Конечно, сложно. Именно поэтому в предыдущей главе мы сделали свой первыйпроект, пока еще не до конца осознавая, что есть что в тексте программы.Теперь же нам будет гораздо проще изучать язык Delphi, имея некоторуюпрактику за плечами.Итак, по окончании прочтения этой главы вы уже будете представлять себе,что такое язык Delphi и будете готовы писать простейшие программы.Но прежде всего нам необходимо изучить так называемый алфавит языкаDelphi, что позволит понять, какие же символы можно использовать при написании программ, а какие - нет.ГЛАВА 3 • Язык программирования DelphiИзучаем алфавит языкаАлфавит языка представляет собой набор символов, которые мы можем использовать при написании программ. Алфавит языка Delphi включает в себябуквы, цифры, специальные символы, пробелы и зарезервированные слова.Для составления кода программы можно использовать только латинскиебуквы от а до z (А до Z).