Разработка собственных компонентов

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

Перед созданием своего компонента важно правильно выбрать для него предка. Кто же может быть предком для вашего компонента? Как правило, используются в виде предков TComponent, TControl, TWinControl, TGraphicControl, TCustomXXXXXX, а также все компоненты палитры компонентов. Возьмем для примера компонент TOpenDialog, который находится на странице Dialogs палитры компонентов. Он хорошо справляется со своей задачей, но у него есть одно маленькое неудобство. Каждый раз, когда его используешь необходимо каждый раз изменять значение свойства Options. И причем это, как правило, одни и те же действия.


нажатие на этой строке Ctrl + Shift + C создает шаблон для этого метода, внутри которого мы вставляем такие строки:


Установка созданного компонента Component/Install Component...

  • Install Into New Package
  • Package file name: C:\Program Files\Borland\Delphi4\Lib\OurTest.dpk
  • Package description: Our tested package

Вам не нравится, что у нашего компонента иконка такая же как у стандартного? Тогда создадим для него свою собственную. Для этого нам необходимо вызвать Tools/Image Editor. Создаем новый *.dcr файл. Вставляем в него рисунок Resource/New/Bitmap. Устанавливаем размер картинки 24x24 точек. А дальше - ваше творчество... Обратите внимание: цвет точек, совпадающий с цветом точки в левом нижнем углу рисунка, будет считаться ПРОЗРАЧНЫМ!

После того как вы создали свой рисунок, переименуйте его из Bitmap1 в TOurOpenDialog и сохраните файл с именем OurOpenDialog.dcr. Удалите компонент из пакета и установите его снова (только в этом случае добавится и ссылка на *.dcr файл).

Compile, Install и удачи!

Форма "О программе" используется в качестве информативных целей. Чаще всего в ней пишется наименование программы, назначение, авторы и лицензионное соглашение. Чаще всего размещается в главном меню в пункте Помощь->О программе....

Для создание формы "О программе" в Delphi (Делфи, Дельфи) нужно создать обычную форму, как на рисунке ниже:

Для создания любой формы в Delphi 7 используем следующую команду из меню File->New->Form, а при разработке проекта в более новой среде, к примеру Delphi XE2, нужно использовать немного другую команду: File->New->VCL Form - Delphi.

После создания формы нужно выставить нужные размеры и рекомендуется выполнить следующие настройки:

  • Выставить свойство Position. По умолчанию здесь указано значение poDesigned, которое диктует открываемой форме появляться там, где она находилась в момент создания программы. Поэтому нужно выставить, так чтобы форма появлялась по центру относительно формы, из которой она была вызвана. Для этого в свойство Position надо выставить значение poOwnerFormCenter.
  • Также можно отключить свойство AutoScroll, чтобы не появлялись полосы прокрутки.
  • Так как в форме будет краткая статическая информация, то иметь возможность изменять размеры формы во время выполнения нет никакой необходимости. Поэтому в свойстве BorderStyle выставить значение bsSingle.
  • Еще нужно настроить вложенные свойства в BorderIcons. Нужно в свойствах biMinimize и biMaximize выставить значения в false, что не позволит минимизировать и развернуть форму соответственно.

Помимо всех описанных настроек, также можно украсить форму фоном. Для этого нужно из палитры компонентов поместить Image, который находится во вкладке Additional, если вы пишите в Delphi 7. В свойстве сразу нужно выставить значение alClient, которое растянет контейнер для изображения на всю форму.

Также при использовании TLabel можно выставить Transparent в true. Данная опция сделает так, чтобы фон метки был прозрачен, что будет выглядеть намного красивее, если используется вспомогательный фон.

Заключение

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

  • Обзор
  • Соглашения по наименованиям
  • Выбор предка
  • Пример создания компонента
  1. Обзор
  2. Поскольку Delphi является открытой средой и позволяет не только использовать объекты из Библиотеки Визуальных Компонент (VCL) в своей программе, но и создавать новые объекты. Причем, ничего другого, кроме Delphi, для этого не требуется. Создание нового объекта в Delphi не является очень сложной задачей, хотя для этого и требуется знание Windows API, объектно-ориентированного программирования и иерархии классов в VCL.

    Может возникнуть вопрос; если в Delphi уже есть своя библиотека, то зачем еще создавать какие-то объекты? Ответ прост: нельзя создать библиотеку на все случаи жизни и на все вкусы. Новые компоненты, во-первых, позволяют расширить область применения Delphi: например, с помощью библиотек объектов третьих фирм разрабатывать приложения для работы в Internet. Во-вторых, позволяют дополнить или настроить для себя имеющиеся в VCL объекты (например, переопределить значения свойств, устанавливаемые по умолчанию).

  3. Добавление новых объектов в VCL
  4. Предположим, что у вас появился уже готовый компонент. Как его добавить в VCL? Для этого выберите пункт меню Options|Install Components… Появится диалог, как на рис.1

    Рис. 1 : Диалог установки нового компонента

    Нажмите “Add” и укажите модуль, содержащий процедуру регистрации, нажмите “OK” и после успешной перекомпиляции новый объект появится в палитре.

  5. Заготовка для нового компонента
  6. В среде Delphi есть специальный эксперт, создающий заготовку для нового компонента. Вызвать его можно в пункте меню File|New Component… (см рис.2)


    Рис. 2 : Эксперт для создания нового компонента

    В диалоге нужно указать имя нового класса (например, TMyButton), предка класса (TButton) и страницу палитры, куда поместить новый компонент (Samples). Если нажать “OK”, то эксперт создаст модуль - заготовку для нового компонента:

    unit Unit1;

    interface

    uses

    SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

    Forms, Dialogs, StdCtrls;

    type

    TMyButton = class(TButton)

    private

    { Private declarations }

    protected

    { Protected declarations }

    public

    { Public declarations }

    published

    { Published declarations }

    end;

    procedure Register;

    implementation

    procedure Register;

    begin

    RegisterComponents("Samples", );

    end;

    end.

    Модуль содержит декларацию нового класса и процедуру его регистрации в Палитре Компонент. В процедуре RegisterComponents первый параметр - имя страницы (можно указать свое имя - появится новая страница); второй параметр - множество объектов для регистрации.

    Теперь модуль нужно сохранить под новым именем (например, NEW_BTN.PAS) и приступить к дописыванию новых свойств и методов. После того, как эта работа закончена и новый компонент отлажен, можно добавить его в Палитру (см. предыдущую главу). Но перед этим желательно создать файл ресурсов, в котором будет лежать пиктограмма для представления данного объекта в Палитре Компонент. Файл ресурсов можно создать с помощью программы Resource Workshop, называться он должен точно так же, как модуль регистрации компонента и иметь расширение.DCR (т.е., если объект регистрируется в модуле NEW_B TN .PAS, то тогда имя файла ресурсов будет NEW_BTN.DCR). В файле ресурсов должен находиться ресурс типа BITMAP - картинка размером 28x28 точки (можно меньше), название картинки должно совпадать с именем класса (в нашем случае TMYBUTTON).

  7. Соглашения по наименованиям

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

Итак:

  • Все декларации типов начинаются на букву T. Еще раз, Delphi не требует этого, но это делает очевидным, что "TEdit", например, есть определение типа, а не переменная или поле класса.
  • Имена свойствам нужно давать легко читаемые и информативные. Нужно помнить, что пользователь будет их видеть в Инспекторе Объектов. И имя вроде "TextOrientation" много удобнее, нежели "TxtOr". То же самое относится к методам. Методы, доступные пользователю, должны иметь удобные названия.
  • При создании свойств типа Event, имя такого свойства должно начинаться с “On” (например, OnClick, OnCreate и т.д.).
  • Имя метода для чтения свойства должен начинаться со слова “Get”. Например, метод GetStyle должен выполнять чтение для свойства Style.
  • Имя метода для записи свойства должен начинаться со слова “Set”. Например, метод SetStyle должен выполнять запись в свойство Style.
  • Внутреннее поле для хранения данных свойства должно носить имя, начинающееся с буквы “F”. Например, свойство Handle могло бы храниться в поле FHandle.

Конечно же, есть исключения из правил. Иногда бывает удобнее их нарушить, например, класс TTable имеет свойства типа Event, которые называются BeforePost, AfterPost и т.п.

  1. Выбор предка

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

  • TObject - Можно использовать в качестве предка, если с этим компонентом не нужно работать во время дизайна. Это может быть, например, класс, содержащий значения переменных среды (environment) или класс для работы с INI файлами.
  • TComponent - Отправная точка для многих невидимых компонент. Данный класс обладает встроенной возможностью сохранять/считывать себя в потоке во время дизайна.
  • TGraphicControl - Используйте этот класс для создания видимых компонент, которым не нужен handle. Такие компоненты рисуют прямо на своей поверхности и требуют мало ресурсов Windows.
  • TWinControl - Базовый класс для компонент, которые имеют окно. Данное окно имеет свой handle, его используют при доступе к возможностям Windows через API.
  • TCustomControl - Потомок TWinControl, вводит понятие канвы (Canvas) и метод Paint() для лучшего контроля за прорисовкой компонента. Именно этот класс используется в качестве базового для построения большинства видимых компонент, имеющих оконный handle.
  • TXxxxx - Класс вроде TEdit или TButton. Используются с целью доопределения их свойств и методов или переопределения значения свойств, принимаемых по умолчанию.
  1. Пример создания компонента

Для примера создадим новый класс, мутант TButton, в котором изменим значение по умолчанию свойства ShowHint на True и добавим новое свойство - счетчик нажатий на кнопку. Заготовка модуля для создания нового компонента уже есть (см. пункт Заготовка для нового компонента ). Теперь исходный текст выглядит так:

unit New_btn;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

type

TMyButton = class(TButton)

private

{ Private declarations }

FClickCount: Longint;

protected

{ Protected declarations }

public

{ Public declarations }

constructor Create(AOwner: TComponent); override;

procedure Click; override;

property ClickCount: Longint read FClickCount write

  • FClickCount;
  • published

    { Published declarations }

    end;

    procedure Register;

    implementation

    constructor TMyButton.Create(AOwner: TComponent);

    begin

    inherited Create(AOwner);

    ShowHint:=True;

    FClickCount:=0;

    end;

    procedure TMyButton.Click;

    begin

    Inc(FClickCount);

    inherited Click;

    end;

    procedure Register;

    begin

    RegisterComponents("Samples", );

    end;

    end.

    Для того, чтобы переопределить начальное значение свойства при создании объекта, нужно переписать конструктор Create, в котором и присвоить этому свойству нужное значение (не забыв перед этим вызвать конструктор предка).

    Новое свойство для подсчета нажатий на клавишу называется ClickCount. Его внутреннее поле для сохранения значения - FClickCount имеет тип Longint, емкости поля хватит надолго.

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

    В компьютерной литературе принято писать первое приложение, которое выводит на экран надпись “HelloWord”, мы же несколько переиначим и создадим свое первое приложение, которое будет выводить надпись “HelloDelphi” .

    Понятное дело, для начала нам нужно запустить сам Delphi. После того как перед нами открылось окно оболочки - создаем новый проект File | New | VCL Forms Application - Delphi .

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

    Рисунок. Менеджер проекта, создаваемого приложения

    В менеджере проектов появилось целое дерево. Давайте рассмотрим каждый пункт этого дерева.

    ProjectGroup1 (Заголовок дерева) - имя группы проектов. В одной группе проектов может быть несколько приложений. В нашем случае мы создали одно новое приложение, поэтому в группе будет только оно. Если вы нажмете кнопку New (Новый) в окне менеджера проектов и создадите новое приложение, то оно будет добавлено в существующую группу проектов.

    Project1.exe - имя проекта (приложения). Когда мы создаем новое приложение, Delphi дает ему имя Project плюс порядковый номер.

    Unit1.pas - модуль. Проект состоит из модулей. Каждое окно программы хранится в отдельном модуле, а мы видим на экране, что у нашего приложения есть окно, и именно оно находится в нем. Файлы с расширением pas содержат исходный код модуля. Имя файла такое же, как и у модуля.

    Unit1.dfm - это визуальная форма. Она сохраняется в файле с таким же именем, как у и модуля, но с расширением dfm .

    Когда у нас в проекте несколько приложений, то только одно из них является активным, и именно его мы можем выполнять и отлаживать в среде оболочки Delphi. Имя активного приложения написано жирным шрифтом. Чтобы изменить активное приложение, достаточно дважды щелкнуть по его имени левой кнопкой мыши или щелкнуть правой по имени нужного проекта и из контекстного меню выбрать Activate (Активировать).

    Но сейчас мы будем работать только с одним приложением, поэтому если вы создали два, то второе надо удалить. Для этого выделяем имя приложения и нажимаем на клавиатуре кнопку Delete. Перед нами появляется окно с подтверждением на удаление. Если нажать Yes (Да), то приложение будет удалено из группы проектов.

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

    Давайте сохраним наше новое приложение. Для этого выберем из главного меню File | SaveAll . Перед нами откроется стандартное окно сохранения файла. Для начала Delphi запросит ввести имя модуля. По умолчанию указано текущее имя - Unit1.pas. Давайте изменим его на MainUnit и нажмем кнопку Save (Сохранить).

    Здесь следует отметить, что нельзя вводить имена с пробелами или на русском языке. Если вы попытаетесь ввести нечто подобное, то произойдет ошибка, ваш файл не будет сохранен и придется заново повторять процедуру сохранения. Не забудьте выбрать папку, куда вы хотите сохранить модуль и проекты. Желательно, чтобы все файлы одного проекта хранились в одной папке, по крайней мере на начальном этапе, пока вы не наберетесь опыта.

    После того как мы сохранили MainUnit, Delphi запросит у нас имя будущего проекта. Поскольку мы решили писать новое приложение под названием HelloDelphi , то здесь давайте и введем HelloDelphi. Имя проекта также как и имя модуля должно вводиться без пробелов и только латиницей. После того как ввели имя проекта, можем нажимать кнопку Save (Сохранить). Проект сохранится в файле под именем HelloDelphi.dpr . Когда мы захотим вновь открыть этот проект, то нам нужно открывать именно этот файл. Не нужно открывать файлы с расширением pas , потому что это всего лишь составляющая часть проекта. Открывать нужно файлы с расширением dpr .

    Старайтесь выбирать имена, наиболее точно отображающие содержимое модуля, чтобы потом легче было разобраться, для чего предназначены файлы в больших проектах. К тому же желательно помнить, что имя проекта задает имя будущего исполняемого программного файла проекта. Если вы оставите имя Project 1, то и имя исполняемого файла будет Project1.exe .

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

    Давайте теперь посмотрим, как изменился наш менеджер проектов. Как видите, имя проекта изменилось на HelloDelphi, а имя модуля на MainUnit.

    Теперь давайте откроем папку, в которую мы сохранили наш проект, и посмотрим, какие файлы там присутствуют.

    1. HelloDelphi.cfg - файлы с расширением cfg , содержат конфигурацию проекта.

    2. HelloDelphi.dof - файлы с расширением dof , содержат опции проекта.

    3. HelloDelphi.dpr - файлы с расширением dpr , это сам проект. В этом файле находится описание используемых в проекте модулей и код инициализации программы. Его можно использовать и для написания кода. В будущем мы узнаем, что можно писать в этом модуле и для чего.

    4. HelloDelphi.res - файлы с расширением res , содержат ресурсы проекта, например, такие как иконки, курсоры и др. По умолчанию Delphi помещает в этот файл только иконку, но это не значит, что вы не можете использовать файл для хранения других ресурсов.

    5. MainUnit.pas - файлы с расширением pas , содержат исходный код модулей.

    6. MainUnit.dfm - файлы с расширением dfm , содержат визуальную информацию о форме.

    7. MainUnit.ddp - файлы с расширением ddp , определяют вспомогательные файлы модуля, например, диаграммы. Если вы не используете диаграммы, то можете удалять эти файлы, хотя они все равно будут генерироваться.

    8. MainUnit.dcu - файл с расширением dcu , представляет откомпилированный модуль проекта в промежуточном формате. Когда компилируется программа, все модули компилируются в файлы формата DCU, а потом собираются в один и получается один исполняемый файл. Если модуль не изменялся с последней компиляции, то Delphi пропустит его, а во время сборки будет использовать существующий файл формата DCU, чтобы увеличить скорость компиляции. У вас пока не может быть этого файла, потому что вы еще не компилировали свой проект.

    Файлы исходных кодов (с расширением pas) — это текстовые файлы, которые мы будем редактировать в редакторе кода. Файлы визуальных форм (с расширением dfm) создаются автоматически, и в них будет храниться информация о том, что находится на форме, а также настройки самой формы. Я открыл этот файл с помощью Блокнота, и вот что я там увидел:

    object Form1: TForm1
    Left = 0
    Top = 0
    Caption = "Form1"
    ClientHeight = 213
    ClientWidth = 455
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = "Tahoma"
    Font.Style =
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    End

    Первая строка идентифицирует объект, его имя и тип. Потом идет перечисление свойств объекта и значения, которые им присвоены. Описание свойств компонента заканчивается ключевым словом end .

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

    А теперь давайте вернемся к нашей программе HelloDelphi, которую мы должны написать. Сначала посмотрим, что у нас уже есть. В принципе, мы ничего особого не сделали, но у нас уже есть готовое окно, которое можно превратить в программу. Для этого нужно скомпилировать проект. Чтобы скомпилировать проект, выбираем из меню пункт Project | Compile HelloDelphi , или нажимаем Ctrl+F9 . Если мы ничего не меняли в настройках Delphi, то у нас должно появится окно состояния компиляции.

    Рисунок. Окно состояния компиляции в Delphi

    Давайте разберемся, что показывает нам это окно.

    В этом окне довольно хорошо отображается состояние компиляции. Интерес представляют три значения.

    Hints - сообщения. Это простые сообщения, которые указывают на места, где можно улучшить код. Например, вы объявили переменную, но не пользовались ею. В этом случае появится соответствующее сообщение. Это, конечно же, не ошибка, и программа все же будет скомпилирована. Но благодаря этим сообщениям вы сможете увидеть, где была объявлена лишняя переменная или, возможно, просто что-то было забыто.

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

    Errors - это уже самые настоящие ошибки. Они указывают на те места, где была допущена грубая ошибка, из-за чего программа не может быть скомпилирована.

    Как видим, никаких сообщений, предупреждений или ошибок у нас нет. И это понятно, ведь мы еще ничего не делали и не успели испортить созданную для нас заготовку. Программа скомпилирована. Просто нажимаем кнопку ОК, и это окно закрывается. Можно сделать так, чтобы окно автоматически исчезало по завершении компиляции, для этого нужно поставить галочку в Automatically close on successful compile (Автоматически закрывать после удачной компиляции), но я не рекомендую этого делать.

    Теперь давайте вернемся в папку, где мы сохранили проект и посмотрим, что у нас изменилось. В этой папке появился исполняемый файл HelloDelphi.exe . Запустим его, и мы увидим пустое окно.

    Давайте изменим заголовок нашей формы на HelloDelphi . Как известно, в Delphi все объекты, а значит, и окно программы тоже объект. Заголовок окна - это скорей всего свойство окна. Для того чтобы изменить это свойство, нужно перейти в объектный инспектор (вкладка Properties (Свойства)), найти свойство Caption (Заголовок) и ввести в его поле ввода слово HelloDelphi (сейчас у нас там написано Form1 и при запуске HelloDelphi.exe у нас появляется форма с заголовком Form1). После этого можно нажать Enter или просто перейти на другую строку с другим свойством.

    После всего этого давайте запустим нашу программу. Для этого можно вновь скомпилировать ее и запустить файл. Однако на этот раз мы будем действовать иначе. Выбираем из меню Run (Выполнить) пункт Run (или нажимаем на клавиатуре клавишу F9). Delphi сразу откомпилирует и запустит готовую программу. Как видим, программирование не настолько страшно, как кажется на первый взгляд.

    Рисунок. Объектный инспектор. Изменение свойства Caption

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

    Для того чтобы получить возможность скачать исходник Delphi к этому уроку, необходимо посетить сайт рекламодателя. После этого, появится ссылка на исходник Delphi к уроку HelloDelphi. Создаем свое первое приложение на Delphi
    Нажмите на эту ссылку

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

    Создание папки

    Создать папку в Delphi можно воспользовавшись функцией CreateDir или процедурой MkDir . Так же можно воспользоваться функцией ForceDirectories. Первые две команды корректно выполняют создание одной новой папки. Отличия же в том, как они себя ведут в случае если создать папку невозможно.

    ForceDirectories(ExtractFilePath(Application.ExeName) + "/folder1/folder2/newfolder" );

    Удаление папки

    При удалении папки, важно учитывать есть ли в ней вложения или нет. Если папка пуста, то используется функция RemoveDir , в которой аналогично созданию, указывается путь к удаляемой папке. Функция при своем выполнении так же возвращает True, если удаление успешно и False, если удалить не удалось.

    if RemoveDir("myfolder" ) then
    ShowMessage("Папка успешно удалена." )
    else
    ShowMessage("Ошибка: папка не удалена." );

    Если же папка не пуста, то можно использовать пользовательскую функцию, которая будет последовательно удалять все вложенные файлы, а затем и пустые папки. Для среды Delphi 2010, можно воспользоваться следующим методом:

    TDirectory.Delete("myfolder" , True);

    При этом, в разделе описаний должна быть добавлена библиотека IOUtils.

    uses IOUtils;

    Если же такой возможности нет, стоит использовать следующую функцию, описанную еще в DelphiWorld. В параметре указывается путь к удаляемой папке. При успешном удалении (включая все вложения), функция вернет значение True, если удаление не удалось, вернет False.

    // Функция удаления директории с вложениями.
    function MyDirectoryDelete(dir: string): Boolean;
    var
    fos: TSHFileOpStruct;
    begin
    ZeroMemory(@fos, SizeOf(fos));
    with fos do begin
    wFunc:= FO_DELETE;
    fFlags:= FOF_SILENT or FOF_NOCONFIRMATION
    pFrom:= PChar(dir + #0);
    end ;
    Result:= (0 = ShFileOperation(fos));
    end ;

    // Вызов функции удаление в программе.
    begin if MyDirectoryDelete("myfolder" ) then
    ShowMessage("Папка успешно удалена." )
    else
    ShowMessage("Ошибка: папка не удалена." );
    end ;

    В раздел описаний здесь необходимо добавить библиотеку ShellApi.

    uses
    ShellApi;

    Проверка существования директории

    Для проверки наличия директории используется функция DirectoryExists . В параметре так же указывается полный или относительный путь к папке. Если заданная папка существует, функция вернет True, в обратном случае False.

    if DirectoryExists("myfolder" ) then
    ShowMessage("Папка существует." )
    else
    ShowMessage("Такой папки нет." );