Начинаем изучать Delphi
Лирическое отступление
Среди программистов, как и среди людей других профессий, существует множество мифов. Например, в Интернете
не раз попадались высказывания типа "С++ - это круто, а Delphi - отстой, на ней ничего путного не напишешь".
Такие высказывания могут позволить себе только дилетанты. Не бывает плохих языков программирования - бывают
плохие программисты (ну разве что плохой программист решит свой язык программирования придумать :-)).
Я, например, за свою многолетнюю практику пока не встречал задачи, которую нельзя было бы решить с
помощью Delphi. Да, в некоторых случаях приходится использовать Assembler, внешние драйверы и библиотеки - но
это делу не мешает. Что касается С++ и иже с ними, то там заморочек никак не меньше (с моей точки зрения даже намного больше,
во всяком случае с продуктами фирмы Microsoft). Ну а среда разработки -
это уже дело личных пристрастий.
Я выбрал Delphi. И еще ни разу об этом не пожалел...
Приступаем...
На начальном этапе изучения такой сложной программы, как
Delphi,
очень много времени уходит именно на то, чтобы разобраться с основными
принципами работы с программой. Постараюсь хотя бы немного сэкономить
ваше драгоценное время. Речь пойдет о
Delphi 7, но большинство советов
справедливы и для других версий.
-
- Устанавливаем программу на компьютер
- Запускаем
- Определяем директории для проекта
- Файлы проекта
- Инспектор объектов (Object Inspector)
- Компоненты
- Первая программа
- Компоненты: свойства
- Компоненты: события
- Пример программы: калькулятор
Устанавливаем программу на компьютер
Первый вопрос - где взять дистрибутив (если вы не знаете значения этого слова, то, возможно, вам рановато
изучать программирование :-)). Использовать пиратские копии в наше время уже не модно, а купить Delphi
не каждый может себе позволить. Поэтому могу посоветовать скачать бесплатную версию Turbo Delphi 2006 с сайта
компании Borland:
https://downloads.embarcadero.com/free/turbo.
Процедура регистрации и установки Turbo Delphi 2006 - процесс довольно сложный. Здесь вам придется вспомнить
английский язык и поискать в интернете некоторые пограммы, необходимые для работы Turbo Delphi 2006. Но
об этом как-нибудь в другой раз, а пока мы рассмотрим работу с Delphi 7.
На любом, даже самом захудалом пиратском диске, есть инструкция по
установке программы. Следуйте этим инструкциям, и все будет в порядке.
Однако, если у вас старый CD-ROM или диск, с которого вы устанавливаете
программу, скверного качества, то в процессе установки вы можете увидеть
тревожные сообщения. Сообщения на английском. Перевод может быть приблизительно
таким: "Не могу загрузить такой-то файл в такую-то папку". В этом
случае внимательно перепишите на листок бумаги названия файла и папки (полный путь)
и продолжайте установку. Если сообщения будут повторяться - перепишите названия
и других файлов/папок. Когда установка завершится - не перезагружайте компьютер (если он
перезагрузится автоматически - тоже ничего страшного). Но
Delphi пока не запускайте.
Сначала найдите на компакт-диске те файлы, которые программа установки не
смогла переписать, и вручную скопируйте их в соответствующие папки.
Только копируйте не все сразу (если их несколько), а по одному.
После этого перезагрузите компьютер. Конечно, таким образом можно
устанавливать любые программы - не только
Delphi. Меня этот способ не раз
выручал, когда у меня был старый, "заезженный" CD-ROM.
Если на диске есть русификатор - не советую вам его устанавливать.
Delphi - очень
мощная и сложная программа. Чтобы ее нормально русифицировать, требуется
очень квалифицированный специалист. А у пиратов такие не всегда есть.
Не следует устанавливать русификатор по двум причинам:
- Качественный русификатор для Delphi - большая редкость (во всяком
случае, я таких не встречал). Поэтому, он скорее всего внесет в программу
какие-нибудь "глюки", или вообще "вырубит" ее. Придется потом все удалять и
снова переустанавливать.
- Во всех учебных пособиях по Delphi пункты меню, вкладки и т.п. все
равно имеют английские названия. Поэтому, даже если русификатор попадется
более или менее работоспособный, вам он только повредит - придется читать
в книге английское название, а затем еще думать, как его перевел
русификатор и где этот пункт меню искать.
Запускаем
Программа загружается довольно долго - несколько десятков секунд. Ну а потом
вы увидите панели инструментов и шаблон новой формы. Форма - это один
из
компонентов в
Delphi. Сразу же вы можете "написать" свою первую
программу - просто нажмите
F9 или щелкните по зеленому треугольнику
на панели инструментов. Вы увидите ту же форму, но только это уже будет не
компонент, а готовая программа. Она "ничего не делает". Можно только
развернуть, свернуть или закрыть форму. Но эта простота обманчива. Такая
программа занимает около 360 КБ. Если вы писали когда-нибудь программы для
DOS, вы поймете, что такое 360 КБ. На
Паскале, например, в 360 КБ можно
запихнуть очень мощную программу, я уж не говорю про
Ассемблер. Поэтому
скажем огромное спасибо программистам фирмы
Borland, которые выполнили
за нас эту утомительную работу - создание стандартной формы
Windows.
Ну хорошо, программу мы какую-то "написали". Но нужно ее куда-то сохранить,
чтобы потом знать где ее найти и заняться уже наконец программированием. Для
этого переходим в следующий раздел:
Определяем директории для проекта
Delphi - программа довольно капризная. Она не любит, когда с ней некорректно
обращаются. Поэтому, особенно в первое время, вы постоянно будете вгонять
ее в "ступор", т.е. "вешать", причем капитально. Если программа не по настоящему
зависла, то можно ее вывести из "ступора" нажатием клавиш
Ctrl+F2. Ну а
если зависание серьезное - тогда только перезагрузка. При этом, конечно, все
несохраненные данные будут потеряны. Поэтому, их время от времени нужно
сохранять. Но сохранять куда? По умолчанию все ваши проекты сохраняются
в
Programm files\Borland\Delphi7\Projects. Согласитесь, что это не всегда удобно.
Каждый проект лучше разрабатывать в отдельной папке. Желательно
(хотя и не обязательно) сразу же сохранить в подходящую папку ваш
новый проект, в котором еще ничего нет, кроме новой формы. Поступаем так:
выбираем пункт меню
File --> Save Project As.. и сохраняем сначала
модуль (по умолчанию
Unit1), а затем файл проекта (по умолчанию
Project1).
Модулю и проекту вы можете присвоить другие имена. После этого сохраняем
время от времени этот проект, выбирая пункт меню
File --> Save или
нажимая соответствующую кнопку на панели инструментов.
Все прекрасно. Но вот вы решили проверить работу написанной вами программы
не из
Delphi, а автономно. Стали искать ее в своей папке, и не нашли.
А все дело в том, что откомпилированная программа устанавливается
все в той же папке по умолчанию
Programm files\Borland\Delphi7\Projects.
Как изменить настройки по умолчанию? Выбираем пункт меню
Project --> Options,
а в открывшемся окне выбираем вкладку
Directories/Conditionals и в полях
Output Directory, Unit Output Directory, BPL Output Directory и
DCP Output Directory
прописываем полный путь к вашей папке (можно выбрать обзор - кнопку с тремя точками,
и открыть нужную папку). Нажимаем кнопку ОК. Теперь все выходные файлы будут записываться
в указанную папку. Но после закрытия
Delphi все вернется в исходное состояние.
Поэтому, если необходимо, чтобы ваши файлы записывались в эту папку по умолчанию -
установите галочку напротив надписи Default (по умолчанию) и нажмите кнопку ОК.
Файлы проекта
Здесь я приведу только расширения файлов - имена могут быть любыми.
- .dpr - код проекта
- .dfm или .xfm - описания форм
- .pas - модули и модули форм
- .dof или .kof - параметры проекта
- .cfg - параметры среды
- .res - описание ресурсов
- .dcu - временный файл
Файлы, помеченные значком "~" - это резервные копии вышеуказанных файлов.
Эти файлы и файл с расширением
.dcu можно удалить - это никак не отразится
на функционировании программы. Кроме этих файлов после компиляции создается
файл с расширением
.ехе - сама программа. Значок этого файла -
цифра 7 с желтой молнией (для Delphi 7).
Инспектор объектов (Object Inspector)
Инспектор объектов - эта маленькая таблица на экране. При запуске Delphi он
появляется в левом нижнем углу. Если его там почему-то нет, то вы можете
его вызвать. Для этого нужно выбрать пункт меню
View --> Object Inspector
или нажать клавишу F11. С помощью
Инспектора объектов можно установить
свойства и события для выбранного компонента. Сделать это можно и
другими способами, но в
Инспекторе объектов делать это
удобнее (особенно начинающим).
Компоненты
Delphi похожа на конструктор - выбрал компонент, установил его на форму,
определил для него свойства (а если нужно и события) и все - программа
готова. Конечно, это будет примитивная программа. Но зато такую программу
можно написать, даже не зная языка программирования. Компонентов в Delphi
очень и очень много. Задача данной статьи - только краткое знакомство с
Delphi для начинающих. Поэтому перечислять даже основные компоненты
не будем - слишком много их. Для программы, которую мы "напишем" чуть
позже, нам потребуются только два из них:
стандартная кнопка и
форма.
Большинство компонентов, кроме формы, расположены на соответствующих вкладках.
Под главным меню вы можете увидеть надписи:
Standart, Additional, Win32
и т.д. Это и есть вкладки. Нас пока интересует только
Standart.
А почему он нас интересует - об этом в следующей главе. См. также
свойства и
события.
Первая программа
Запускаем Delphi. После запуска на экране появится новая форма и автоматически
открется новый проект. Этот проект пока еще не сохранен. Если вы собираетесь
работать со своим проектом, то просто закройте форму и на вопрос о сохранении
модуля ответьте "Нет". Затем откройте свой проект:
File --> Open. При
этом вас спросят, сохранить ли изменения в проекте. Ответьте "Нет" -
ведь закрываемый проект вам не нужен. Выберите
свою папку и откройте файл проекта (это файл со значком в виде цифры 7).
Если требуется создать новую форму:
File --> New --> Form. На экране
появится новая форма. Если в вашем проекте несколько форм, то выбрать нужную
можно так:
View --> Forms или нажав Shift+F12, а затем выбрать
нужную форму и нажать ОК. Итак, форма появилась на экране.
На вкладке
Standart выбираем стандартную кнопку - дважды щелкаем левой
кнопкой мыши по соответствующему компоненту (это маленькая кнопочка с надписью "ОК").
На форме появляется кнопка. Есть другой способ: щелкаем по кнопке один раз,
затем подводим курсор на нужное место формы, и еще раз щелкаем мышью. На кнопке
будет надпись "Button1". Эту надпись можно изменить. Для этого в Инспекторе
объектов выбираем вкладку
Properties (
Свойства). На этой вкладке
два столбца: левый - название свойства, а правый - само свойство. Выбираем
в левом столбце свойство
Caption (
Надпись) и напротив него
пишем что-нибудь (можно и по русски). Мы напишем слово "Цвет". При этом
надпись на кнопке изменится.
Щелкаем дважды по созданной нами кнопке - перед нами откроется окно
редактора кода. Здесь и пишется текст программы. Что мы сделали, щелкнув
дважды по кнопке? Мы определили для кнопки
Событие. Т.е. в окне
редактора кода Delphi автоматически создала процедуру, которая будет
реагировать на
Событие - на нажатие кнопки. События бывают
и другие. Их вы можете посмотреть в Инспекторе объектов на вкладке
Events (События). Как вы видите, напротив события
OnClick
появилось слово
Button1Click - имя процедуры, которая будет вызвана
при нажатии на кнопку. А вот что эта процедура будет делать - решать вам.
Ну а я решил, что наша первая программа будет менять цвет формы в
случайном порядке. А для этого в редакторе кода в теле процедуры
(между ключевыми словами
begin и
end) напишем следующий код:
Form1.Color:=random($ffffff)
Здесь
Form1 - это имя формы. Если ваша форма имеет другое имя,
то вам придется его и написать. А по умолчанию Delphi дает имена компонентам
в соответствии с их названием. Например, если вы установите на форму еще
одну кнопку, то ее имя будет
Button2. Имя можно изменить в
Инспекторе объектов: свойство
Name (только по английски). После того, как в редакторе кода вы введете
слово
Form1 и поставите точку, не спешите вводить остальной текст.
Delphi немного подумает, и выдаст вам список свойств, которые имеет
данный компонент. Из этого списка вы можете выбрать нужное и нажать
Enter.
Слово автоматически будет добавлено к тексту. В нашем случае мы выбираем
свойство
Color - цвет формы. Остальное объяснять не буду - учите
Delphi или хотя бы Паскаль. Кстати, для первого времени знания Паскаля
при работе с Delphi более чем достаточно. Остальное можно посмотреть в справке
(если у вас нет проблем с английским).
Ну вот. Программа написана. Нажимаем клавишу F9 - и легким движением
руки наш проект превращается в готовую программу. Можете пощелкать по
кнопке "Цвет". Работает? Еще бы. Однако, если вы человек внимательный,
а программу нашу запустили не в первый уже раз, то вы заметили, что цвет
меняется не случайным образом, а в определенном порядке. Это происходит потому,
что мы не инициализировали генератор случайных чисел. Инициализировать
его можно, вызвав процедуру
randomize. Но вписать ее в тело
процедуры
Button1Click нельзя, т.к.
randomize должна
быть запущена в программе только один раз. А мы будем щелкать по кнопке,
тем самым запуская ее вновь и вновь. Выход из положения есть. Можно
вызвать процедуру
randomize при создании формы - ведь главная форма
у нас только один раз создается. Для этого закрываем нашу программу (если
она была запущена). Перед нами появляется редактор кода. Но нам сейчас нужна форма.
Щелкаем по видимой части формы и она выходит на первый план. Если ее совсем
не видно (вдруг вы ее случайно закрыли). Тогда жмем
Shift+F12
и выбираем нужную форму. Форма появилась. Щелкаем по ней дважы (по любому свободному участку
формы, то есть по тому месту, где нет никаких компонентов). Опять попадаем
в редактор кода, в процедуру
FormCreate. Записываем здесь
randomize
и нажимаем F9. Теперь цвета действительно меняются в случайном порядке.
Компоненты: свойства
Как уже было сказано выше, каждый компонент имеет свой набор свойств.
Но многие из этих свойств являются общими для большинства компонентов.
Поэтому для примера рассмотрим один компонент. С остальными разберетесь
сами. Пусть это будет компонент
Label (Метка). Он находится на
вкладке
Standart - значок в виде буквы "А". А вообще, название компонента
можно узнать так: подвести курсор к обозначению компонента на вкладке
и немного подождать - Delphi выведет его название. Установим компонент
на форму и немного поэкспериментируем - надо как-то опыта набираться.
В Инспекторе объектов будем менять свойства и смотреть, что получается.
Основные свойства компонента Label
- Align
- Выравнивание компонента относительно формы (или контейнера, которому принадлежит метка). По умолчанию выравнивание
отсутствует (alNone). Можете выбрать другие свойства - посмотрите, что
получится. А чтобы вернуть все на место - снова выберите alNone
и придайте метке нужные размеры. Размеры компонента можно изменять с
помощью мыши: подводите курсор к границе выбранного компонента, нажимаете
левую кнопку и тащите мышь в нужную сторону.
- Alignment
- Выравнивание надписи относительно метки
- AutoSize
- Если AutoSize = true, то размер компонента будет автоматически
изменяться в зависимости от размера шрифта и размера самой надписи. В противном случае
размер компонента изменяться не будет.
- Color
- Цвет компонента
- Cursor
- Определяет вид курсора. Выбранный вид курсора будет появляться,
когда курсор находится над компонентом. Но это вы сможете увидеть, только запустив
программу (F9).
- Enabled
- Если Enabled = true, то компонент активен. Если Enabled = false, то компонент неактивен,
т.е. он будет виден на форме, но "работать" не будет.
- Font
- Определяет параметры шрифта надписи (размер, цвет и т.п.)
- Height
- Высота компонента в пикселях
- Left
- Расстояние от левого края компонента до левого же края формы (или другого
контейнера, которому принадлежит метка). В пикселях.
- Name
- Имя компонента. Это имя используется в программе, которую вы создаете.
- Top
- Расстояние от верхнего края компонента до верхнего края формы (или другого контейнера).
- Visible
- Если Visible = true, то компонент виден. Иначе компонент будет невидимым.
Это справедливо только на работающей программе. В режиме создания программы
все компоненты видны, независимо от их свойств.
- Width
- Ширина компонента в пикселях
Конечно, это не все свойства не всех компонентов. Но остальное можно
посмотреть в справке. А чтобы не мучиться с поисками нужного слова, в
Delphi предусмотрена контекстно-зависимая справочная система. Воспользоваться ей можно,
например, так: в редакторе кода пишем интересующее нас слово, затем выделяем
его и нажимаем F1.
Компоненты: события
Одно событие мы уже знаем: OnClick - возникает при одинарном щелчке кнопкой
мыши по компоненту. Рассмотрим некоторые другие. Выберем для испытаний
компонент Edit - однострочный редактор. Такой белый прямоугольник
с буквами "ab" внутри. Расположен также на вкладке
Standart.
Поместим его на форму и начнем пытать.
Основные события компонента Edit
- OnChange
- Возникает, если изменится содержание текста в компоненте
- OnClick
- Возникает, если по компоненту щелкнуть один раз левой кнопкой мыши
- OnDblClick
- Возникает при двойном щелчке левой кнопкой мыши по компоненту
- OnKeyPress
- Возникает при нажатии клавиши
- OnMouseMove
- Возникает при размещении курсора над компонентом
Осталось разобраться с тем, как эти события использовать в программе.
Один способ мы уже знаем: дважды щелкаем по компоненту и перед
нами открывается редактор кода с процедурой, которая обрабатывает это событие.
Но таким образом можно вызвать только процедуру, которая обрабатывает событие
OnClick. А как быть с остальными? Все тоже достаточно просто -
программисты Borland об этом позаботились. В Инспекторе объектов выбираем
нужное нам событие (в левом столбце). А напротив этого события в поле
правого столбца дважды щелкаем левой кнопкой мыши - получаем окно
редактора кода с соответствующей процедурой. Ну а чтобы вам было понятнее,
приведу пример небольшой программки:
Пример программы: калькулятор
Пусть это будет калькулятор.
Он будет иметь следующие компоненты: Edit1 и Edit2 - поля для ввода чисел;
Label1 - знак операции; Label2 - знак равенства ("=");
Edit3 - поле для вывода результата вычислений. И четыре кнопки, по нажатию
на какую-либо из них будет выполняться соответствующая операция:
Button1 - сложение (+); Button2 - вычитание (-); Button3 - деление (/);
Button4 - умножение (*). А выглядеть все это будет примерно так:
Для наглядности в компонентах Edit я оставил надписи по умолчанию. А вам
их лучше удалить. Для этого: выбираем соответствующий редактор, затем в
Инспекторе объектов ищем свойство
Text и очищаем его. Ниже приводится
текст одного из вариантов программы:
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:='+'; // Знак операции = "+"
Edit3.Text:=FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text))
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:='-'; // Знак операции = "-"
Edit3.Text:=FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit2.Text))
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Label1.Caption:='/'; // Знак операции = "/"
Edit3.Text:=FloatToStr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text))
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Label1.Caption:='*'; // Знак операции = "*"
Edit3.Text:=FloatToStr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text))
end;
end.
Учтите, что если вы просто скопируете этот текст в редактор кода, то
при компиляции Delphi выдаст сообщение об ошибке, т.к. эти процедуры не
объявлены. Поэтому проделайте все вручную: двойной щелчок по нужной
кнопке (при этом процедура создается и объявляется автоматически),
а затем в тело процедуры можно вставить соответствующий текст. Следует также
иметь ввиду, что данная программа слишком примитивна - она не проверяет
введенные данные. Поэтому, если вы вместо чисел введете, например, буквы,
то тем самым вы вгоните Delphi в "ступор", о чем говорилось выше. Это,
конечно, не зависание - просто так Delphi реагирует на ошибки. В этом
случае вы можете запустить отладчик и т.д. А если вы пока не знаете,
как это делать, то можно просто выйти из этого состояния: Ctrl+F2.
Надеюсь, вы знаете, что такое комментарии. Delphi поодерживает множество
комментариев, в том числе и комментарии стиля С++. FloatToStr - это стандартная
процедура, которая переводит вещественное число в строку. StrToFloat -
переводит строку в вещественное число.
На этом, пожалуй, можно и закончить. Здесь рассмотрена очень маленькая
часть возможностей Delphi. Но этого уже достаточно чтобы начать эксперименты со средой разработки Delphi.
А если [отите знать больше - читайте хорошие книги. В интернете тоже есть
неплохие подборки материалов. Возможно, что и я еще что-нибудь по этой теме
напишу. Заходите в гости. А пока все. Удачи!