Шупрута В.В. - Delphi 2005 - Учимся программировать (1080891), страница 16
Текст из файла (страница 16)
B u t t o n l C l i c k . После того как заготовка для процедуры будетсоздана, необходимо написать исходный код, подобный тому, что былприведен в листинге 2.1..В листинге 2.7 приведен текст функции обработки события Click на кнопкеВычислить (Buttonl).Листинг 2.7т Процедура обработки события c l i c kprocedure TForml.ButtonlClick(Sender:var А,В,С:single;TObject);ГЛАВА 2 V Создаем первые проекты в Borland Delphi 2005Drreal;XI,Х2:real;begin// Ввод исходных данных.A :=Str-ToFloat( Editl. Text) ;В:= StrToFloat(Edit2.Text);C:= StrToFloat(Edit3.Text);// Вычисление дискриминанта.D:=B*B-4*A*C;if D<0 then// Если дискриминант отрицателен, то выводим сообщение// о том, что уравнение не имеет корней.beginLabel5.Caption:='Уравнение не имеет действительных корней 1 ;end// Если дискриминант больше или равен 0, тоII вычисляем корни уравнения.elsebeginXl:=(-B-sqrt(D))/(2*A);X2:=(-B+sqrt(D))/(2*A);// Выводим рассчитанные значения корней.Label5.Caption:='Xl = •+FloatToStr(XI)+Chr(13)+ // Перевод на следующую строку.'Х2 = '+FloatToStr(X2);end;end;Как видно из листинга 2.7, структура программы не претерпела существенныхизменений, тем не менее синтаксис отдельных элементов изменился.
Разберемприведенный в листинге исходный код.Функция обработки TForml. B u t t o n l C l i c k выполняет вычисление корнейквадратного уравнения и выводит результат в метку Label5. Исходные данныео коэффициентах при неизвестном вводятся из полей редактирования E d i t l ,E d i t 2 и E d i t 3 . После ввода данных пользователем значение свойств Textэтих компонентов меняется на те, что ввел пользователь. Для преобразования введенных пользователем строк в числа используется функция StrToFl o a t . В качестве параметра этой функции передается текстовое изображениечисла. Результатом этой функции является число, полученное из введеннойпользователем строки. Поэтому если пользователь введет какой-либо текст,который невозможно перевести в число, то будет выдано сообщение об ошибке(функция работает аналогично рассмотренной нами ранее функции ToSingleСоздаем первый проект для Win3 2при разработке проекта для .NET). Таким образом, функция S t r T o F l o a tсработает только в том случае, если передаваемое число записано в верномформате.Вычисленные значения корней выводятся в поле Label 5 путемприсваивания значения свойству C a p t i o n .
Для обратного преобразованиячисла в строку используется обратная функция F l o a t T o S t r .Изучаем структуру проекта для Win32Теперь разберем особенности структуры созданного проекта. Далееприведен список файлов, который формируется при создании любого проектапод Win32 (после выполнения операции сохранения). Реально проект впростейшем случае представляет собой совокупность следующих файлов:>• файл описания проекта (bdsproj-файл);>• главный модуль (dpr-файл);> файл ресурсов (res-файл);>• файл конфигурации (cfg-файл);>• модуль формы (dfm-файл);> модуль реализации (pas-файл).Файл описания проектаФайл описания проекта (bdsproj-файл) имеет ту же функцию, что и в проектах .NET.Он представляет собой файл специального формата, в котором записана общаяинформация о проекте.
Изменять этот файл вручную также не рекомендуется.Главный модульВ главном модуле (dpr-файле) содержатся инструкции, обеспечивающие запускнашей программы. В качестве примера в листинге 2.8 приведен главный текстфайла главного модуля нашей программы (файл будет создан, как только мывыполним сохранение проекта).Листинг 2.8 т Главный модуль программыprogram Projectl;usesForms,Unitl in ' U n i t l . p a s ' {Forrnl};{$R *.res}beginApplication.Initialize;ГЛАВА 2 T Создаем первые проекты в Borland Delphi 2005Application.CreateForm(TForml, Form!);Application.Run;end.В заголовке модуля указано имя программы, далее следуют команды,которые содержат информацию о том, что именно (какие модули) понадобитсякомпилятору Delphi для создания конечного ехе-файла. Как видите, в отличиеот .NET-проектов здесь не требуется наличия специальных библиотек - всяинформация будет храниться в формируемом ехе-файле.Модуль формыМодуль формы содержит только информацию о ее настройках и компонентах, которые на ней присутствуют.
Модуль формы формируетсяавтоматически при выполнении настроек формы, перенесении на нее инастройки компонентов. А где же хранятся процедуры обработки событийдля этих компонентов? Процедуры обработки событий хранятся в файлереализации (см. ниже). В листинге 2.9 приведен текст модуля формы нашейпрограммы.Листинг 2.9 т Модуль формы программыobject Forml: TFormlLeft = ОTop = ОBorderlcons = [biSystemMenu, biMinimize]BorderStyle = bsSingleCaption = #1042#1099#1095#1080#1089#1083#1077#1085#1080#1077''#1082#1086#1088#1085#1077#1081'•#1082#1074#1072#1076#1088#1072#1090#1085#1086#1075#1086'•#1091#1088#1072#1074#1085#1077#1085#1080#1103ClientHeight = 152ClientWidth = 386Color = clBtnFace• Font.Charset = RUSSIAN_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'MS Sans SerifFont.Style = []OldCreateOrder = FalsePosition = poScreenCenterPixelsPerlnch = 96TextHeight = 13object Labell: TLabelСоздаем первый проект для Win32-•Left = 24Тор = 16Width = 299Height = 13Caption = #1042#1074#1077#1076#1080#1090#10771'#1079#1085#1072#1095#1077#1085#1080#1103''#1082#1086#1101#1092#1092#1080#1094#1080#1077#1085#1090#1086#107.4'1#1082#1074#1072#1076#1088#1072 #1090 #1085 #1086 # 107 5#1086''#1091#1088#1072#1074#1085#1077#1085#1080#1103endobject Label2: TLabelLeft = 24Top = 55Width = 10Height = 13Caption = 'A:'endobject Label3:.TLabelLeft = 24Top = 83Width = 1 0iHeight = 13Caption = 'B:'endobject Label4: TLabel' Left = 24Top = 111Width = 10Height = 1 3Caption = 'C:'endobject Label5: TLabelLeft = 104Top = 48Width = 120•,Height = 80AutoSize = FalseWordwrap = Trueendobject Editl: TEditLeft = 40Top = 48Width = 4 8ГЛАВА 2 • Создаем первые проекты в Borland Delphi 2005Height = 21TabOrder = Оendobject Edit2: TEditLeft = 40Top = 7 6Width = 48Height = 2 1TabOrder = 1endobject Edit3: TEditLeft = 40Top = 104•• Width = 48Height = 21TabOrder = 2endobject Buttonl: TButtonLeft = 240Top = 4 8Width = 120Height = 32Caption = #1042#1099#1095#1080#1089#1083#1080#1090#1100TabOrder = 3OnClick = ButtonlClickendobject Button2: TButtonLeft = 240Top = 96Width = 120Height = 3 2Caption = #1047#1072#1074#1077#1088#1096#1077#1085#1080#1077'•#1088#1072#1073#1086#1090#1099TabOrder = 4endendМодуль реализацииВ модуле реализации содержится информация только о присутствующих наформе компонентах и процедурах обработки событий на этих компонентах.Модуль формы можно условно разделить на две части - секцию описания исобственно раздел реализации.Создаем первый проект для Win3 2Секция описания (начинается с служебного слова i n t e r f a c e ) содержитавтоматически сформированное Delphi-объявление типа формы.
Этот разделтакже содержит перечень компонентов, которые находятся на форме.Секция реализации начинается со служебного слова implementation. Онасодержит объявление локальных процедур и функций, в том числе и процедуробработки событий.Как и в случае проекта для .Net, могут существовать еще и секцииинициализации и финализации. Но в нашем случае они не используются.Теперь необходимо отметить некоторые особенности проекта для Win32.Посмотрите на текст модуля реализации проекта для Win32 (листинг 2.10).Листинг 2.10 т Текст модуля реализацииunit Unitl;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls;typeTForml = class(TForm)Editl: TEdit;Edit2: TEdit;Edit3: TEdit;Label1: TLabel;Label2: TLabel;Label3: TLabel;Label4: TLabel;Label5: TLabel;Buttonl: TButton;Button2: TButton;procedure ButtonlClick(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForml: TForml;implementation{$R *.dfm}procedure TForml.ButtonlClick(Sender: TObject);4-3166ГЛАВА 2 • Создаем первые проекты в Borland Delphi 2005var А,В,С:single;D:real;XI,Х2:real;begin// Ввод исходных данных.A: =StrToInt(Editl.Text);B:=StrToInt(Edit2.Text);C:FStrToInt(Edit3.Text);// Вычисление дискриминанта.D:=B*B-4*A*C;if D<0 then// Если дискриминант отрицателен, то выводим сообщениеII о том, что уравнение не имеет корней.beginLabel5.Caption:='Уравнение не имеет действительных корней';end// Если дискриминант больше или равен 0, тоII вычисляем корни уравнения.elsebeginXl:=(-B-sgrt(D))/(2*A);X2:=(-B+sqrt(D))/(2*А);// Выводим рассчитанные значения корней.Label5.Caption:='Xl = '+FloatToStr(XI)+Chr(13)+ // Перевод на следующую строку.•Х2 = '+FloatToStr(X2);end;end;procedure TForml.Button2Click(Sender: TObject);beginClose;end;.
.Уend.В модуле формы проекта для .NET присутствовало все - и описаниекомпонентов (значения их свойств), и соответствующие им процедурыобработки событий. В проектах для Win32 эта информация разделена на модульформы и модуль реализации. Модуль реализации содержит перечень (условноговоря, ссылки) компонентов и соответствующие им процедуры обработки.Каким же образом компилятор узнает описание компонентов в проекте Win32,на что осуществляется ссылка в модуле реализации? Ответ прост - посмотритевнимательно на начало секции implementation.
Сразу в начале этого разделаСоздаем первый проект для Win3 2вы увидите директиву (не путайте с комментариями) {$R * .dfm}. Даннаядиректива означает, что описание компонентов (значения их свойств) находятсяв файле unitl.pas. Звездочка (*) в данном случае означает, что имя файла модуляформы совпадает с именем файла модуля реализации.Преобразуем исходный текстпрограммы в исполняемый файлПосле сохранения проекта приступайте к компиляции с помощью пункта Compile меню Project. Результатом компиляции будет ехе-файл, совпадающий с именем проекта.