delphi — вопросы с ответами

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

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

  • Версия Starter является самой простой и не содержит функций, необходимых для разработки мобильных приложений. Эта версия предназначена для любителей, студентов и вообще для тех, кто просто хочет изучать Delphi. Starter поддерживает создание приложений только для 32-битной Windows;
  • Следующая версия Professional. Она также не содержит функций для мобильной разработки, но их можно установить отдельно в виде пакетов мобильных дополнений. Professional – хороший выбор, если вы планируете создавать приложения для Windows и вам не требуется возможность подключения к удаленным базам данных;
  • Третья версия Enterprise. Это полная версия Delphi и содержит все, что есть в Professional, а также многое другое. Она позволяет создавать приложения для всех поддерживаемых мобильных и настольных платформ, включая Android, iOS, Windows, Mac и Linux. Она также содержит платформу DataSnap для построения масштабируемых многоуровневых систем, недоступных в версии Professional;
  • Самая полная версия Delphi – Architect. Это пакет продуктов, который содержит Delphi Enterprise и отдельно установленную версию ER/Studio Developer Edition для моделирования реляционных баз данных SQL, а также DB Power Studio Developer Edition, которая содержит инструменты для работы с базами данных SQL.

Delphi доступен как самостоятельный продукт, но его также можно использовать как часть RAD Studio. RAD Studio содержит Delphi и C++ Builder. Delphi и C++ Builder – две разные личности IDE в RAD Studio, и обе они могут быть установлены из одного и того же установщика RAD Studio в одну глубоко интегрированную среду. Оба продукта предоставляют одинаковые возможности для создания мобильных и настольных приложений для разных операционных систем из одного и того же исходного кода с использованием визуальных дизайнеров и используют одни и те же библиотеки компонентов, но различаются используемым языком программирования. Delphi использует Object Pascal, а C++ Builder использует стандарт C++.

Установка пользовательских компонентов

Delphi IDE имеет открытую архитектуру и предоставляет множество способов расширить свою функциональность с помощью дополнительных пакетов. Вы можете увидеть список установленных в данный момент пакетов в опции Installed Packages, доступной в меню Component. Наиболее типичным конструкционным блоком Delphi является Component. Технически, речь идет о применении принципов объектно-ориентированного программирования и их продвижении на один шаг вперед. С компонентами у вас есть возможность манипулировать обычными экземплярами объектов языка программирования во время разработки, прежде чем проект будет построен для данной платформы. Пакеты могут также содержать редакторы пользовательских свойств и расширение API Open Tools для самой IDE, которое может добавлять пользовательские функции в IDE, такие как дополнительные меню и окна.

Из стандартной установки Delphi по умолчанию вы получите несколько сотен уже предустановленных компонентов. В зависимости от версии Delphi и выбранных функций этот список может отличаться. Выберите опцию Installed Packages в меню Component, чтобы проверить, какие компоненты действительно установлены, как показано на следующем снимке экрана:

Существует множество дополнительных бесплатных и коммерческих пакетов компонентов, которые не установлены по умолчанию. Их можно установить с помощью встроенного диспетчера пакетов GetIt. Он доступен либо на странице приветствия, либо в меню Tools.

Object Pascal

Object Pascal – это высокоуровневый, современный и строго типизированный скомпилированный язык, который поддерживает структурированное и объектно-ориентированное программирование. Именно он и является языком программирования Delphi.

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

Одно или несколько действий, выполняемых над определенными данными, могут быть инкапсулированы в язык Object Pascal в виде подпрограммы или класса. В Object Pascal подпрограммы называются функциями. Если функция не возвращает значение, она называется процедурой. Классы являются краеугольным камнем объектно-ориентированного программирования, которое является наиболее важным подходом к созданию приложений в Object Pascal. Объекты группируют данные вместе с операциями над этими данными, обеспечивая инкапсуляцию и возможность повторного использования.

Работа компилятора заключается в обработке одного или нескольких файлов, содержащих текст программ, которые мы пишем на языке программирования, и создании двоичного файла, который может быть загружен операционной системой и выполнен. Компиляторы могут также генерировать другие типы двоичных файлов, такие как пакеты или сервисы. Файлы исходного кода – это обычные текстовые файлы, которые можно открыть в произвольном текстовом редакторе. Расширением по умолчанию файла, содержащего исходный код Object Pascal, является .pas. Когда вы устанавливаете Delphi, он регистрируется в Windows как программа по умолчанию для открытия файлов различных типов, связанных с программированием на Delphi, включая .pas, .dpr, .dpk, .dproj и некоторые другие.

Константы

Константа – это идентификатор, который обозначает значение, которое не может быть изменено. Нормальная десятичная запись используется для чисел, которые являются целыми или действительными константами. Шестнадцатеричная целочисленная константа использует знак доллара в качестве префикса. Также можно использовать инженерную нотацию, где показатель степени следует за символом E или e.

Например, строковая константа будет распечатана как Paweł's computer, как показано в следующей программе:

Object Pascal позволяет использовать константные выражения. Компилятор оценивает их во время компиляции без фактического выполнения программы.

Object Pascal позволяет встраивать управляющие символы в строки символов. Символ #, за которым следует целое число без знака в диапазоне от 0 до 255, означает символ соответствующего значения ASCII. Полезным примером этой возможности является вставка символа новой строки в строковую константу, поэтому он отображается в несколько строк. Например, посмотрите следующий фрагмент кода:

Встраивание нового управляющего символа новой строки ASCII 13 отображает сообщение в две строки. Для удобства чтения фактический символ новой строки определяется как константа.

Типы

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

Object Pascal поставляется с множеством различных встроенных типов, которые вы можете использовать для определения своих собственных пользовательских типов. С опытом станет более очевидно, как моделировать вашу проблемную область. Если вы пишете приложение для управления оценками в школе, вы, вероятно, захотите смоделировать абстракцию школьного класса. Должна ли она быть константой, перечисляемым типом, записью или классом?

В каждой стране и на уровне образования существуют разные схемы оценок. В качестве примера давайте рассмотрим систему оценок, которая использовалась в большинстве школ СНГ: очень хорошо (5), хорошо (4), достаточно (3) и недостаточно (2). Сначала у нас может возникнуть соблазн использовать числа в качестве оценок в нашем коде. Обратитесь к следующему фрагменту кода:

Это не оптимальный дизайн. Что если наше приложение по ошибке присваивает значение переменной с отрицательным или слишком большим значением?

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

Где-то в нашем коде у нас есть переменная типа TSchoolGrade, которая может содержать только одну из четырех возможных оценок, определенных этим типом. Теперь наш код стал лучше. Префикс sg помогает нам помнить, что, например, идентификатор sgGood фактически является одним из возможных значений школьных оценок. Другая возможность – использовать перечисленные значения в полной форме. С помощью директивы компилятора SCOPEDENUMS ON/OFF мы можем принудительно использовать полную форму перечисления, как показано в следующем фрагменте кода:

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

После определения типа мы будем использовать его в нашем коде, либо как отдельную переменную, либо как коллекцию. Самый базовый тип коллекции – это набор (set). Он очень мощный и недоступен на других языках программирования. Мы могли бы, например, определить набор квалификационных школьных оценок. Элементы набора заключены в квадратные скобки. Выполните следующий код:

Используя оператор in, мы можем проверить, принадлежит ли данное значение набору. Также можно использовать другие операторы для объединения наборов, вычисления их пересечений и, в общем-то, для реализации других операций теории сетов.

1 ответ
Моя цель: Учитывая приостановленный поток в Delphi-скомпилированной 32-разрядной или 64-разрядной программе Windows, чтобы выполнить стек (выполнимый) Указанные записи стека, чтобы перечислять локальные переменные в каждом методе и их значения. То есть, по крайней мере, найдите их адрес и тип (int...
stack
local-variables
debug-symbols
01 май 2015, в 17:29
1 ответ
Обновление 2017-05-17. Я больше не работаю в компании, где возник этот вопрос, и у меня нет доступа к Delphi XEx. В то время как я был там, проблема была решена путем миграции на смешанный FPC + GCC (Pascal + C), с NEON intrinsics для некоторых подпрограмм, где это имело значение. (FPC + GCC настоят...
android-ndk
arm
llvm
14 янв. 2015, в 16:00
1 ответ
Я создал собственный файл MSBuild .targets, который я включил в проект Delphi XE через IDE и включил его из контекстного меню Project Manager. Несмотря на то, что файл проверяется, он всегда отключается после повторного сохранения файла проекта. Здесь приведен упрощенный вариант файла целей с именем...
msbuild
delphi-xe
02 сен. 2013, в 16:15
1 ответ
Я использую мастер привязки данных XML в Delphi XE2. Для этой схемы требуются теги этого типа: <xs:element name="MyReport" type="MyReportType" /> <xs:complexType name="MyReportType"> <xs:all> <xs:element name="Header" type="HeaderType" /> <xs:element name="Values...
xsd
delphi-xe2
01 окт. 2012, в 15:08
15 ответов
У меня есть клиент/серверное приложение, которое я разрабатывал на одном ПК. Теперь ему нужны два последовательных порта, поэтому я позаимствовал ПК у друга. Когда я создаю свое приложение и пытаюсь запустить или отладить его (будь то в среде Delphi IDE или из диспетчера файлов Windows), это приводи...
64bit
08 май 2012, в 03:15
2 ответа
Я начал конвертировать интерфейсы Webview, которые будут использоваться в Delphi. Мне удалось загрузить библиотеку webkit, и методы интерфейса, которые вызываются, работают корректно, однако я не могу показать Webview в основной форме. Ниже представлены мои интерфейсы, объявленные WebFrameClass = ...
macos
freepascal
webkit
delphi-xe2
16 март 2012, в 04:16
7 ответов
Я новичок в Visual Studio 2010 и С#. Как отменить выделенный текст влево/вправо с помощью ярлыков? [IMG_OUR_ID=663.png] В Delphi IDE эквиваленты: Ctrl + Shift + I и Ctrl + Shift + U
visual-studio-2010
indentation
25 янв. 2012, в 23:31
1 ответ
Я пытаюсь определить, не блокирован ли блок памяти. Конечно, менеджер говорит мне, что по диалоговому окну или файлу журнала, но что, если я хотел бы сохранить результаты в базе данных? Например, я хотел бы иметь в таблице базы данных имена подпрограмм, которые выделяли заданные блоки. После прочтен...
memory-leaks
delphi-2009
fastmm
09 янв. 2012, в 06:48
3 ответа
Прежде чем я начну, я хотел бы указать, что я честно и искренне искал многократно и исчерпывающе через Google для такого, и не смог найти его. Мне нужен (для проекта, который я разрабатываю) список всех Delphi (2007 до самой последней выпущенной версии, я больше не поддерживаю версию старше 2007 год...
delphi-2007
10 дек. 2011, в 22:16
4 ответа
При выборе больших размеров шрифта на панели управления Windows (например, 125% или 150%) возникают проблемы в приложении VCL, каждый раз, когда что-то устанавливается по-разному. Возьмите TStatusBar.Panel. Я установил его ширину так, чтобы она содержала ровно одну метку, теперь с большими шрифтами ...
windows-7
28 нояб. 2011, в 12:04
2 ответа
Я просил аналогичную question о неявных интерфейсных переменных не так давно. Источником этого вопроса была ошибка в моем коде из-за того, что я не знал о существовании неявной переменной интерфейса, созданной компилятором. Эта переменная была завершена, когда процедура, в которой она была закончена...
interface
delphi-2010
13 окт. 2011, в 19:45
9 ответов
В Delphi 2009 SysUtils.pas содержит это в строке 425: EProgrammerNotFound = class(Exception); Это просто пасхальное яйцо или что-то серьезное? Когда должно возникнуть это исключение? Он также существует в Delphi Prism и/или Free Pascal? Q: Этот класс исключений все еще объявлен в Delphi (в насто...
delphi-2009
delphi-xe7
18 янв. 2010, в 05:45
9 ответов
Насколько мне удалось узнать, Windows не предлагает функцию API, чтобы сообщить, какое приложение зарегистрировало глобальную горячую клавишу (через RegisterHotkey). Я могу только узнать, что горячая клавиша зарегистрирована, если RegisterHotkey возвращает false, но не тот, кто "владеет" горячей кла...
winapi
hotkeys
06 май 2009, в 10:01
12 ответов
Я хочу создать строку, которая охватывает несколько строк для назначения свойству Label Caption. Как это делается в Delphi?
newline
31 окт. 2008, в 16:25
9 ответов
Я новичок в Delphi, и я запускал некоторые тесты, чтобы узнать, какие переменные объектов и переменные стека инициализируются по умолчанию: TInstanceVariables = class fBoolean: boolean; // always starts off as false fInteger: integer; // always starts off as zero fObject: TObject; // always st...
variables
initialization
25 сен. 2008, в 12:12
Наверх
Меню