Система программирования 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)
элементы управления не элементы