Компьютер. Радиоэлектроника. Блоки питания. Справочники. Источники питания. Радиосвязь

Как создать программу в делфи. Известные программы на Delphi

В среде Delphi программист работает с проектом – набором файлов, из которых Delphi создает приложение. Один проект соответствует одному приложению. Ряд файлов проекта Delphi формирует и модифицирует автоматически. Программист может добавлять в проект и собственные файлы (Pascal -модули, графические файлы, DLL –библиотеки, библиотеки компонент, ресурсы и т.д.).

В состав проекта обязательно входят следующие элементы :

· основной файл проекта, имеющий расширение.DPR (D elphi PR oject ). В проекте может существовать только один файл с таким расширением. Это небольшой текстовый файл на языке Object Pascal , который содержит ссылки на все формы проекта и инициализирует приложение;

· файлы всех форм проекта. Для каждой формы формируется пара одноименных файлов – файл Pascal -модуля с обычным расширением.PAS и файл ресурсов формы с расширением.DFM (D elphi F orM ). Любая форма проекта всегда должна иметь свою пару файлов модуль-ресурс. Обратное не обязательно, т.е. проект может включать в себя модули и файлы ресурсов не относящиеся ни к одной из форм приложения;

· файл ресурсов приложения (*.RES). В нем содержатся ресурсы приложения, не вошедшие в формы;

файл опций проекта (*.DOF – D elphi O ptions F ile ). В этом файле сохраняются значения директив и опций компилятора, настроек компоновщика, названия рабочих каталогов, параметры командной строки запуска приложения.

Пример программы

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

Запускаем Delphi . Если загрузка прошла успешно, то на экране монитора мы увидим то, что представлено на рис.1. В строке заголовка главного окна Delphi присутствует надпись Delphi 3 – Project1 . Это название нашего проекта и программы. В строке заголовка окна формы приложения написано Form1 . Если нажать клавишу F12 или щелкнуть мышью на кнопку Toggle
Form/Unit
(панель быстрого доступа) или выбрать пункт меню View/Toggle Form/Unit , то окно редактора кода переместится на передний план и мы увидим содержимое страницы Unit1 редактора, в которой представлен Pascal -код модуля Unit1 . Добавим в окно редактора кода еще одну страницу, в которой расположится код основного программы проекта. Для этого выберем пункт меню View/Project Source . Ниже представлено содержимое двух страниц редактора кода: Pascal-код главной программы и Pascal-код модуля главной формы проекта, соответственно.

Сохраним файлы проекта в созданном директории PO_EVM . Для этого нажмем кнопку Save all на панели быстрого доступа или выберем пункт меню File/Save Project As… . В появившемся стандартном Windows- окне сохранения файлов выберем папку PO_EVM и последовательно сохраним Pascal -код модуля формы и Pascal -код программы в файлах с именами IDE_Un1.pas и IDE_Pr.dpr соответственно.

program IDE_Pr;

IDE_Un1 in ‘IDE_Un1.pas’ {Form1};

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

unit IDE_Un1;

Windows, Messages, SysUtils,

lasses, Graphics, Controls,

TForm1 = class(TForm)

{ Private declarations }

{ Public declarations }

Если сейчас посмотреть содержимое папки PO_EVM , то в ней будут находиться следующие файлы проекта: IDE_Pr.dof – файл опций проекта; IDE_Pr.dpr – основной файл проекта; IDE_Pr.res – файл ресурсов проекта; IDE_Un1.pas – файл Pascal-кода модуля формы; IDE_Un1.dfm – файл ресурсов формы.

Желательно изменить некоторые стандартные настройки среды, в частности для того, чтобы на экране отображался процесс компиляции и компоновки программы, а также, чтобы перед каждым запуском программы на исполнение автоматически сохранялись все модифицированные файлы проекта. Сделать это можно в диалоговом окне Environment Options… , которое можно вызвать из меню Tools/ Environment Options… . На страничке Preferences в разделе Desktop contens установить переключатель в положение Desktop only , в разделе Autosave options установить выключатели в пунктах Editor files и Desktop , а в разделе Compiling and Running установить выключатель Show compiler progress .

Простейшая программа в Delphi уже готова к исполнению. Нажав кнопку Run на панели быстрого доступа или клавишу F9 , можно наблюдать процессы компиляции и компоновки программы, после которых начнет исполняться наша программа. Визуально программа представлена на экране пустым окном со стандартной Windows- строкой заголовка, содержащей пиктограмму приложения, наименование формы и три кнопки управления окном. Выход из программы и возврат в среду Delphi осуществляется стандартным для Windows способом – комбинацией клавиш Alt-F4 или нажатием на кнопку закрытия приложения. Если сейчас просмотреть содержимое папки файлов проекта PO_EVM , то можно заметить, что в ней появились еще два файла: IDE_Un1.dcu и IDE_Pr.exe – откомпилированный файл модуля формы и загрузочный (исполняемый) файл приложения. Файл IDE_Pr.exe можно запускать на исполнение автономно, т.е. вне среды Delphi . После выхода из среды Delphi , в папке образуется еще один файл IDE_Pr.dsk – файл с индивидуальными пользовательскими настройками среды.

Приведем примерную последовательность действий программиста, который создает программу “Калькулятор +/- “. Это, с позволения сказать, приложение предназначено для выполнения операций сложения и вычитания вещественных чисел. При запуске окно (форма) программы должно выглядеть как на рис. 7.

На форме расположены три строки ввода/вывода (компоненты типа TEdit ) для ввода двух операндов и вывода результата; пять кнопок (четыре компоненты типа TButton и одна – TBitBtn ) – сброс, указание типа и результата операции (C , + , , = ), выхода из программы (Close); три надписи для обозначения операндов и результата (компоненты типа TLabel ); разделительный интерфейсный элемент для выделения поля вывода результат счета (компонент TBevel ).

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

1. Свойство формы Caption в инспекторе объектов изменяем со значения Form1 на строковое значение Калькулятор +/- . Изменение значения названия формы сразу заметно в строке заголовка формы;

2. На странице Standard палитры компонентов щелкаем левой кнопкой мыши на изображении компонента Label , затем перемещаем указатель мыши в район левого верхнего угла формы и щелкаем левой кнопкой там. В этом месте на форме появится изображение компонента Label с надписью Label1 . Изображение компонента выделяется по периметру шестью черными квадратиками – маркерами изменения размеров (размерные маркеры). Выделение маркерами означает, что данный компонент сейчас является активным. С помощью мыши стандартными Windows- приемами можно изменять размеры компонента, перемещать его по форме. Для активизации другого компонента формы необходимо просто щелкнуть на нем левой кнопкой мыши. Содержимое закладок инспектора объектов всегда соответствует активному компоненту, при активизации другого компонента, состав полей инспектора объектов автоматически меняется. Изменим свойство Caption компонента Label со значения Label1 на значение 1-ый операнд . Свойству Name этого компонента придадим значение lb_1 .

3. Действуя аналогично, расположим второй компонент-метку немного ниже первой, задав, соответственно, свойствам Caption и Name значения 2-ой операнд и lb_2 .

4. На той же странице Standard палитры компонентов выберем компонент Edit (строка редактирования) и поместим его на форме правее первой метки. Свойству Name присвоим значение ed_1 , а свойство Text сделаем пустым.

5. Действуя аналогично, расположим вторую строку редактирования правее второй метки, задав, соответственно, свойствам Text и Name значения пустой строки и ed_2 .

6. На странице Additional палитры компонентов выберем компонент Bevel и поместим его так, чтобы он изображал “итоговую” черту под второй меткой и второй строкой ввода. Свойство Name, равное Bevel1 , изменять не будем.

7. Под компонентом Bevel разместим еще одну пару “метка – строка ввода” для вывода результата вычислений. Свойствам Name присвоим значения lb_3 и ed_3 , свойству lb_3.Caption – значение Результат , а свойству Text компонента ed_3 – значение пустой строки.

8. Поместим еще одну метку для изображения текущей арифметической операции: (?, +, –) - операция не определена, операция сложения, операция вычитания. Расположим эту метку между двумя первыми метками, ближе к левым границам компонентов для ввода операндов (см. рис.7). Свойству Name присвоим значение lb_oper , а свойству Caption – значение ? . Установим также подсвойство Size в свойстве Font для этой метки, равным 14 ;

9. Подравняем компоненты. Стандартным Windows- приемом выделим компоненты – метки. Для этого, держа нажатой кнопку Shift , последовательно щелкая левой кнопкой мыши по компонентам-меткам, активизируем одновременно все три метки. Если теперь щелкнуть правой кнопкой мыши, то по законам Windows 95 должно появиться контекстное меню – оно и появляется. Выберем в нем пункт A lign… (выравнивание). Теперь на экране мы видим окно Alignment . Выберем на панели Horizontal пункт Left sides и нажмем кнопку Ok . В результате этого все три компонента – метки выровняются по левой границе самой левой компоненты. Аналогичными действиями подравняем и все три строки редактирования. Строки редактирования можно выровнять и по размерам, выделив их одновременно все три и выбрав в контекстном меню пункт Size… . “Тонкую” работу по изменению размеров и перемещению компонент выполняют обычно не мышью, а клавишами управления курсором при нажатых, соответственно, сдвиговых клавишах Shift и Ctrl . Эти действия можно производить не только с одним компонентом, но и с выделенной группой компонентов.

10. Теперь расставим на форме управляющие кнопки. Их у нас пять (см. рис.7). Первые четыре кнопки – кнопка сброса, кнопки операций (сложение (+) и вычитание (–)) и кнопка результата. Пятая кнопка – кнопка завершения работы программы. На странице Standard палитры компонентов выберем компонент Button (кнопка) и поместим его правее первой строки редактирования. Свойствам Caption и Name кнопки присвоим соответственно значения C и btn_Clear . Аналогичным образом располагаем и три другие кнопки на форме, назвав (свойство Name ) их btn_sum, btn_sub и btn_rez , с наименованиями (свойство Caption ) + , и = (см. рис.7). Выделив кнопки в группу, дважды щелкнем на составном свойстве Font в инспекторе объектов. В поле Size свойства Font зададим размер шрифта 14 пунктов. После установки этого значения размер символов на кнопках увеличится.

11. Пятая кнопка – кнопка завершения программы – выбрана со страницы Additional . Это первый по порядку компонент на этой странице – кнопка типа BitBtn (командная кнопка с надписью и пиктограммой). Расположив кнопку на показано на рис.7, выберем из списка значений свойства Kind значение bkClose . Этим выбором полностью определяются визуальные атрибуты и функциональное назначение кнопки.

12. В заключение процесса построения интерфейсной части программы уменьшим форму до размеров, приведенных на рис.7.

На этом заканчивается первый этап создания приложения – построения интерфейса. Необходимо отметить, что на любом этапе построения интерфейса можно в любой момент запустить программу на исполнение. В процессе выполнения вышеописанных шагов мы не написали ни одной строчки, ни одного Pascal-оператора. Все записи в тексте модуля формы приложения Delphi делает сама. К этому моменту в интерфейсной части модуля формы произошли изменения – добавились описания компонентов, помещенных нами в форму и стандартные модули Delphi – Buttons, StdCtrls, ExtCtrls.

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs,

Buttons, StdCtrls, ExtCtrls;

TForm1 = class(TForm)

lb_Oper: TLabel;

btn_Clear: TButton;

btn_sum: TButton;

btn_sub: TButton;

btn_rez: TButton;

bb_Close: TBitBtn;

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

Сначала словесно оговорим то, что должно происходить при нажатии той или иной кнопки, в каких случаях и какого содержания сообщения должны появляться на экране:

1. Нажатие на кнопку “Очистить” (С ) - очистить все три строки редактирования и в качестве знака операции отобразить знак вопроса (?) ;

2. Нажатие на кнопку “Сложить” (+ ) - изменить изображение знака операции на знак плюс (+) ;

3. Нажатие на кнопку “Вычесть” () - изменить изображение знака операции на знак минус (–) ;

4. Нажатие на кнопку “Вычислить” (= ) - провести проверку на правильность данных в первых двух строках редактирования. Если данные правильные (числа), то провести соответствующую арифметическую операцию и вывести результат в строку вывода. Если обнаружена ошибка в исходных данных, то следует вывести сообщение об этом с указанием места ошибки.

Теперь переведём (транслируем) на Pascal-код каждый из вышеперечисленных пунктов. Каждый компонент имеет список событий (список приводится на второй странице (Events ) инспектора объектов), на которые он может реагировать (которые он может обрабатывать). Наша задача – написать код, который будет выполняться при возникновении того или иного события. Для кнопок в Delphi определены несколько обработчиков событий, нас будет интересовать обработчик события “Однократное нажатие на кнопку” (щелчок левой кнопкой мыши в момент нахождения указателя мыши над компонентом Button ). Этот обработчик называется OnClick . Каждый обработчик события оформляется в отдельную процедуру. Название этой процедуре формирует сама среда Delphi .

Напишем обработчик события однократного нажатия на кнопку “Очистить”. Для этого выделим на форме кнопку “Очистить” (С ). Активизируем страницу Events в окне инспектора объектов. Дважды щелкнем на пустом поле правого столбца рядом с надписью OnClick . После этого Delphi автоматически отображает окно редактора кода IDE_Un1 и помещает текстовый курсор для вставки текста внутри процедуры TForm1.btn_ClearClick:

procedure TForm1.btn_ClearClick(Sender: TObject);

как бы приглашая нас начать печатать с этого места Pascal -код этой процедуры. Обратите внимание на название процедуры, которое сформировала среда Delphi . Оно состоит из названия формы, на которой расположена компонента (кнопка), имени этой компоненты (btn_Clear) и названия обработчика события – Click . Следуя содержанию первого пункта нашего словесного алгоритма, вставим в тело процедуры следующие строки Pascal -кода:

lb_Oper.Caption:=’?’; {тип операции неопределен (метка – ?)}

ed_1.Text:=”; {очистить строку для ввода первого операнда}

ed_2.Text:=”; {очистить строку для ввода второго операнда}

ed_3.Text:=”; {очистить строку для вывода результата}

Действуя аналогично, сформируем обработчики события “Однократный щелчок левой кнопкой мыши на компоненте” для интерфейсных кнопок “Сложить” (+ ) и “Вычесть” ():

– для кнопки “Сложить” строка кода - lb_Oper.Caption:=’+’;

– для кнопки “Вычесть” строка кода - lb_Oper.Caption:=’-‘;

Обработчик события OnClick для кнопки “Вычислить” (= ) будет содержать следующий Pascal -код:

procedure TForm1.btn_rezClick(Sender: TObject);

Val(ed_1.Text,r1,i);

if i<>0 then begin

ShowMessage(‘Ошибка в первом операнде’);

Val(ed_2.Text,r2,i);

if i<>0 then begin

ShowMessage(‘Ошибка во втором операнде’);

case lb_oper.Caption of

‘+’ : ed_3.Text:=FloatToStr(r1+r2);

‘-‘ : ed_3.Text:=FloatToStr(r1-r2);

else ShowMessage(‘Не определен тип операции’);

В обработчике события TForm1.btn_rezClick введены две локальных вещественных переменных r1 и r2 для запоминания числовых значений двух операндов и целочисленная переменная i для использования в Pascal -процедуре Val преобразования строковой переменной в числовое представление. Этот обработчик реализует четвертый пункт словесного алгоритма работы программы. Сначала проверяется на правильность строка, введенных пользователем, символов первого операнда. Если это не число, то процедурой ShowMessage выводится соответствующее ситуации сообщение и по процедуре Exit заканчивается выполнение кода процедуры. В случае корректности данных переменная r1 примет числовое значение первого операнда. Аналогичным образом проверяется второй операнд и, если здесь все нормально, то переменная r2 примет числовое значение второго операнда.

Оператор Case реализует арифметическую операцию над переменными r1 и r2 в зависимости от того, какой символ (+ , , ? ) определяет значение свойства Caption метки lb_oper . Если знак арифметической операции не определен (у нас это символ ? ), то выдается соответствующее сообщение и операция не производится.

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

procedure btn_sumClick(Sender: TObject);

procedure btn_ClearClick(Sender: TObject);

procedure btn_subClick(Sender: TObject);

procedure btn_rezClick(Sender: TObject);

На этом можно закончить программную реализацию задачи создания простейшего калькулятора, осуществляющего операции сложения и вычитания вещественных чисел. Отметим также, что наше приложение на 99% защищено от ошибок, связанных с операциями над некорректными исходными данными (а почему не 100% ?).

Виктор Карпинский, Владимир Молочков (В. Новгород)

В прошлом номере журнала вы ознакомились с основами основ языка программирования, теперь же начнем осваивать его на практике. Для первого знакомства рассмотрим несколько примеров написания простых программ на Delphi, скорее забавных, чем полезных. Надеемся, что у читателя по мере работы над этими программами возникнут свои оригинальные идеи относительно того, как показанные здесь возможности Delphi и приемы визуального программирования применить для своих, более интересных программ.

Шуточная программа «Чувствительная кнопка»

Что значит «чувствительная»? Кнопка будет как-то реагировать на все, что мы с ней будем делать. Ну, например, если нажать на нее курсором мыши, то она будет возмущаться: «Ой! Меня нажали». А если потом отпустить, то удовлетворенно сообщит: «Уф, меня отпустили».

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

Сначала создадим и сохраним новый проект. Для этого сделайте следующее:

1. Запустите Delphi (как ее установить на своем компьютере, мы рассказали в предыдущей статье). Запустить ее можно так, как показано на рисунке.

2. После загрузки появится интерфейс Delphi (он описан в предыдущей статье). При этом стартовая форма Form1 и ее программный модуль Unit1 будут созданы автоматически. Для того чтобы сохранить ваш первый проект, воспользуйтесь меню Файл (File) > Сохранить проект как… (Save Project as…).

3. Открывается окно сохранения программного модуля Unit1. С помощью кнопки «Создание новой папки» создайте папку «Пример 1″.

4. Откройте созданную папку и два раза нажмите кнопку «Сохранить». Первое нажатие кнопки сохранит файл Unit1.pas, содержащий текст программы, а второе — файл Project1.dpr, содержащий общие сведения о проекте. На самом деле сохраняется больше, чем два файла: файл Unit1.dfm содержит сведения о связанной с программным модулем Unit1 форме Form1. Файл Project1.cfg содержит параметры конфигурации проекта, а файл Project1.dof — используемые настройки системы программирования Delphi. Впрочем, начинающему программисту это знать не обязательно.

Если вам показалось, что сохранять написанную в Delphi программу сложно, можем вас успокоить: так, как описано выше, надо сохранять только один раз, при начале работы над новым проектом. Все дальнейшие изменения сохраняются очень просто — одним нажатием кнопки «Сохранить» (Save) главного окна Delphi.

Теперь мы готовы начать визуальное программирование. У нас уже есть один объект — сама форма Form1. Поменяем некоторые ее свойства с помощью инспектора объектов.

5. В инспекторе объектов (Object Inspector) найдите свойство Caption (заголовок). Щелкните против него в графе значений свойств мышью, сотрите имевшееся там слово «Form1″ и впишите вместо него «Чувствительная кнопка».

Заголовок формы сразу изменится.

6. Аналогичным способом изменим размеры формы. В инспекторе объектов найдите свойство Height (высота) и замените его значение на 200, а потом значение свойства Width (ширина) — на 300. Опять-таки вы сразу увидите изменение параметров формы. Это визуальное программирование в действии.

7. Значения некоторых свойств не вводятся вручную, а выбираются из имеющегося списка. Найдите свойство Position (положение формы на экране). Когда вы щелкнете по его значению мышью, там появится кнопка выбора вариантов. Выберите poScreenCenter. Тогда ваша форма будет всегда появляться в центре экрана.

На этот раз никаких видимых изменений в положении формы не произошло. Свойство Position влияет на форму при работе программы, а не в режиме редактирования. Проверки ради вы можете нажать в главном окне Delphi кнопку «Выполнить» (Run). На этой кнопке нарисована зеленая стрелка. После ее нажатия окна просмотра списка объектов Object TreeView и инспектора объектов исчезнут, а окно созданной вами программы появится в центре экрана.

Для возвращения в режим редактирования надо закрыть программу «Чувствительная кнопка» обычным для приложений Windows способом — нажав в ее правом верхнем углу на кнопочку с крестиком. Написанная программа пока еще ничего не делает, но уже является настоящим полноценным приложением Windows. У нее появляется даже своя кнопка на панели запуска программ внизу экрана, ее можно свернуть или развернуть во весь экран.

Постарайтесь сразу завести себе привычку: прежде чем запустить программу кнопкой Run, обязательно сохраните внесенные в нее изменения, нажав кнопку Save.

Однако продолжим редактирование формы. Название нашей программы обещает чувствительную кнопку, а кнопки на форме пока нет. Вставим ее туда.

8. Для этого наверху в главном окне Delphi в палитре компонентов стандартной (Standard) выберите компонент «Кнопка» (Button). Вставьте его на форму, просто щелкнув по ней мышкой.

Теперь у нас есть два объекта: форма Form1 и кнопка Button1. Их можно выбирать для редактирования либо щелчком мыши (выделенный объект, кроме самой формы, обозначается маленькими черными квадратиками по краям). А можно выбирать их и в инспекторе объектов.

9. Так же, как вы это делали с формой (см. пункты 5 и 6), измените заголовок (Caption) и размеры (Width и Height) кнопки. Заголовок сделайте «Здравствуйте, я — кнопка», ширину 200, высоту 40. Сохраните и запустите программу. Теперь она выглядит так:

Убедитесь, что кнопка нажимается (хотя пока еще при этом ничего не происходит, ведь мы пока еще не написали в тексте программы ни одного программного кода). Текст в окне редактора кода уже довольно велик, но весь он написан автоматически. Вот этот текст:

Листинг 1. Автоматически созданный программный код

unit Unit1;

interface

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

TForm1 = class(TForm)

Button1: TButton;

private

{ Private declarations }

{ Public declarations }

Form1: TForm1;

implementation

{$R *.dfm}

В разделе uses указаны те библиотеки, которые нужны для компиляции программы. Например, библиотека StdCtrls добавилась в момент внедрения на форму кнопки, потому что именно в этой библиотеке содержатся необходимые для работы кнопки части программного кода. Раздел кода программы type описывает форму (ее класс как программного объекта TForm1) и перечисляет все объекты, размещенные на ней. Например, в момент внедрения на форму кнопки сюда добавилась строка Button1: TButton. Далее в разделе var перечисляются все глобальные для данного модуля переменные. Пока такая переменная только одна — сама форма Form1. После слова implementation будут появляться процедуры обработки событий, но об этом — чуть ниже.

Итак, кнопка у нас есть. Однако название программы обещает, что кнопка будет чувствительная. Как это сделать?

У объектов программы помимо обычных свойств (например, размеров) есть и свойства, связанные с реакцией этих объектов на какие-то события. Эти свойства называются методами, или обработчиками событий, и помещаются в окне инспектора объектов на вкладке Events.

10. Убедитесь, что на форме в режиме редактирования выбран компонент Button1. На вкладке Events окна инспектора объектов (прокрутив вписок вниз) выберите свойство OnMouseDown. Это означает «При нажатии мышью». Щелкните возле названия этого свойства мышью, чтобы место для его значения выделилось белым цветом, а потом по этому белому пустому месту сделайте двойной щелчок мышью.

В результате появится следующий текст в окне редактирования кода:

Листинг 2. Автоматически созданный шаблон процедуры Button1MouseDown

Такой фрагмент текста называется описанием процедуры. После ключевого слова procedure находится название (имя) процедуры. В данном случае его можно расшифровать так: на форме Form1 для объекта Button1 при возникновении события Mouse Down. Далее в круглых скобках помещены описания формальных параметров процедуры. О таких параметрах речь пойдет при изучении более сложных и интересных примеров программирования. Следующее ключевое слово begin (начало) открывает тело процедуры. Все команды, написанные между begin и end, будут выполнены при наступлении указанного события (в данном случае при нажатии мышью). Описание процедуры, у которого между begin и end ничего нет, называется заглушкой процедуры. Ту часть кода, которую программист вписал вручную, можно вручную стереть или изменить. Однако автоматически появившуюся часть кода удалять или изменять не следует. Если появилась ненужная заглушка процедуры (например, случайно сделали двойной щелчок мышью по объекту), то ее не надо удалять самому. Пустые, не измененные программистом заглушки автоматически исчезают при сохранении программы.

Щелкните мышью по тексту так, чтобы между словами begin и end появился текстовый курсор (мигающая вертикальная черточка). Принято все, что мы добавляем между begin и end писать с некоторым отступом, то есть не прямо от левого края, а немного правее. Впишите туда команду, означающую, что значение свойства Caption объекта Button1 надо заменить на «Ой! Меня нажали». Вот как это должно выглядеть:

Листинг 3. Работающий текст процедуры Button1MouseDown для программы «Чувствительная кнопка»

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

Button1.Caption:= «Ой! Меня нажали»;

Обратите внимание на две особенности языка Паскаль. Во-первых, название свойства и объекта пишутся в обратном порядке: мы говорим «свойство Caption объекта Button1″, а пишем «Button1.Caption». Перед точкой стоит имя объекта, а после точки имя свойства. Во-вторых, вместо кавычек в языке Паскаль для текстов используются апострофы. Это то же, что кавычки, но одинарные (‘). Апострофы, как и кавычки, используются парами: один перед текстом, а второй после него. Внутри пары апострофов можно писать что угодно, в том числе и русскими буквами.

12. Сохраните и запустите программу. Убедитесь, что на нажатие кнопка уже реагирует, а на отпускание пока нет.

Домашнее задание

Хоть мы и не в школе, однако, как говорили древние, «практика — учительница жизни».

  • Найдите в окне инспектора объектов обработчик события «Мышь отпущена» (OnMouseUp) и заставьте Delphi создать шаблон соответствующей процедуры.
  • Аналогично выполненному выше пункту 11 напишите между begin и end команду, меняющую заголовок кнопки на текст «Уф, меня отпустили».
  • Сохраните, запустите программу и убедитесь, что кнопка «чувствует» не только нажатия мышью, но и отпускание.

Программа «Вычисления по формуле»

Коль скоро компьютер изначально создавался как вычислительная машина, наиболее стандартное для него действие — что-то вычислять. Довольно часто надо много раз вычислять значение по какой-то формуле, только с разными исходными данными. Простой калькулятор в этом случае неудобен, потому что для каждого вычисления надо не только вводить новые исходные данные, но и повторять все операции над ними.

Напишем несложную программу, автоматизирующую такие вычисления, например, для вычисления объема конуса. Из геометрии известно, что, если конус имеет высоту h и радиус основания R, то его объем вычисляется по формуле:

Значит, наша программа должна дать пользователю возможность ввести два числа (высоту и радиус основания), а после нажатия кнопки — сообщить объем конуса. Выполним разработку этой программы в следующем порядке:

1. Если вы продолжаете работу с Delphi, то закройте старый проект (меню Файл (File) > Закрыть все (Close all)), а потом создайте новый (меню Файл (File) > Создать новый (New) > Приложение (Applicatoin)). Сохраните новый проект в папке «Пример 2″ (как это сделать — описано в начале примера 1).

2. Внедрите на форму следующие компоненты. Три объекта типа надпись (Label), два поля ввода (Edit) и кнопку (Button). Они все имеются в палитре стандартной (Standard) главного окна Delphi. Указанные шесть компонентов разместите на форме примерно так, как показано на рисунке.

Первые две надписи нужны для пояснения о том, что должны быть введены именно высота конуса и радиус его основания. В третьей надписи будет сообщаться результат. В поля ввода будут введены два исходных числа. Все действия по вычислению объема конуса выполнятся при нажатии кнопки.

3. Измените размеры и заголовки формы и других объектов, а также свойство Text объектов Edit1 и Edit2 так, чтобы получился следующий интерфейс

4. Для кнопки Button1 создайте обработчик события OnClick (если по ней щелкнули мышью). Напишите перед begin и между begin и end несколько строк так, чтобы в результате получилось следующее:

Листинг 4. Работающий текст процедуры Button1Click для вычисления по формуле

procedure TForm1.Button1Click(Sender: TObject);

var h,R,V: real;

h:= StrToFloat (Edit1.Text);

R:= StrToFloat (Edit2.Text);

V:= h * pi * R*R / 3;

Label3.Caption:= «Объем конуса V=» + FloatToStr (V);

Что мы написали? Во-первых, мы указали, что процедура будет работать с числовыми величинами, обозначенными h, R и V. Далее мы написали, что значение переменной h берется из свойства Text объекта Edit1 (помните, что обозначение Edit1.Text читается справа налево?). Аналогично мы взяли значение для переменной R из объекта Edit2.

После этого стоит команда вычисления значения переменной V. Как вы видите, это та самая формула объема конуса, которую мы знаем из геометрии, только написанная в одну строку. В ней написано: h умножить на пи, потом умножить на квадрат R, а потом поделить на 3. Умножение обозначается звездочкой (обратите внимание: в программировании, в отличие от обычной математики, нельзя не ставить знак умножения).

Последняя написанная строка изменяет заголовок (Caption) объекта Label3 (третьей надписи). В этот заголовок помещается пояснительный текст «Объем конуса V=», к которому сзади добавлено значение переменной V.

В программе используется функция StrToFloat, превращающая строку текста (написанное цифрами число) в вещественное число (то есть в число, у которого может быть дробная часть). Это нужно потому, что свойство Text объектов Edit, равно как и свойство Caption любых объектов — строковое (String). А для вычисления нужны числовые значения (слова real в разделе var и Float в названии функции StrToFloat означают вещественное число). Таким образом, название функции StrToFloat означает: преобразовать значение из текстового формата (String) в числовой (Float) формат. Обратное действие — функция FloatToStr. Для целочисленных величин, описанных в разделе var как integer, есть функции StrToInt и IntToStr.

5. Сохраните и запустите программу. Убедитесь, что после нажатия кнопки (при h=15,25 и R=8,4) получается объем конуса V=1126,82645298959. Вводите (только правильно, не используя букв и прочих невозможных в записи числа символов) новые значения h и R и, нажимая кнопку, получайте новый ответ.

Домашнее задание

  • Напишите в Delphi программу, вычисляющую объем параллелепипеда со сторонами A, B и C (его объем есть произведение этих трех чисел).
  • Напишите в Delphi программу, вычисляющую заработную плату и подоходный налог работника, отработавшего N часов при почасовой ставке S. Его заработная плата Z=N*S, а подоходный налог (13%) составляет P=13/100*Z.

Неизменяемый «Read Me»

Компьютер может не только вычислять, но и работать с текстами. Самый простой пример программы, работающей с текстами, — это программа ReadMe, что значит «Прочти меня». Обычно такой файл есть на диске, с которого устанавливается на компьютер какая-нибудь новая игра или полезная программа. В файле ReadMe содержатся все необходимые пояснения, например, как именно установить программу.

Часто сам ReadMe представляет собой обычный текстовый файл, который открывается с помощью какого-нибудь текстового редактора, например, «Блокнота» Windows. Но это не всегда удобно: текстовый редактор позволяет не только читать текст, но и редактировать, то есть изменять его. И может получиться, что кто-то нечаянно или по злому умыслу изменит содержащиеся в ReadMe сведения. Поэтому может оказаться удобной программа вроде той, которую мы сейчас напишем.

Ну, а использовать ее вы сможете и в качестве прикола. Например, можно написать кому-нибудь в таком виде электронное письмо или оставить на рабочем столе файл с названием «Прочитать в случае аварии», а внутри содержащий текст: «Зачем же ты читаешь этот файл? Ведь аварии никакой нет! Что за невоспитанность?». Интересная особенность таких текстов в том, что только тот, кто написал программу, может изменить появляющийся текст, а тот, кто читает, — не может.

Итак, напишем программу ReadMe, выполняя по порядку следующие шаги:

1. Создайте новый проект Delphi (меню Файл (File)4Создать новый (New)4Приложение (Applicatoin)). Сохраните его в папке «Пример 3″.

2. Разместите на форме компонент Memo.

3. Измените заголовок формы и ее размеры примерно так, как показано на рисунке (не забудьте свойству Position придать значение poScreenCenter).

4. Теперь мы сделаем так, чтобы объект Memo1 всегда охватывал собою всю форму. Для этого в инспекторе объектов измените его свойство Align (что значит «выравнивание») на alClient. Результат будет такой, как показано на следующем рисунке.

5. Теперь в инспекторе объектов (по-прежнему для компонента Memo1) найдите свойство Lines (что значит «строки»). Оно имеет тип TStrings. Когда вы его выделите, справа от слова TStrings появится кнопочка с троеточием.

6. Нажмите эту кнопочку, и откроется встроенный текстовый редактор. Сотрите имеющийся в нем текст «Memo1″ и напишите все, что сочтете нужным. Вас не должно смущать, что текст, который вы пишете, образует длинную строчку, длиннее, чем само окно текстового редактора. Не надо искусственно делить его на более короткие строки — компьютер сделает это за вас. Клавишу Enter следует нажимать только в конце абзаца. По окончании ввода текста нажмите кнопку ОК.

Текст показывается с автоматическим переносом слов на новую строку благодаря тому, что установлено свойство Word Wrap (перенос по словам). Если значение этого свойства true (истина), то текст будет автоматически переноситься, если false (ложь) — не будет.

7. Сохраните проект и запустите программу. Убедитесь, что введенный вами текст появляется. Правда, его можно изменять, но если программу закрыть, а потом запустить снова, то изменения исчезают и восстанавливается первоначальный текст. Впрочем, если вы хотите, чтобы ваш ReadMe вообще нельзя было изменить, даже временно, это тоже можно сделать. Остановите программу (то есть вернитесь в режим редактирования проекта, когда видно окно инспектора объектов). Измените у объекта Memo1 свойство Read Only (только читать) на true (истина). Для этого выделите это свойство в инспекторе объектов, нажмите появившуюся справа кнопочку со стрелкой и выберите из открывшегося списка слово true. Снова сохраните и запустите программу. Убедитесь, что теперь текст редактировать не получается.

Напомним, что результатом работы программы является файл Project1.exe, который находится в папке «Пример 3″. Скопируйте или перенесите этот файл туда, куда вам нужно (на рабочий стол, на дискету и т. п.). Файл можно переименовать в ReadMe.exe или еще как-нибудь, на ваш вкус. Для этого надо найти файл в «Проводнике» Windows или с помощью какого-то другого средства работы с файлами, щелкнуть по его ярлыку правой клавишей мыши и в появившемся контекстном меню выбрать пункт «Переименовать».

Домашнее задание

  • Напишите указанным выше способом программу, допустим, с поздравлением кому-то из ваших друзей или родных с днем рождения (или с 23 февраля, или с 8 марта). В следующих статьях цикла мы покажем, как использовать в таких поздравлениях рисунки, звуки и видео.

До скорой встречи!

Приведем небольшой список известных программмных продуктов, написанных на Delphi. Этот список можно продолжить. Если вам известны программы реализованные на Delphi - Пишите в комментариях. Зачем это надо знать? А чтобы понять, стоит ли использовать Delphi для реализации вашего проекта или отдать предпочтение какой-то другой среде разработки. Здесь можно высказать свое мнение по поводу выбора среды разработки для приложения. Чему отдавать предпочтение: тому что хорошо знаешь или тому на чем пишут другие. А может быть есть другой подход?

Продукция Embarcadero:
Embarcadero Delphi, Embarcadero C++ Builder, Borland JBuilder 1 и 2 версии.
Администрирование/разработка баз данных:
MySQL Tools (Administrator, Query Browser), Navicat, IBExpert, TOAD (software).
Инженерное ПО:
Altium Designer/Protel.
ПО для химической отрасли:
Продукты ACD/Labs.
Просмотрщики графики:
FastStone Image Viewer, FuturixImager, Photofiltre.
Видео и аудио проигрыватели:
The KMPlayer (не путать с KMPlayer), X-Player, Snow Player, AIMP.
Доставка информации в Интернете:
QIP и R&Q, Skype, The Bat! и si.Mail, PopTray, FeedDemon, XanaNews, Xnews.
Создание музыки:
FL Studio (ранее FruityLoops), Guitar Pro (до версии 6.0).
Разработка программного обеспечения:
Dev-C++, Dev-PHP, Maguma Open Studio и Open Perl IDE (IDE), DUnit, Jedi Code Format, Game Maker, Help & Manual, Inno Setup.
Веб-разработка:
Macromedia HomeSite (HTML-редактор), TopStyle, Pro (CSS-редактор), Macromedia Captivate, Quick Page 2008.
Веб-браузеры (оболочки для MSIE):
Avant Browser, Netcaptor.
Утилиты:
Spybot - Search & Destroy, Ad-Aware, jv16 PowerTools, FDK, Total Commander, Frigate, DarkCrypt TC/GUI, ImageSpyer, StegoTC, Copernic Desktop Search, MCubix, Download Master, ASProtect, XNResourceEditor, Victoria, Battery Eater Pro.
Текстовые редакторы:
SynEdit, Notepad GNU, Bred, KeyNote, cEdit Professional, UniRed, gleditor.
Редакторы двоичных файлов (HEX-редакторы):
Hexapad.
Бухучёт и налогообложение:
Lacerte Professional Tax Software, Парус, ТурбоБухгалтер, AVARDA, Комплекс VirGo 2.5М.
Электронное декларирование и связь с госорганами
Альта ГТД PRO (подготовка и передача таможенных деклараций)
Торговый и складской учёт:
Полюс (Система учёта).
Программы для чтения и каталогизации электронного текста:
DarkLib, IxReader, Гарант F1.
Программы для создания анимаций:
Pivot Stickfigure Animator.
Программы для сжатия данных:
ALZip, PowerArchiver, PeaZip.
Компьютерные игры:
Age of wonders, Космические рейнджеры, Космические рейнджеры 2, Venom. Codename: Outbreak, Space Empires 4, Space Empires V, Pythian project, Битва героев, GTA 2, Hedgewars.

Если ты, %username%, едва прочитав заголовок этой статьи, чувствуешь butthurt стойкое неприятие к автору, если слова «TForm1», «circular reference» и «Access violation» для тебя не пустой звук, если после очередного холивара в уголке сознания снова зашевелился червячок - эта статья для тебя.

С завидной регулярностью появляются новые статьи как сторонников так и противников Delphi, и неизменно с новой силой разгорается холивар. И если лет 10-15 назад холивар назывался «Delphi vs C++», то теперь фронт переместился вплотную к окопам сторонников бывшего Borland и спор идет уже в рамках «Delphi vs не-Delphi». Даже самые упрямые последователи Н.Вирта иногда задумываются, почему вдруг стали изгоями и чудаками в сообществе программистов?
Если ты, читатель, все же считаешь что ничего кроме Delphi тебе не нужно для работы, сравни хотя бы вилки зарплат для вакансий Delphi и той же Java. Появилось желание изучить что-нибудь кроме Delphi? Я расскажу с чего начать на основе собственного опыта.

Откуда берутся Delphi-программисты

Будучи еще студентом, 7-8 лет назад я устроился в небольшую компанию тестировщиком. Шли годы, я освоил Delphi, на котором писались все десктопные приложения этой компании, стал ведущим программистом. Не считаю себя гуру, однако Delphi и VCL для меня - зачитанная до дырок книга. Все дырки пришлось научиться либо обходить, либо закрывать собственными заплатками. Справедливости ради стоит сказать, что VCL имеет совсем немного откровенных отказов. Многое из того что давным-давно есть в Delphi совсем недавно стало появляться в других платформах, однако на текущий момент у Delphi практически нет никаких преимуществ перед современными средствами разработки. Увы, но это факт.

Некоторое время назад биг-боссы пригласили меня на совещание и уговорили заняться новым проектом. Пришлось отложить любимый Delphi7 в самый темный и пыльный угол жесткого диска и, вооружившись интернетами, срочно осваивать Qt. Из глубин памяти, затянутые паутиной, понемногу всплыли скромные институтские познания С. Помноженные на популярные книги по С++ и документацию по Qt они начали давать первые результаты.

Разрабатывая desktop-приложения на любом языке программирования вы рано или поздно сталкиваетесь с синтаксисом С и элементами С++. Это и документации и примеры и мучительный «перевод» хедеров на любимый язык. С приходом опыта, программист Delphi все же может сносно понимать программы на С++, обилие «звездочек», «анперсандов», символы "==" уже не кажутся бессмысленной кашей и заговором коварного Страуструпа по уничтожению ваших мозговых клеток. В конце концов, начинаешь в некоторых конструкциях видеть определенную красоту. Далее будем предполагать, что читатель умеет сносно понимать С-синтаксис.

Итак, читатель, согласен изучить что-нибудь новое, но что же выбрать?

Путь первый. Самый простой. C#

Из современных языков С#, как ни странно, проще всего воспринимается Delphi-ориентированными мозгами. Чтобы пересесть с Delphi на C# вовсе не обязательно начинать с толстой книжки от Microsoft. Большинство вещей будут интуитивно понятны, остальное есть в MSDN. Все объекты, как и положено, являются указателями, методы и свойства доступны всегда через «точечку», никаких вам "->". Автоматическая сборка мусора, конечно, вызовет укоризненное покачивание головой у настоящего Delphiста, однако к хорошему быстро привыкаешь. Стоит отметить, что программировать на C# можно не только в Visual studio, есть прекрасная IDE SharpDevelop. Она бесплатна, как и Delphi . Порог вхождения минимален - установили, запустили, поехали! И в той и в другой среде можно грабить корованы программировать мышкой, как мы привыкли это делать в Delphi: редактор форм принципиально ничем не отличается, а двойной клик по кнопочке создаст метод-обработчик нажатия. Уже через полчаса вы сможете сделать первый helloworld, через сутки накатать работающий прототип собственного GPS-навигатора для старого но любимого КПК на Windows CE, а через неделю-две начнете на нем новый коммерческий проект.
Главное, не забывайте, оператор сравнения на равенство это двойное равно "==". Понять это невозможно, надо просто запомнить.

Путь второй, тернистый. С++

Сравнивая Delphi и С++ можно провести такую аналогию: Delphi это сильное тоталитарное государство. Исповедуй его идеологию - и будешь жить долго и счастливо и даже достигнешь определенных высот. Делать карьеру легко и приятно, путь предначертан. Но стоит сделать шаг в сторону - расстрел!
С++ - это демократия. Хочешь - сделай так, хочешь - эдак. Или наплюй и сделай по-своему. Но за свои действия отвечай, пожалуйста, сам.

Тут уже придется почитать специальную литературу. Лично я всегда предпочитаю книги для начинающих. Важно твердо разобраться именно в базовых вещах, тогда до высшего пилотажа быстрее дойдете сами. В данный момент дочитываю «C++ для начинающих» Герберта Шилдта. Если вы действительно опытный Delphi-программист, первые страниц сто можно полистать не очень внимательно. Особое внимание следует уделить работе с указателями и объектной модели.

Теперь надо выбрать IDE. Можно взять проверенную Visual Studio, я же выбрал Qt. Он бесплатен, кроссплатформеннен, имеет богатый набор классов, прекрасную IDE, а также широкую поддержку в сообществе. Качаем Qt, ставим, всё! Надо отдать должное, Qt не беспокоит начинающего программиста лишними вопросами, имеет встроенную документацию, примеры. Все как у дорогостоящих коммерческих IDE. Мышкой программировать уже не получится, хотя может это и к лучшему.
Первое, что не укладывается в Delphi-ориентированный мозг, это отсутствие примитивного типа string. К этому сложно привыкнуть, но это так. Во-вторых, чтобы использовать привычный нам подход к работе с объектами, придется явно объявлять их как указатели. В третьих, интерфейс модулей обычно хранится в отдельных заголовочных файлах. Это кажется избыточным на первый взгляд, однако в чужой монастырь со своим уставом, как известно, не ходят. Это только первые впечатления. Переварив и осмыслив их, вооружаемся книгами, мануалами, гуглами и начинаем переворачивать свое представление о программировании. Qt вам в помощь.

Путь третий. Извилистый. Web

Хотите открыть новые горизонты - добро пожаловать в web-программирование. Здесь царит анархия. Десятки технологий, сотни реализаций, тысячи взаимоисключающих рекомендаций. Здесь нет среды разработки, в которой можно было бы сделать весь проект. Впрочем, попробовать стоит, это интересно. Однако, не смотря на обилие и простоту большинства web-технологий сделать качественный продукт ничуть не проще, чем настольное приложение.

Заключение

Что вы выберете, решать конечно вам. Даже если вы останетесь верны Delphi - это ваш выбор, и не самый худший, надо сказать. В любом случае, читатель, помни: качество продукта определяется твоими способностями и навыками и только в самую последнюю очередь зависит от инструментов.

PS: За что я все-таки действительно люблю делфи, так это за быструю компиляцию:

Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!