Delphi - это проприетарная среда разработки (IDE) для Pascal в Windows. Она реализует объектно-ориентированную версию языка. Среда разработки базируется на графическом интерфейсе, связанного с редактором исходного кода функции Delphi. Язык программирования завоевал популярность благодаря простоте использования при разработке графических приложений и программ, связанных с базой данных.
Массивы - основа программирования
Borland Software Corporation в 1995 году выпустила преемника Turbo Pascal - Delphi, интегрированную среду разработки, использующую свой собственный диалект Object Pascal для облегчения приложений Windows. По сравнению с IDE, функции Delphi имели беспрецедентную поддержку баз данных, создавая многомерную среду, позволяющую программистам писать код быстрее и с меньшим количеством ошибок, чем когда-либо прежде.
Язык представлял собой универсальное средство для разработки приложений, включая редактор кода, визуальный дизайнер, который поддерживал кросс-платформенную разработку, интегрированный отладчик, механизм управления и поддержку сторонних плагинов. Редактор кода предложил разработчикам новые функции Delphi: анализ ошибок и рефакторинг.
Первоначально массив в Delphi-программе был статическим. Это означало, что его размер должен был быть известным во время написания кода.
В четвертой версии к языку были добавлены новые функции Delphi - динамические массивы, которые различались по размеру. Разработчику не нужно было объявлять размер при написании кода, и он мог программно изменять его, создавая ссылку, и, фактически, не выделяя память для содержимого.
В последней версии, прежде чем размещать данные, устанавливают длину при помощи удобной процедуры SetLength. Теперь, когда длина установлена, присваивают значения, аналогично тому, как это выполняется со статическим массивом функции Delphi. При этом динамические индексируются нулем.
Если в ходе работы программы нужно изменить размер - со статическими массивами это просто невозможно, а с динамическими - легко реализуемо. Для этого вызывают SetLength и используют вновь выделенные элементы в массиве. После того как размер изменен, оригинальные элементы по-прежнему находятся в нем и никакие данные не будут потеряны.
Статистические и динамические массивы
Статические массивы функции Delphi на самом деле являются просто указателями на непрерывную область памяти, которая была выделена для хранения нужного количества данных. Компилятор выполняет математические операции, чтобы превратить индекс в указатель на один элемент в массиве, а динамические, с другой стороны, добавляют уровень косвенности.
Динамический массив - это запись, содержащая информацию о нем, включая размер, количество элементов и указатель на статический. Когда вызывается SetLength, происходит несколько процессов:
- Поле размера обновляется.
- Новый (внутренний) статический массив функции Delphi 7 выделяется с новым размером.
- Элементы старого статического копируются в новый.
- Указатель статического изменяется на новый.
Если в текущей позиции внутреннего статического массива достаточно места для перераспределения, и существует одна переменная, ссылающаяся на массив, происходит только шаг № 1. Все это реализуется каждый раз, когда изменяют его длину.
Если есть другие переменные, которые ссылаются на тот же массив, старый статический не будет удален. Всякий раз, когда изменяется размер динамического массива, он будет скопирован, что означает перебор в памяти. Время, которое требуется, пропорционально размеру, например, копирование из 20 элементов занимает больше времени, чем из 10.
Строковые операторы
Подобно любому языку программирования, в Delphi переменные выполняют функцию заполнителя, используемого для хранения значений. Переменную, содержащую конкретный массив символов объявляют типом String. Delphi имеет качественный ассортимент строковых операторов, функций и процедур.
Перед назначением данных String переменной требуется знать четыре строковых типа. Короткая строка функции Delphi - Shortstring. Это подсчитанный массив (ASCII) символов, содержащий до 255 знаков в строке. Первый байт этого массива хранит длину. Этот принцип функционирования был основным в Delphi 1 (16-битный Delphi) и создавал переменную с именем small, максимальная длина которой составляла 50 символов.
Когда присваивают значение переменной Short String, строка усекается. Особенно если она превышает максимальную длину этого типа.
Переменные и их тип должны быть объявлены перед использованием. Тип переменной должен быть выбран таким, который будет содержать переменную:
- Целое число - это целые числа, например, 42 или -5.
- Одинарное или двойное - используются, как тип с запятыми, например, 3,3.
Операции могут быть применены к числовым переменным:
- сложение;
- вычитание;
- умножение;
- модуль - может быть применен только к целому числу;
- char - используется, чтобы содержать один символ, например, m;
- строка - используется, чтобы содержать предложения, например, Hello world;
- логические значения - True и False.
Чтобы объединить 2 строки символов, используют оператор «+». Пример: Hello + world будет реализовано, как Hello world.
Переменные и константы
Параметр представляет информацию и делает вызов функции Delphi в процедуре. Переменная - это часть данных, объявленная внутри функции и доступна исключительно в ней. Это локальное значение, изменяют так, как требуется разработчику. Есть глобальные переменные, доступные по всему dpr и проекту. Их следует использовать только в исключительных случаях.
При использовании переменной, ее объявляют во всех файлах, где она используется. Только переменные, переданные в качестве параметра Delphi функции и процедуры, не объявляются в той, где они применяются. Для объявления используют ключевое слово var. Они могут быть объявлены в .DPR или в процедурах файлов .pas.
Компонент TDBGrid Delphi является одной из жемчужин VCL. Разработанный таким образом, чтобы позволить пользователю просматривать и редактировать данные в табличной сетке, он предоставляет различные способы настройки способа представления данных. Например, добавление цвета в сетки базы данных улучшит внешний вид и разграничит важность определенных строк или столбцов в БД.
Delphi файлы
Delphi состоит из единиц, соответствующих исходных файлов и индексных карточек (форм), которые определяют графические интерфейсы. Таблица различных файлов, которые может понадобиться изменить, а также их назначение.
Расширение файла | Описание |
.DCR | Файл проекта |
.DFM | Чертеж формы, содержащий свойства графических компонентов |
.dpr | Файл проекта - это сердце приложения, связывает все различные файлы, содержащие код (.pas) с .DPR с функцией даты Delphi |
.PAS | Исходный файл, содержащий код приложения |
.bdsproj | Файл проекта, связанный с .DPR |
.RC | Файл ресурсов Windows |
Таблица файлов, генерированных после компиляции.
Расширение файла | Описание |
.BPG | Файл проектной группы. |
.dcu | Файл, созданный во время компиляции, но не обязательный. |
.dpk | Исходный файл пакета. |
.dof | Файл опций проекта. |
.dsk | Предпочтение IDE. |
.RES | Файл ресурсов Windows, он может содержать значки, растровые изображения, звуки. |
Функция Pos
Функция POS Delphi возвращает целое число, указывающее позицию первого вхождения одной строки в другую. Это создается следующим образом. Pos ищет первое полное вхождение указанной строки. Обычно предлагается в одинарных кавычках в источнике. Источником является некоторая переменная.
Если Pos находит строку, он возвращает позицию символа в Source, а первого символа в Str, как целочисленного значения, в противном случае функция Delphi возвращает 0. String и Source будут строками. Старомодная функция Pos - наиболее распространенный способ поиска и всегда расположена в начале.
Обновленная функция Pos помогает решить эту проблему. Она ищет строчку s1 в s2 и возвращает ее позицию, как это делает старый Pos. Кроме того, можно определить начальную позицию и максимальную длину для поиска.
Импорт библиотечных функций
Для импорта подпрограмм библиотеки (.DLL) присоединяют директиву в виде: externalstringConstant, по-окончанию заголовка функций и процедур, где string Constant - имя библиотечного файла в кавычках. Есть возможность импортировать подпрограмму с другим названием. Для этого указывают оригинальное имя во внешней директиве:
External stringConstant1, namestringConstant2.
Где первый string Constant указывает имя библиотечного файла, а второй является исходным именем подпрограммы. Следующий оператор выполняет импорт функции из user32.dll. Первоначальное имя функции - MessageBoxA. Вместо имени можно использовать номер, чтобы идентифицировать подпрограмму для импорта:
externalstringConstantindexintegerConstant.
Где integerConstant индекс подпрограммы в экспортной таблицы.
В декларации импорта обязательно следуют точному обозначению и регистру названия подпрограммы. Однако как только процедура импортируется, больше нет разницы между ними.
Пример создания одномерного массива
Допустим, нужно сформировать 3 одномерных массива для 50 членов общества разработчиков программного обеспечения. 1-й массив - имена, 2-й - электронная почта, а 3-й - число загрузок.
Любой из них имеет индексы и код, чтобы поддерживать все 3 перечня синхронно. Естественно, можно попробовать с одним массивом. Для этого необходимы строки имен и адресов почты, и целое число загрузок.
К примеру, последующее объявление организовывает тип записи с именем REMember, который можно применять в этом случае.
По сути, конструкция данных записи имеет возможность перемешивать всевозможные интегрированные типы Delphi, включая созданные. Записи обусловливают фиксированные коллекции компонентов различных типов. Любой элемент схож на переменную из имени и типа.
Тип функции Delphi Member охватывает 3 поля: строковое значение Name, eMail и целое число Posts. В последствии того, как будет установлен тип записи, можно объявить переменную Member. Она не выделяет памяти для имен, eMail и Posts. Для того чтобы практически создать запись Member, объявляют ее переменную.
Использование компонентов OnMouseOver
Код для событий OnMouseMove создают с компонентом TDBGrid, чтобы можно было найти строки и столбцы DBGrid (ячейки) в месте наведения курсора мыши. Если он расположен над сеткой, то срабатывает обработчик события OnMouseMove. Тогда используют метод MoveBy компонента DataSet, чтобы установить отображаемую текущую запись.
Равнозначный код используют для того, чтобы продемонстрировать место, где находится курсор мыши, и поменять его, когда он расположен над строкой заголовка. Для правильной установке активной записи требуется "взломать" DBGrid и получить доступ к защищенному свойству Row. Строки свойств TCustomDBGrid компонента содержат ссылку на текущие активные строки.
Много компонентов обладают полезными свойствами и методами, отмеченными как невидимые или защищенные разработчиками Delphi. Доступ к таким элементам обеспечивается применением простой техники, называемой «защищенный взлом».
Этот код при наведении указателем мыши на сетку выбирает запись, отображаемую в сетке «под» курсором. При этом не требуется нажимать на сетку, чтобы изменить существующую запись. OnDrawColumnCell событие используется для обработки необходимости настраиваемой графики для данных в ячейках.
Скиннинг Delphi Applications
Эти компоненты изменяют внешний вид приложений, добавляя темы и оболочки. Это простой способ улучшить графический интерфейс пользователя (GUI). VCLSkin - легкий в использовании компонент для создания графического интерфейса приложения Delphi. VCLSkin создаст тему или обложку для него без каких-либо изменений исходного кода.
Библиотека DynamicSkinForm VCL обеспечивает поддержку обложек для форм, меню, подсказок, а также многих стандартных и нестандартных оригинальных элементов управления.
У скинов есть много объектов и эффектов для крутых приложений, таких как WinAmp и iTunes. Специальный редактор позволяет пользователю настраивать скины. SkinAdapter является компонентом DynamicSkinForm, который позволяет создавать скины приложений без изменения исходного кода.
SUISkin предлагает автоматическое приложение с поддержкой скинов. С ним модификаций для существующих проектов не требуется. Просто перетаскивают компонент движка скина на основную форму и устанавливают некоторые свойства. Он будет автоматически обрабатывать все формы и диалоги. Файлы скинов могут быть скомпилированы в EXE-файл. Во время выполнения можно легко переключать или выключать их.
Пакет разработки пользовательского интерфейса App Face - это решение для создания визуальных графических интерфейсов приложений, которые можно использовать в VC, VB.Net, Delphi, Visual Basic, C ++ Builder и Win32 SDK. Он включает в себя управление скинами, средство создания визуальных скинов, примеров исходного кода, а также технического руководство. Библиотека appface.dll, является компонентом ядра и может автоматически обработать все созданные окна в целевом приложении.
Преимущества среды программирования
Delphi, безусловно, зарекомендовала себя как одна из самых устойчивых сред программирования, меняющих форму и размер. Несмотря ни на что, он остается такими же гибкими, как кодовая база, из которой вышел.
Основания почему до сих пор используют Delphi:
- Четкий синтаксис, делающий код максимально читабельным.
- Механизм перетаскивания для реализации, позволяющий быстро создавать программное обеспечение GUI.
- Поддержка баз данных SQL.
- Поддерживает весь Windows API.
- Полно-объектно-ориентированное программирование.
- Совместим с C ++.
- Сильно адаптируемая среда VCL.
- Требуется минимальное обслуживание приложений.
Во время своего апогея, огромное сообщество, разработало массу высококачественного программного продукта в виде компонентов с процедурами и функциями Delphi, многие из которых полностью бесплатные и с открытым исходным кодом. Сегодня все это по-прежнему работает, только с одной проблемой - нехваткой опытных программистов на Delphi.