Система программирования Delphi

End.

Readln

S.print; s.Free;

S.print; writeln;

S.AddBottom(x)

Begin

Begin

Var

SysUtils,

Uses

Основная программа по работе с объектами-списками

Begin

End

Begin

Begin

End

Begin

Begin

Begin

Dispose(tmp)

Begin

Begin

Type

Модуль по работе со списками

unit spisok;

interface

PList=^List; {указатель на элемент списка}

List=record

data:integer;

next:PList

end;

TObjList=class

Top,Bottom:PList;

size:integer;

constructor create;

destructor destroy;override;

procedure AddTop(x:integer);

procedure AddBottom(x:integer);

procedure DelTop;

procedure DelBottom;

procedure Print;

end;

implementation

constructor TObjList.create;

Top:=nil;Bottom:=nil;size:=0

end;

destructor TObjList.destroy;

var tmp:PList;

while top<>nil do

begin tmp:=top;

top:=top^.next;

end;

end;

procedure TObjList.print;

var tmp:PList;

if top=nil then writeln(‘spisok pust’)

else begin tmp:=top;

while tmp<>nil do

begin writeln(tmp^.data);

tmp:=tmp^.next;

end;

end;

end;

procedure TObjList.AddTop(x:integer);

var tmp:PList;

begin new(tmp);

tmp^.data:=x;

tmp^.next:=top;

if size=0 then bottom:=tmp;

top:=tmp;

size:=size+1

end;

procedure TObjList.AddBottom(x:integer);

var tmp:PList;

begin new(tmp);tmp^.data:=x;

tmp^.next:=nil;

if size=0 then top:=tmp

else bottom^.next:=tmp;

bottom:=tmp;

size:=size+1

end;

procedure TObjList.delTop;

var tmp:Plist;

if size>0 then

tmp:=top;

top:=top^.next;

size:=size-1;

dispose(tmp);

if size=0 then bottom:=nil

else writeln(‘spisok pust’)

end;

procedure TObjList.DelBottom;

var tmp:PList;

if size>0 then

begin

tmp:=top;

while(tmp^.next<>bottom)and(tmp^.next<>nil) do

tmp:=tmp^.next;

if tmp^.next<>nil then

tmp^.next:=nil;

dispose(bottom);

bottom:=tmp

else dispose(bottom);

size:=size-1;

if size=0 then

bottom:=nil;top:=nil

end;

end

else writeln(‘spisok pust’)

end; //конец DelBottom

end. //конец unit spisok

 

Program Project2;

{$APPTYPE CONSOLE}

spisok in ‘spisok.pas’;

s:TObjList;

x,i,n:integer;

s:=TObjList.Create;

write(‘n=’);readln(n);

for i:=1 to n do

write(‘x=’);readln(x);

end; writeln;

s.print;{вывод списка}

writeln;

s.DelTop; {удалили первый элемент списка}

s.DelBottom; {удалили последний элемент списка}

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

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

 

Терминология Delphi.

 

1. То что мы раньше называли программой стало называться приложением. Приложение – это конечный продукт процесса разработки, т.е. exe – файл, сгенерированный Delphi.

2. Код – текст, написанный на языке Object Pascal.

3. Все файлы созданные при разработке приложения можно рассматривать как проект. Проект содержит обязательно файл проекта file.dpr, хотя бы один файл формы file.dfm, и соответствующий библиотечный модуль file.pas.

4. Форма в Delphi это синоним «окна».

 

Первые шаги визуального программирования в среде Delphi.

 

На рабочем столе будут развернуты несколько окон:

1. Главное окно среды Delphi – Project1 расположенное в верхней части экрана. В нем содержится палитра компонентов – главное богатство Delphi.

2. Окно инспектора объектов – Object Inspector, находящееся ниже главного окна, слева. Оно имеет две страницы:

· страницу свойств Properties

· страницу событий Events

3. Окно формы – Form1 находится справа от Object Inspector.

4. Окно редактора кода – Unit1 находится под формой. В нем записан текст модуля на языке Object Pascal. Слева может находиться окно браузера, содержащее дерево типов, переменных, констант, модулей. Это окно можно закрыть.

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

Сохранение проекта состоит из 3х шагов:

1. создание папки для проекта.

2. сохранение файлов программы в папке проекта.

3. сохранение файла проекта в папке проекта.

Если при сохранении согласиться с предложенными средой именами файлов, то в папке проекта можно будет найти 6 файлов:

· Unit1.pas

· Unit1.dfm

· Project1.res

· Project1.dpr

· Project1.cfg

· Project1.dof

 

В файле Project1.dpr сохранен код проекта Delphi. В файле Unit1.pas описан класс формы TForm1, и как переменная этого класса определена форма Form1. Дополнительная информация о параметрах формы хранится в файле формы Unit1.dfm. В файлах Project1.res, Project1.cfg, Project1.dof содержится служебная информация о ресурсах проекта.

Таком образом простейшее Windows – приложение можно «разработать», даже ничего не написав на языке Object Pascal, т.е. визуальное программирование избавляет начинающего программиста от необходимости изучать язык. Однако 99% программ созданных в Delphi опираются на классы и объекты, и связанные с ними понятия, поэтому без понимания внутренней логики работы проекта истинному программисту не обойтись.

 


Иерархия компонентов.

 

Когда имеется в виду визуальный объект, то говорят о компоненте. Компоненты можно визуально редактировать в ходе разработки программы, а объекты – нет. Исключение составляют объекты Application и Screen. Формально они также являются компонентами, но доступ к ним производится исключительно из кода программы, т. е. не визуально.

Например, Button – это визуальный объект, графически представленный (значком) в Палитре компонентов. Данный объект попадает в категорию компонентов.

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

 

Компонентами в Delphi называются потомки класса TComponent.

Компонентэто объект, свойства которого можно изменить во время разработки при помощи инспектора объектов. Все компоненты Delphi порождены от класса TComponent, в котором инкапсулированы самые общие свойства и методы компонентов. Предком класса TComponent является класс TPersistent, который произошел непосредственно от базового класса TObject.

Класс TComponent служит базой для создания как видимых, так и невидимых компонентов. Большинство видимых (визуальных) компонентов происходит от класса TControl. Два наследника этого класса – TWinControl и TGraphicControl определяют две группы компонентов:

1. имеющих оконный ресурс(TWinControl и его потомки)

2. не имеющих этого ресурса(TGraphicControl и его потомки)

Оконный ресурс – это специальный ресурс Windows, предназначенный для создания и обслуживания окон.

Только оконные компоненты способны получать и обрабатывать сообщения Windows.

 

 

Оконный компонент в момент своего создания обращается к Windows с требованием выделения оконного ресурса и, если требование удовлетворено, получает так называемый дескриптор окна. TWinControl и его потомки хранят дескриптор окна в свойстве Handle. Потомки TGraphicControl не требуют от Windows дефицитного оконного ресурса, но они и не могут получать и обрабатывать Windows – сообщения. Управляет такими компонентами оконный компонент – владелец, например, TForm.

Оконные элементы управления: TAnimate, TBitBtn, TButton, TCheckBox, TComboBox, TEdit, TForm, TGroupBox, TListBox, TMemo, TPanel, TRadioButton, TScrollBar и т.д.

Неоконные управляющие компоненты не основаны на окнах. Они очень важны не только по своему назначению, но и с точки зрения экономии системных ресурсов.

Неоконными называются элементы управления, которые не могут становиться актив­ными, не могут содержать другие элементы управления и не имеют дескриптора окна.

Неоконные элементы управления происходят от абстрактного базового класса TGraphicControl. Неоконные элементы управления: TLabel, TImage, TSpeedButton, TPaintBox, TShape и т.д.

Имена и собственники компонентов.

 

Имена компонентов.

Рассмотрим описание класса TComponent. Класс TComponent включает в себя свойства и методы, общие для всех компонентов.

Свойство

propertyName:TComponentName;

typeTComponentName=String; //Delphi 32

typeTComponentName=String[63]; //Delphi

определяет имя компонента. Имя компонента строится по тем же правилам, что и имена любых других объектов программирования – констант, переменных, подпрограмм и т.д.: оно представляет собой правильный идентификатор и должно быть уникальным в области своей видимости в программе. Так как компоненты помещаются на форму средой Delphi, каждый компонент автоматически получает создаваемое средой имя, совпадающее с именем своего класса (без начальной буквы T) и дополненное числовым суффиксом: Form1, Labеl2, RichEdit2 и т.д.

 

Собственники компонентов

 

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

Владелец назначается компоненту при вызове конструктора:

Constructor Create (AOwner: TComponent);virtual;

Указатель на владельца хранится в свойстве компонента:

property Owner:TComponent read FOwner;

Это свойство доступно только для чтения.

Список всех подчиненных компонентов определяет свойство:

property Components[Index: Integer]:TComponent;

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

Кто создает и уничтожает форму?

Это делает приложение, т. е. объект из класса TApplication. В файле проекта визуального приложения можно увидеть вызов метода:

Application.CreateForm;

Деструктор компонента при визуальном программировании также автоматически вызывает деструкторы всех подчиненных, а потом вычеркивает ненужный компонент из списка компонентов своего владельца.

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


Элементы управления.

 

Большинство компонентов, но не все компоненты – являются элементами управления. На этапе проектирования компонент, не являющийся элементом управления, изображается в виде пиктограммы. На этапе выполнения некоторые из этих компонентов видны (например, стандартные диалоговые панели), а другие не видны (например, некоторые компоненты приложений баз данных).

Компоненты класса TMainMenu (главное меню) и TPopupMenu (контекстное меню) вкладки Standard Палитры компонентов видимы и доступны для редактирования только разработчику приложения. Для него эти компоненты являются инструментом, используемым при создании меню. Во время работы приложения пользователь ничего не может сделать с компонентом меню, он его даже не видит. Он видит только результат работы программиста с этим компонентом, а именно – меню, в котором можно что-то выбирать.

Напротив, компонент класса TButton (кнопка) для пользователя является графическим элементом, видимым на экране. Пользователь может произвести некоторое действие, выполнив щелчок на этой кнопке. Поэтому компонент-кнопка является элементом управления, а компонент-меню – нет.

Все компоненты, представленные в Палитре компонентов на страницах Standard, Additional, Win32, Win 3.1, Data Controls (за исключением компонентов TMainMenu и TPopupMenu), являются элементами управления.

Класс TControl со своими наследниками образует всю палитру видимых компонентов в Delphi. Они называются (большая часть из них) элементами управления, поскольку на их основе реализованы управляющие компоненты: кнопки, списки, переключатели и т.д.

Изобразим схематически связь между компонентами.


 

Компоненты (TComponent)

       
   
 


не визуальные(например TApplication) визуальные(TControl)

       
   

 

 


элементы управления не элементы