Программа на DelphiРефераты >> Программирование и компьютеры >> Программа на Delphi
Создает новую директорию.
- Procedure ForceDirectories(C:\APPS\SALES\LOCAL).
П р и м е ч а н и е. К моменту обращения к процедуре директории APPS и SALES должны существовать.
Пример процедуры удаления данных из текущей директории, включая файлы и вложенные папки. Procedure DelInsideDir(FullDir: tPathStr);Var L: Integer; Sr: TSearchRec; dr, q: tPathStr;begin if ExistDir(FullDir) then {такая директория есть}beginGetDir(0,dr); {запомнить текущую директорию}ChDir(FullDir); {текущей становится удаляемая директория}L:=FindFirst(Slash(FullDir)+'*.*',faAnyFile,Sr);{поиск первого файла}tryWhile (L = 0) do begin {пока файлы находятся}Case Sr.Attr offaDirectory:{найденный файл – внутренняя директория}if (Sr.Name<>'.') and (Sr.Name<>' ') then {это не ссылка, директория}begin{удаление внутреннего содержимого директории}DelInsideDir(Slash(FullDir)+Sr.Name); q:= Slash(FullDir)+Sr.Name;ChDir(ExtractFilePath(q));{удаление самой директории (можно, т. к. она теперь пуста)}if NotEmpStr(ExtractFileName(q)) then RmDir(ExtractFileName(q)); end;faArchive: DeleteFile(Sr.Name); {это файл, удаляется}end; {Конец Case-оператора}L:= FindNext(Sr); {следующий файл директории}end; {цикла While}finally FindClose(Sr); {закрыть поиск файлов}end; {try – finally – end}ChDir(dr); {вернуться в текущую директорию}end; {if}end;{процедуры}
Например, если необходимо стереть данные с дискеты, то это можно сделать с помощью оператора: DelInsideDir('A:\');
18. Классы и объекты
В Object Pascal классами называются специальные типы, которые содержат поля, методы и свойства. Предшественником класса является устаревший ныне тип языка Turbo Pascal, называемый объектом. Объект был введен в Turbo Pascal до создания Delphi. С появлением Delphi в новой версии языка Object Pascal объекты, для совместимости со старым программным продуктом, сохранены. Однако ныне использование объектов не актуально.
Класс представляет собой указатель. Однако в отличие от традиционных указателей это указатель особого типа: в нем нельзя использовать символ "^" при обращении к классу.
18.1. Инкаспуляция, наследование и полиморфизм
Класс, объединяя в себе поля, методы и свойства в единое целое, является законченной структурной единицей, предназначенной для решения отдельной задачи. Обычно такой задачей является задача разрешения некоторого круга сопутствующих проблем. Так, класс TRichEdit представляет собой мощный текстовой редактор rtf-файлов (файлов в формате Rich Text Format), который предназначен для организации просмотра и редактирования файла, сохранения и изменения размеров и типов шрифтов, поиска строк символов и многого другого. Такое объединение полей, методов и свойств в единое целое называется инкаспуляцией.
В языке существует множество классов (около 300), которые созданы разработчиками языка Object Pascal – сотрудниками фирмы Inprise International – для программистов, использующих среду Delphi. Такие классы можно назвать фирменными.
Программист, составляя программу, всегда создает свои пользовательские классы. Эти классы создаются либо неявно, когда программист конструирует программу визуальными средствами Delphi, а текст классов при этом составляет сама Delphi, либо явно, когда программист пишет код класса средствами языка Object Pascal.
Новый класс строится на основе другого, более простого, класса. Для этого в заголовке класса указывается его класс-родитель. Синтаксис заголовка нового класса имеет вид
type className = class (ancestorClass)
Здесь className – имя нового класса; ancestorClass – имя класса-родителя. Новый класс автоматически наследует поля, методы и свойства своего родителя и может пополниться своими полями, методами и свойствами. Это свойство классов называется наследованием. Возможность наследования позволяет, следуя методу от простого к сложному, создавать классы какой угодно степени сложности. Простейшим классом является класс TObject, который не содержит полей и свойств, однако имеет некоторое множество методов, обеспечивающих создание, уничтожение и обслуживание этого класса и необходимых для нормального функционирования программы. Именно на основе этого общего для всех классов прародителя строится дерево наследования классов. Например:
type TPersistent = class (TObject),
type TComponent = class (TPersistent),
type TControl = class (TComponent).
Нередко методы, описанные в классе-родителе, оказываются по каким-либо причинам неудовлетворительными для класса-потомка. В этом случае в классе-потомке можно создать метод с тем же именем, что и в классе-родителе. При этом окажется, что в обоих классах будут действовать разные методы с одним и тем же именем. Полиморфизм и есть такое свойство родственных классов, которое состоит в допустимости объявления в них одноименных методов.
18.2. Синтаксис класса
Синтаксис всякого класса имеет вид
type className = class (ancestorClass)
memberList
end;
Здесь className – имя класса; class – ключевое слово; ancestorClass – тип класса-родителя; memberList – список полей, методов и свойств. Ниже приведен текст модуля main, содержащий класс TForm1.
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;
type
TForm1 = class(TForm) {объявление класса TForm1}
Button1: TButton; {поле}
L1: TLabel; {поле}
L2: TLabel; {поле}
Button2: TButton; {поле}
procedure Button1Click(Sender: TObject); {метод}
procedure FormActivate(Sender: TObject); {метод}
end;
Var i: Integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); {описание метода}
begin
L1.Caption:= DateTimeToStr(Date);
L2.Caption:= TimeToStr(Time);
end;
procedure TForm1.FormActivate(Sender: TObject); {описание метода}
begin
i:=125;
end;
end.
18.3. Поля класса
Полем может быть любой инкаспулированный в класс тип или другой класс, например:
type
TKdnClass = class(TObject)
i, j: integer;
s: String;
TKdn1: TKdn0;
End;
Если потомком является TObject, то в заголовке его можно опустить.
Класс-потомок имеет доступ ко всем полям своих предков, но не может их переопределять, т. к. он станет недоступен. Пример:
type
TPredok = class {объявление класса-предка}
Value: Integer;
end;
TPotomok = class(TPredok) {объявление класса-потомка}
Value: string; {перекрытие наследуемого поля}
end;
var
My1: TPredok; {объявление переменной класса}
My2: TPotomok; {объявление переменной-класса}