Delphi - начало

Источник: pcnext
Darkmaster

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

Delphi это визуальная среда разработки, поддерживающая объектно-ориентированное программирование. Что значит визуальная среда? Это значит, что большую часть интерфейса нам нужно будет просто понатыкать. Здорово правда. Объектно-ориентированное программирование позволяет программисту оперировать с объектами. Объект состоит из различных свойств(цвет), событий(завершение работы), методов.

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

Но перейдем от слов к делу, итак запускайте-ка Delphi. Сразу же скажу, что я использую Delphi 7, работа с Delphi 8 не входит в рамки данной статьи, так как 8 версия делфи ориентированна на технологию .net, а это уже совсем другая история. Итак давайте разберемся, что же мы видим после запуска Делфи. А видим мы слева объектный инспектор, дерево объектов над ним, главную панель сверху на которой находится палитра компонентов, окно формы куда мы будем устанавливать компоненты, если нажать F12 то мы перейдем в редактор кода, соответствующей формы, здесь мы будем писать код, заметьте, что в редакторе кода уже есть какие-то записи, давайте разберемся с ними.

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private { Private declarations }
public { Public declarations } end;
var Form1: TForm1; implementation {$R *.dfm}
end.

После слова uses идут подключаемые модули, например чтобы работать с реестром нам нужно будет в раздел uses подключить модуль Registry. После слова type описываются компоненты и различные события, процедуры. После слова private можно описывать закрытые данные объекта, которые например будут доступны только первой форме и т.д. За словом public описываются открытые для всего проекта данные. За словом var объявляются глобальные переменные. Глобальные переменные это такие переменные которые создаются при входе в программу и уничтожаются только при выходе из нее. Локальные переменные это такие переменные которые создаются в начале процедуры и уничтожаются при выходе из нее. {$R *.dfm} - подключение визуальных объектов.

В Delphi присутствуют различные типы данных, с ними мы познакомимся чуть позже, а пока давайте создадим нашу первую программу. Выделите в ObjectTreeView Form1, теперь в обьектном инспекторе (находится под ObjectTreeView), установите свойство Name в FirstProgram, свойство Caption (отвечающее за заголовок)- Первая программа. Бросьте со вкладки Standart на форму компонент Button (кнопка), сразу же установите его имя в ExitButton (учтите имя должно всегда писаться слитно), а Caption в "Выход". Теперь в объектном инспекторе от свойств перейдите к событиям (Events) там дважды щелкните по событию OnClick (по щелчку), будет создана процедура нажатия кнопки, в нее нам нужно просто вписать Close. Все, первая программа создана. Теперь давайте сохраним прект (File/SaveProjectAs).

Ну а теперь познакомимся с компиляцией, чтобы откомпилировать наш проект просто щелкните Project/Compile Project 1. Теперь жмите F9. Щелкните на кнопку, программа закроется. Поздравляю, вы создали свою первую программу на Delphi. Теперь давайте улучшим ее, а заодно разберем некоторые свойства компонента TForm. Итак выделите в ObjectTreeView FirstProgram, и давайте поэкспериментируем с некоторыми свойствами формы. Установите свойство AlphaBlend в true, a AlphaBlend Value поставьте - 150. Теперь запустите проект. Форма стала прозрачной . Поэкспериментируйте сами с этими свойствами. Свойство BorderIcons отвечает за то какие иконки будут отображаться сверху. (Максимизировать, минимизировать, помощь). Ставьте разные значения, запускайте проект и смотрите результат . Также интересно свойство BorderStyle, поработайте с ним.

В общем со свойствами мы познакомимся в процессе программирования, а поэтому давайте приступим к нему . Бросьте на форму кнопку (можно использовать нашу первую форму, можно создать новый проект). Также бросьте на форму компонент TLabel (Label), этот компонент предназначен для написания различных заголовков, текстов. Расположите кнопку под компонентом TLabel. Свойство Caption компонента TLabel установите: "Для создания формы нажмите кнопку". Это же свойство у компонента TButton (кнопка) выставьте в "Создать". Теперь давайте подключим к проекту новую форму, делается это так File/New/Form, появится новая форма, теперь давайте вернемся к нашей предыдущей форме, View/ProjectManager/Project1.exe/ Unit1. Создадим обработчик события нажатия для кнопки "создать". Для этого просто дважды щелкните по кнопке. Теперь напишите код приведенный ниже:

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;

Я думаю объяснять что-то здесь излишне. Итак посмотрите как работает программа. Заметьте что вы при открытой Form2 вы спокойно можете получить доступ к Form1, чтобы избежать этого вместо Show пишите ShowModal, тогда пока вы не закроете Form2 вы не сможете получить доступ к Form1. Итак, курсант, вступление пройдено и теперь мы отправляемся на построение. Для того чтобы пример работал нужно к первой форме присоединить вторую. Сделать это можно так. Пусть у вас будет выбрана первая форма. Ваш путь такой File/UseUnit/OK. Все. ПОСТРОЕНИЕ. Продолжим знакомство с Delphi . В делфи все события описываются процедурами и функциями. Например процедура нажатия кнопки выглядит так:

procedure TForm1.Button1Click(Sender: TObject);
begin
end;

Функции это те же процедуры, единственное между ними отличие это то, что они могут возвращать значения. Позднее с практикой вы поймете в чем разница, ну а пока давайте ближе познакомимся с палитрой компонентов Standard. Создайте новое приложение (File/New/Application). Бросьте на форму два компонента TEdit, теперь давайте займемся программированием. Но перед этим бросьте на форму одну кнопку. В свойстве Caption кнопки нажмите проверить. Теперь давайте создадим обработчик события (процедуру) для нажатия кнопки, для этого просто дважды щелкните по ней. Между begin и end впишите Edit1.Text:=Edit2.Text;. Теперь откомпилируйте проект (Project/Compile Project), и посотрите как он работает, для этого просто введите что-нибудь в Edit1 и жмите кнопку. Теперь давайте немного усложним наш проект, для этого выделите компонент Edit2, установите следующие свойства: ReadOnly (только для чтения) в true, а в свойстве компонента Edit1 Password Char становите *. По нажатии кнопки напишите это:

begin
if Edit1.Text='password' then // здесь используется логическая конструкция if...then(если...то)
Edit2.Text:='Пароль введен правильно'
else // запомните, перед оператором else никогда не ставится запятая !!!
Edit2.Text:='Нет! Подумай еще!';
end;

Итак, я думаю с исходником все понятно, давайте лучше разберемся с комментариями(//). Комментарии это очень удобная и полезная вещь в программирование . Все программы хорошего тона пишутся с комментариями. В Делфи, для обозначения комментариев используют такие знаки // - если комментарий будет размещаться только на ОДНОЙ строке, если же вам для него нужно больше то используется такая конструкция: {...} - здесь можно охватывать сколько угодно строк. Закройте проект (File/Close All). И создайте новый, как вы уже знаете. Бросьте на форму 3 компонента TEdit, 3 компонента TLabel, и одну кнопку. Расположите напротив каждого компонента TEdit по Label, первый лейбел (в свойстве Caption) назовите "Первое число", второй "Второе число", третий "Результат". Теперь давайте выделим компонент TEdit ответственный за "Результат" (пусть это будет Edit3). И поставьте у него свойство ReadOnly (только для чтения) в true. Теперь мы ничего не сможем написать в этом компоненте. Он предназначен для отображения результата. Создайте обработчик события для кнопки, напишите там следующее:

procedure TForm1.Button1Click(Sender: TObject);
var index, i ,r:Integer; // объявление локальны переменных типа целое число
begin
index:=StrToInt(Edit1.Text); //присваиваем значению index значение Edit1.Text при этом текст преобразуем в число StrToInt
i:=StrToInt(Edit2.Text);
//смотри выше, аналогично
r:=i+index; // присваиваем переменной r сумму i и index
Edit3.Text:=IntToStr(r); //Выводим результат , преобразуя число в строку
end;

Здесь мы познакомились со сложением, кроме сложения в Делфи есть также вычитание (-), умножение(*), деления (/), равенство (=), присваивание (:=) и т.д. Также в этом примере мы познакомились с типами, Integer целое число. Давайте рассмотрим другие типы. Вещественное число (число с плавающей точкой)обозначается так Real (хотя есть и другие обозначения, но в данной статье приведены только основные для каждого типа !!!). Строка String, boolean - булево значение может принимать всего два значения - истина или ложь, true или false. С практикой вы познакомитесь со всеми типами ближе с некоторыми из них мы познакомимся в этой статье . Давайте познакомимся с новым компонентом. Для этого создайте новое приложение (FILE/New/ Application). Бросьте на форму компонент Memo. Давайте поработаем с ним, а в процессе работы познакомимся и с другими компонентами. Для начала скажу, что Memo предназначен для ввода и отображения текста . Выделите компонент Memo и щелкните по свойству Lines (напротив него) появится окно ввода текста, давайте отчистим его, жмите ок. Теперь бросьте на форму кнопку и компонент TOpenDialog с вкладки Dialogs. Этот компонент поможет нам в открытии текстовых файлов . Выделите компонент OpenDialog1 щелкните по свойству Filter. В поле FilteName укажите txt, а в поле Filter *.txt. Теперь выделите компонент TMemo. В свойстве Align выберите alClient. А в свойстве ScrollBars укажите Both. Теперь создадим обработчик события для нажатия кнопки, впишите в него код приведенный ниже:

if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

Теперь бросим на форму еще одну кнопку, и компонент SaveDialog с вкладки Dialogs. Настройте этот компонент аналогично предыдущему. У второй кнопки в свойстве Caption укажите "Сохранить". И создайте обработчик события нажатия этой кнопки: if SaveDialog1.Execute then begin Memo1.Lines.SaveToFile(SaveDialog1.FileName); end; Здесь нет ничего сложного. Строка if SaveDialog1.Execute then является стандартной проверкой для компонентов со вкладки Dialogs. Теперь давайте попробуем сделать окно выбора шрифта для нашей программы. Делается это так: бросьте на форму компонент TButton (еще одну кнопку), дайте ей заголовок "Шрифт", бросьте на форму компонент FontDialog, и создайте обработчик события для нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
if FontDialog1.Execute then
Memo1.Font:=FontDialog1.Font;
end;

Memo1 имеет свойство Font (шрифт), которое присваивается свойству Font компонента FontDialog1. В принципе со всеми компонентами с вкладки Dialogs нужно работать в таком ключе .

Пробежка. Сейчас давайте продолжим знакомство с компонентами со вкладки Standard. Бросьте на форму два компонента TCheckBox и одну кнопку . Для чего нужны это компоненты я думаю вы уже догадались. Они очень часто используются в Windows. Работать с ними очень легко . Обратите внимание у компонента CheckBox на свойство Caption. Измените его на "Да", а второй компонент в это же свойство "Нет". Теперь давайте создадим обработчик события для нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
if CheckBox1.Checked then Application.MessageBox(PChar('Да') , 'Вы выбрали :',mb_OK);
if CheckBox2.Checked then Application.Messagebox(PChar('Нет'), 'Вы выбрали :',mb_OK);
end;

Итак здесь мы познакомились с такой конструкцией, как "Application.MessageBox(PChar('Да'), 'Вы выбрали :',mb_OK);", что она делает вы поймете когда запустите нашу программу. Я же от себя хочу добавить что эта кнонструкция может быть достаточно разной. Попробуйте заменять mb_OK на: mb_OKCANCEL ; mb_YESNO. Для начала вам хватит. На вкладке Standard есть компонент похожий на ChaeckBox это RadioButton. Работают эти компоненты совершенно одинаково. В чем же разница? Разница в том, что вы можете одновременно выделять сразу несколько компонентов CheckBox в то время как если на форме находятся несколько компонентов RadioButton вы можете выделить только один. Создайте новое приложение. Бросьте на форму несколькл компонентов RadioButton. Откомпилируйте проект и попробуйте выделять компоненты. Я думаю теперь вам все стало понятно. Теперь давайте познакомимся с новым компонентом: ListBox находящимся на вкладке Standard. Также бросьте на форму один компонент Edit, и одну кнопку. Установите свойство Caption кнопки в "Добавить". Давайте напишем процедуру добавления строки по нажатии кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text); //компонент ListBox располагает свойством Items в котором находятся все строки, Add добавляет строку .
end;

Запустите проект, введите что-нибудь в Edit1, нажмите кнопку и посмотрите как все это работает. Теперь добавим еще одну кнопку по нажатии которой будет удалятся строка. Напишем в процедуре сопутствующей нажатию кнопки:

procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Delete(ListBox1.ItemIndex); // ItemIndex отвечает за выделенною строку .
end;

Запустите пример, посмотрите как все это работает. Теперь давайте создадим еще одну кнопку, назовем ее Отчистить. Код таков:

procedure TForm1.Button3Click(Sender: TObject);
begin
ListBox1.Items.Clear;
end;

Clear означает отчистить. Теперь компилируйте проект и наслаждайтесь проделанной работой :)

Следующий компонент, с которым нам предстоит иметь дело, это ComboBox - в своей работе он полностью идентичен предыдущему компоненту. Так что просто манипулируйте свойством Items. Давайте создадим рабочий пример с компонентом Combobox. Для этого бросьте на форму компонент ComboBox и щелкните в объектном инспекторе по его свойству Items. Здесь мы можем добавлять строки. Добавьте две строки :Катя и Вика. Нажмите Ок. Теперь бросьте на форму со вкладки win32 компонент PageControl. Щелкните по компоненту правой кнопкой мыши. Жмите NewPage тем самым создавая новую страницу, создайте две страницы. На одну страницу поместите компонент Image со вкладки Additional. Выделите этот компонент и в объектном инспекторе щелкните по свойству Picture и выберите картинку. На другую страницу бросьте один компонент Shape (прошу обратить ваше внимание на его свойство Shape, поизменяйте его и увидите эффект), и один компонент Bevel (прошу обратить ваше внимание на его свойство Shape, поизменяйте его и увидите эффект). Теперь выделите компонент ComboBox и выставьте его свойства Style в DropDownList, благодаря этому мы ничего не сможем вписывать в компонент ComboBox, мы сможем только выбирать. Теперь создайте сами обработчик события для смены страничек, то есть когда вы будете выбирать первое имя пусть открывается первая страничка, когда второе имя пусть открывается вторая страница. Конечно придется попотеть, но привыкайте к тяжелому умственному труду программиста. 

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

Теперь давайте разберемся с главным меню. Имеется в виду стандартное меню со стандартными пунктами файл, правка, помощь и так далее. Для создания главного меню в Delphi предусмотрен такой компонент как MainMenu. Он находится на вкладке Standard. Бросьте его на форму. Кстати если вы случайно сделаете что-то ни то в Delphi предусмотрен режим отката для этого просто нажмите CTRL-Z. Дважды щелкните по компоненту MainMenu . Вы увидите новое окно, там один фрагмент выделен синим, это тот фрагмент, с которым мы сейчас работаем, найдите в объектном инспекторе свойство Caption, напишите в нем Файл. Жмите энтер, теперь щелкните в окне по надписи файл, появится место для подпунктов, щелкните по появившемуся место. Установите свойство Caption в "Выход". Теперь щелкните справа от слова файл, создайте новое ответвление помощь, в не создатель. Закройте окно.

Давайте добавим к нашим пунктам картинки. Для этого воспользуемся компонентом ImageList со вкладки Win32 . Дважды щелкните по компоненту, с помощью кнопки Add добавьте две картинки. Нажмите Apply(применить). Теперь выделите компонент MainMenu. В свойстве Images выберите ImageList1. Теперь дважды щелкните по компоненту MainMenu. Выделите "Выход" и установите свойство ImageIndex в 0, а Создатель поставьте в 1. Откомпилируйте проект и вы увидите картинки.

Теперь давайте создадим процедуру нажатия клавиши "Выход". Просто щелкните в основной форме по пункту выход и впишите туда этот код:

begin
Close // этот код только для самых умных программистов, правда тяжело !
end;

Думаю что-то объяснять здесь излишне. С пунктом меню создатель будет поинтересней, так как мы просто добавим новую форму которую оформим, извините за каламбур. Как же добавить новую форму. Ну это не очень сложно. Ваш путь таков File/New/Form. Итак форма появилась, установите свойство Caption этой формы в Создатель, а name в CreaterForm.

Теперь давайте сохраним наш проект, File/New/Save Project. Итак вернемся к первой форме, сделать это можно либо в меню View/Project Manage, либо в меню Window. Теперь нам нужно подключить к первой форме вторую, делается это так: пусть у вас будет выбрана первая форма. Ваш путь такой File/UseUnit/OK. Все. Форма присоединена. Теперь щелкните по надписи создатель и давайте напишем вот такой вот код: begin CreaterForm.ShowModal; // ShowModal- это значит пока мы не закроем это окно программа в других окнах выполнятся не будет . end;

Ну что же, теперь давайте добавим возможность использования правой кнопки. Для этого используем компонент PupopMenu. Просто бросьте его на форму. Теперь дважды щелкните по нему. Введите Caption- первый - выход, второй - создатель. Выделите "выход" и установите свойство Caption в выход, сделайте аналогичное действие и со второй процедурой. Теперь можете компилировать и смотреть, что получилось . Полигон.

Сейчас же мы рассмотрим как с помощью Delphi можно открывать файлы. Здесь нам поможет объект TFileStream . Сразу же давайте рассмотрим некоторые параметры открытия файла: fmCreate - создание файла, а если файл уже есть то он будет открыт в режиме записи. fmOpenRead - в данном случае фал открывается только для чтения. fmOpenWrite - здесь, я думаю вы уже догадались файл открывается для записи. fmOpenReadWrite - здесь файл открывается и для чтения и для записи. Давайте рассмотрим практический пример открытия файла. Создайте новое приложение. Поместите на форму одну кнопку . И напишите код нажатия:

var с:TFileStream;
begin с:=TFileStream.Create('c:\nextpc.txt',fmOpenReadWrite);
end;

В общем вот так это делается. Уничтожить объект с можно (а иногда даже нужно) так c.free; Теперь давайте создадим программу, которая будет открывать графический файл, картинку . Бросьте на форму компоненты Button, Image, OpenPictureDialog. Сразу же перейдите в редактор кода, делается это клавишей F12. В раздел uses добавьте jpeg для отображения jpeg-файлов. Теперь выделите компонент OpenPictureDialog и войдите в свойство Filtered. Там вы должны увидеть расширение, если их нет, то просто добавьте, принцип таков: FilterName- jpeg , filter *.jpeg. Теперь я приведу полный исходник с комментариями этой маленькой программы. Вот он:

unit Unit1; //модуль проекта
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtDlgs, ExtCtrls, StdCtrls, jpeg; // подключаемые модули
type TForm1 = class(TForm) //обьявление обьектов
Button1: TButton; Image1: TImage;
OpenPictureDialog1: TOpenPictureDialog;
procedure Button1Click(Sender: TObject); //процедура нажатия кнопки
private { Private declarations } //закрытые функции public
//открытые функции
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then //стандартная проверка Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); //загрузка картинки
end; end.

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

Консоль. Раньше все программы были консольными. Но и сейчас есть масса программа работающих с железом или ос в консольном режиме. И сейчас мы с вами научимся писать простейшие консольные программы. Консольные программы пишутся без форм. Это чистое программирование. Ну так давайте займемся им, закройте проект (File/CloseAll). Войдите в File/New/Other/, на вкладке New выберите Console Application. Создадим программу которая будет высчитывать зарплату, суть программы будет заключатся в том, что мы должны ввести количество отработанных часов, а также почасовую зарплату, после чего мы нажмем энтер, а программа выдаст нашу зарплату. Единственной загвоздкой является то, что консоль изначально не понимает русский язык, можно написать программу так чтобы она смогла это сделать, но для вас это будет еще слишком сложно. Сотрите код созданный Delphi и напишите этот:

program Zarplata;
{$APPTYPE CONSOLE} uses SysUtils;
var i:integer; a:integer;
begin
writeln('Vvedite pochasovuiu zarplatu : ');
readln(i);
writeln('vvediti kolichestvo otrabotannix chasov: ');
readln(a);
i:=i*a; write('Zarplata:');
writeln(i,'$');
writeln('Dla zaversinia nazmi Enter');
readln;
end.

В данной программе мы объявляем две локальные переменные i и a. Writeln отвечает за вывод информации, а readln за ввод .i:=i*a это собственно умножение часов на почасовую зарплату. Обратите внимание, что мы используем две переменных а не три, как в прошлый раз при сложении, это достаточно интересный и полезный прием программирования . Ну что же вот и консольное приложение готово.

Горячие клавиши Delphi:

  • F1 помощь
  • F3 продолжить поиск (начать - Ctrl+F )
  • F4 выполнить программу до положения курсора
  • F5 Break Point
  • F7 трассировать с заходом в процедуры
  • F8 трассировать без захода в процедуры
  • F9 запустить программу
  • F10 активизировать главное меню
  • F11 открыть/закрыть Object Inspector
  • F12 переход между формой и кодом
  • Ctrl-F1 контекстная помощь
  • Ctrl-F2 прервать выполнение программы
  • Ctrl-F3 посмотр стека стек
  • Ctrl-F4 закрыть текущий модуль
  • Ctrl-F5 список переменных для просмотра (Watch List)
  • Ctrl-F7 просмотр значений переменных
  • Ctrl-F9 компилировать проект
  • Ctrl-F10 активизировать главное меню
  • Ctrl-F11 открыть проект
  • Ctrl-F12 список модулей проекта
  • Shift-F7 трассировка, заходя в каждую процедуру и перескакивание в каждое возникающее событие
  • Shift-F10 всплывающее меню
  • Shift-F11 добавить модуль к проекту
  • Shift-F12 список форм проекта для быстрой навигации
  • Alt-F4 закрыть проект и все файлы
  • Alt-F6 переключение окон
  • Alt-F8 переход к следующей ошибке компиляции
  • Alt-F7 переход к предыдущей ошибке компиляции
  • Ctrl-Shift-F4 закрыть проект и все файлы
  • Alt-Ctrl-F11 менеджер проектов
  • Alt-Shift-F4 закрыть все окна, но проект не закрывать
  • Ctrl-Shift-0..9 поставить метку 0..9
  • Ctrl-0..9 перейти на метку 0..9
  • Alt-0 список окон

Итак, на этом вводный курс в язык программирования Delphi заканчивается.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=2877