Как сделать консольное приложение delphi

Добавил пользователь Skiper
Обновлено: 10.09.2024

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

Состав Delphi и требования к системе

Прежде, чем приступать к работе с какой-либо программой, было бы полезно ознакомиться с ее требованиями к компьютеру. Разумеется, требования у разных версий Delphi разнятся, постепенно повышаясь от версии к версии. В частности, в рассматриваемой нами Delphi 7 рекомендуется процессор не ниже Pentium II и не менее 256 Мбайт оперативной памяти. Более ранние версии требовали меньший объем памяти, однако для комфортной работы я в любом случае рекомендовал бы не менее 256 Мбайт, а для Delphi 7 и выше, да еще и под управлением ОС Windows XP, не помешало бы иметь 512 Мбайт ОЗУ.

Что касается требований к операционной системе, то хотя формально Delphi может работать на любой 32-разрядной версии Windows, я бы настоятельно рекомендовал использовать Windows из линии NT, т.е. Windows 2000 или XP. Дело в том, что Windows 9x, из-за своего 16-разрядного наследия, имеет серьезные ограничения на количество доступных системных ресурсов, вне зависимости от того, насколько мощный ПК вы используете. Кроме того, Windows 9x не может эффективно задействовать даже относительно большие - свыше 128 Мбайт - объемы оперативной памяти. Я уже не говорю о том, что в Windows 9x не поддерживаются ни многопоточность, ни набирающие в последнее время популярность двуядерные процессоры, а производители аппаратных компонентов ПК давно уже забросили оптимизацию драйверов для данного семейства ОС. Результатом всего этого является низкая производительность на современных компьютерах и вполне ощутимый риск "повесить" систему в процессе работы над сложным и ресурсоемким приложением.

Еще один важный вопрос - это монитор. Опять-таки, формально достаточно любого SVGA-монитора. Но работать в среде Delphi при разрешении экрана ниже, чем 1024 на 768 точек, крайне затруднительно: учтите, что вам постоянно надо видеть как элементы управления самой Delphi, так и собственное (разрабатываемое) приложение. Для комфортной работы я бы рекомендовал качественный 19" монитор с рабочим разрешением 1280 на 1024 точки. Причем, если это будет обычный монитор на ЭЛТ (или даже ЖК, но с аналоговым подключением), то вам понадобится еще и качественная видеокарта, способная обеспечить кристально четкую, без "замыливания" картинку. Для ЭЛТ-мониторов также важно обеспечивать поддержку указанного разрешения при частоте регенерации изображения не ниже 85 Гц.

ПРИМЕЧАНИЕ
Помните, что программирование - это напряженная работа с текстом. И если ваша связка "видеокарта-кабель-монитор" не может выдать четкий текст и (или) отсутствие видимого мерцания в нужном вам разрешении, то со временем вы рискуете испортить себе зрение.

Определившись с компьютером, перейдем к установке. В процессе установки про-грамма спросит вас, для каких версий тех или иных третьесторонних приложений следует устанавливать компоненты. Прежде всего, это версии MS Office, для одной из них вы сможете установить набор компонент, обеспечивающих взаимодействие между приложениями office и Delphi. Если вы устанавливаете старшую версию Del-phi (Client/Server, Enterprise, Architect), то вас спросят еще и о том, для каких версий баз данных следует установить компоненты. Наконец, в процессе установки, помимо самой Delphi будут установлено множество дополнительных программ, в основном, связанных с базами данных. Причем некоторые из них (например, сервер InterBase или виртуальная Java-машина) вообще устанавливаются отдельно, хотя и в процессе общего хода инсталляции.

По завершению процесса установки в программном меню Windows будет сформирована группа Borland Delphi, в которой, помимо самой Delphi, будут находиться ярлыки всех вспомогательных компонент среды. В частности, там будут находиться ярлыки для следующих программ:

  • Image editor - простой графический редактор для рисования иконок и курсоров. За время, прошедшее с момента последнего обновления (в 1996 году), морально устарел, но может пригодиться, если нет ничего другого;
  • WinSight - позволяет просматривать отладочную информацию в любых работающих приложениях;
  • BDE Administrator - позволяет настраивать базы данных;
  • Data Pump - позволяет переносить данных между БД;
  • Database Explorer или SQL Explorer - средство просмотра БД;
  • SQL Monitor (только старшие версии) - позволяет отслеживать обращения приложений к SQL-серверу.

Кроме того, в этой группе будет находиться подгруппа Help, а в ней, среди множества справочных файлов, - еще одна, с еще большим их количеством - MS SDK Help Files. Так вот, все эти файлы вам придется регулярно использовать, причем положение усугубляется не только их количеством и объемами, но и тем, что в русском варианте их не существует. Таким образом, знание английского языка будет вам хорошим подспорьем при изучении как Delphi, так и программирования вообще.

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

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

Интегрированная среда разработки

Интегрированная среда разработки Delphi (Delphi IDE) является многооконной системой. Она включает в себя все необходимое для быстрой разработки Windows-приложений, и может гибко настраиваться.

Тем не менее, как и всякая другая программа, Delphi имеет некоторый стандартный, предусмотренный разработчиками вид, в котором она предстает вам при первом запуске. В таком "стандартном" варианте среда Delphi имеет 6 окон (рис. 2.1). Это: главное окно (Delphi 7 - Project1), окно дерева объектов (Object TreeView), окно инспектора объектов (Object Inspector), окно конструктора форм (Form1), а так же совмещенное окно редактора кода и проводника кода (на заднем плане, под Form1). При этом окно проводника пристыковано к левому краю окна редактора. Впрочем, ничего не мешает отсоединить проводник от редактора, или, наоборот, состыковать все окна, кроме главного и конструктора форм, в одном окне, или объединить их по какому-либо иному принципу.

Вид Delphi 7 IDE по умолчанию


Рис. 2.1. Вид Delphi 7 IDE по умолчанию

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

Оптимизированный вид главного окна Delphi


Рис. 2.2. "Оптимизированный" вид главного окна Delphi

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

Содержание и предназначение панелей инструментов, имеющихся в начальном виде, следующее:

  • Debug - отладка. Позволяет запустить программу (Run), приостановить ее выполнение (Pause), а так же выполнять построчное выполнение программы;
  • Standard - стандартные. Служит для таких операций, как сохранение, созда-ние, добавление и удаление файлов;
  • View - вид. Используется для быстрого нахождения форм и файлов проекта;
  • Desktops - рабочая среда. С помощью этих инструментов можно переклю-чаться между различными настройками рабочей среды Delphi;
  • Custom - произвольная. Изначально содержит одну-единственную кнопку - для вызова справки;
  • Component palette - палитра компонентов. Содержит все доступные для разработки приложений компоненты.

Отметим, что все инструментальные панели настраиваются: кнопки можно перемещать между панелями, добавлять на них новые, или же удалять. Для обычных панелей (Standard, View, Debug) это делается точно таким же образом, как во многих других современных Windows-приложениях (например, как в Word, т.е. при помощи окна настройки - Customize).

Что касается самой большой панели - палитры компонентов, то для ее настройки следует использовать специальное окном свойств палитры (рис. 2.3). Это окно доступно через пункт Configure Palette из меню Component. Однако учтите, что при настройке важно знать как предназначение компонент, так и понимать принципы их организации, поэтому максимум, что можно себе позволить для начала - это поменять местами группы, перетаскивая их в списке страниц (Pages).

Настройка палитры компонентов требует знания VCL


Рис. 2.3. Настройка палитры компонентов требует знания VCL

ПРИМЕЧАНИЕ
Следует учитывать, что поскольку палитра компонентов является ничем иным, как визуальным представлением VCL, то ее вид и состав могут меняться в зависимости от того, какие модули подключены, устанавливались или нет дополнительные компоненты или их наборы, и т.д. В любом случае, в начале изучения Delphi, экспериментов в этой области лучше не производить.

Все компоненты сгруппированы по вкладкам, число и состав которых несколько разнятся в зависимости от версии и варианта поставки. Так, в Delphi 7 Enterprise имеется 33 вкладки, содержащие компоненты, принадлежащие к той или иной группе VCL (табл. 2.1).

Создание простейшего приложения Windows Forms


  1. Выберите опции меню File=>New=>Windows Forms Application.
  2. Если необходимо, можно изменить размеры формы приложения при помощи стрелок конструктора форм (Design) —
  3. Выберите в форме Tool Palette элемент управления Button и положите его на форму приложения. Если необходимо, измените размеры экземпляра и его свойство Text.
  4. Дважды щелкните по экземпляру элемента управления Button, помещенному на форму. Управление передастся кодовому редактору Code Editor, который сгенерирует каркас процедуры.
  5. В редакторе кода введите код: MessageBox.Show('Здравствуй, разработчик!');
  6. Сохраните и выполните проект, в результате чего вы увидите на экране монитора окно приложения.



При создании приложений для платформы Windows может быть выбрана опция VCL (Visual Component Library) Forms Application, которая специально оставлена для совместимости с предыдущими версиями Delphi. Как и в приложении типа Windows Forms Application, на рабочем столе интегрированной среды разработки появится конструктор форм. Обратите внимание, что свойства и события различны для экземпляров объектов классов Form1 и TWinForm (в этом имени видим расхождение с правилами, принятыми в Delphi, — так обычно обозначаются типы) вроде TForm1 и System.Windows.Forms.Form, выполняющих аналогичные функции. При создании новых проектов мы рекомендуем использовать Windows Forms Application, как более соответствующий платформе. Среда разработки автоматически загружает необходимый конструктор форм и палитру инструментов в зависимости от выбора типа приложения.

Создание простейшего приложения VCL Forms Application

Сценарий создания приложения типа Windows VCL Application таков:


  1. Выберите опции меню File=>New=>Windows VCL Application.
  2. Если необходимо, можно изменить размеры формы приложения при помощи стрелок конструктора форм ( ).
  3. Выберите с формы Tool Palette компонент Button и поместите его на форму приложения, изменив в случае необходимости размеры экземпляра и его свойство Caption.
  4. Дважды щелкните по экземпляру Button, положенному на форму. Управление передастся кодовому редактору Code Editor, который сгенерирует каркас процедуры.
  5. Вручную введите код: ShowMessage('Здравствуй, разработчик!');
  6. После сохранения и выполнения проекта на экране монитора вы увидите окно приложения.



Как видно из вышеприведенных форм приложений, несмотря на мелкие отличия, в целом функциональность одинаковая. Отметим также, что в процессе конструирования приложений наборы компонентов, доступных для использования, также различаются. Кроме того, в Delphi 8 имеются и некоторые иные, по сравнению с Delphi 7, языковые конструкции, которые представлены в таблице.

Основные различия в синтаксисе языков Delphi 7 и Delphi 8

Создание консольных приложений

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



writeln('Hello, Win32 world!');

writeln('Hello, Linux world!');

ReadLn; //чтобы задержать выполнение

Следующий пример — консольное приложение, работающее с файлами:

2. В секции реализации автоматически сгенерированного каркаса приложения вставьте код.

WriteLn ('Демонстрашка работы с файлами!');

WriteLn(FT, 'Hello, developer!');

3. После сохранения и выполнения проекта на экране монитора появится окно приложения.


Отметим два момента, связанных с этим приложением.

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

Создание приложений с базами данных

  1. Выберите опции меню File=>New=>Windows Forms Application.
  2. Перенесите экземпляр компонента BdpDataAdapter на форму с формы Tool Palette из раздела Borland Data Provider. При этом в Object Inspector появятся свойства этого класса. В отличие от предыдущих версий Delphi, невизуальные компоненты представлены не пиктограммой на форме приложения, а в специально отведенном окне среды разработки.



В результате этих действий появится новое диалоговое окно Connection Editor. Альтернативой является использование Data Explorer, в котором свойство Connection устанавливается автоматически.


При переносе приложения на другой компьютер важно, чтобы база данных employee.gdb лежала в определенном месте (например, d:/data) — иначе потребуется переопределять экземпляр компонента bdpConnection1.

Выравнивание таблицы относительно формы можно осуществить с помощью свойств Anchor и Dock.

При добавлении к проекту ссылок командой Add Reference… не допускается наличие пробелов в пути.


Задав в нем значение поля Name, определите имя и место расположения нового приложения. Нажав кнопку View Server Option, вы получите возможность ввода дополнительных параметров.



Вторая — в то же время в случае определения глобальной переменной, так как это было сделано в рассматриваемом проекте, при повторном вызове ресурса сохраняется ее предыдущее значение, а его сброс можно осуществить только применением утилит типа iisreset.exe.

Для переноса данного проекта на другую машину необходимо скопировать директорию HelloWorld в соответствующую директорию, описанную в IIS как виртуальный каталог.




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

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда не активна

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

Как написать этот код с нуля можно найти в Интернете (например, на этом форуме), здесь же я остановлюсь на компоненте TPipeConsole, который как раз и создан, чтобы перехватывать потоки ввода/вывода в Delphi. Причём он позволяет это делать комфортно.

(Старая версия. Лучше использовать версию Pipes.pas (Win32 и Win64), см. ниже). В юните реализация классов TPipeServer (Pipe-сервер), TPipeClient (Pipe-клиент) и TPipeConsole (класс для запуска консольных приложений, управления ими и перехвата потока вывода). Работает только на платформе Win32. Юнит с моими правками для работы с Delphi до версии XE3. Функция TPipeConsole.Execute с моими правками. Источник здесь.

Есть вариант юнита c поддержкой всех версий Delphi и платформы Win64:

Юнит Pipes.pas с примерами, с runttime и designtime библиотеками и поддержкой платформы Win64. В юните Pipes.pas реализация классов TPipeServer (Pipe-сервер), TPipeClient (Pipe-клиент) и TPipeConsole (класс для запуска консольных приложений, управления ими и перехвата потока вывода). Должна работать с Delphi всех версий, но тестирование не проводилось. Функция TPipeConsole.Execute с моими правками. Источник здесь.

27.04.2017 Добавлены мои правки в функции TPipeConsole.Execute и TPipeConsole.Start, чтобы параметр CommandLine 100%-но не был константой, чтобы избежать AV, см. MSDN.

Запуск консольного приложения и перехват потока ввода/вывода

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

Теперь сделаем проект оконного приложения, на форму положим компонент TRichEdit, растянем его на всю форму (Align -> alClient), включим вертикальную прокрутку (ScrollBars -> ssVertical). Теперь положим на форму компонент TPipeConsole и обработаем все его события:

Теперь по событию формы OnCreate сделаем запуск нашего консольного приложения:

Выполним наше оконное приложение. Вот результат:

Результат выполнения консольного приложения

Результат выполнения консольного приложения

Также здесь я отмечу, что мы использовали асинхронное выполнение консольного приложения. Если вам нужно выполнить консольное приложение синхронно, то нужно воспользоваться функцией Execute.

Как видите, консольное приложение ждёт число в интервале от 0 до 9, чтобы вычислить квадрат этого числа. Значит нужно передать консольному приложению число:

Результат приёма данных консольным приложением

Попробуем теперь передать строку вместо числа:

И, после запуска, увидим ошибку:

Результат приёма данных консольным приложением

Остановка консольного приложения

Теперь пара слов о том, как остановить консольное приложение, которое долго выполняется. Здесь есть 2 способа: прервать выполнение или оповестить приложение, что ему нужно завершить работу. Второй способ предпочтительнее, т.к. в этом случае консольное приложение перед завершением работы может освободить занимаемые ресурсы, удалить временные файлы и т.п.

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

Оповещение приложения можно сделать с помощью функций SendCtrlC и SendCtrlBreak. Вот пример вызова:

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

Теперь положим на форму нашего оконного приложения кнопку и по событию OnClick вызовем функцию SendCtrlC:

Результат останова консольного приложения

Как видите, ничего сложного нет. Единственный момент, который нужно учесть, вызов функции Ctrl_Handler в консольном приложении происходит в отдельном потоке, поэтому при работе с глобальными переменными нужно использовать критические секции, чего в примере не сделано, чтобы не замусоривать код примера.

Итак, как вы убедились, с помощью компонента TPipeConsole можно легко контролировать консольное приложение, не углубляясь в тонкости этого процесса.

Создается консольное приложение с помощью команды File--> New Other Application. На вкладке New появившегося диалогового окна New Items необходимо выбрать тип создаваемого приложения - Console Applications.

В результате этих действий на экране появится окно Project.dpr, в котором находится шаблон главной процедуры консольного приложения. В этом окне можно набирать инструкции программы.



Начинается консольное приложение инструкцией program, за которой следует имя программы. Сначала оно совпадает с именем проекта "по умолчанию". В момент сохранения проекта оно автоматически заменяется на имя, под которым программист сохранит проект.

writeln(Rus("У лукогморья дуб зеленый")).

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

Компиляция консольного приложения выполняется обычным образом, т.е. выбором из меню Project команды Compile. После успешной компиляции программа может быть запущена выбором из меню Run команды Run. При запуске консольного приложения на экране появляется стандартное окно DOS - программы.

Процесс сохранения проекта консольного приложения стандартный. В результате выбора из меню File команды Save на экране появляется диалоговое окно Save Project, в котором нужно ввести имя проекта.

Тема 2.12 Использование динамической памяти в приложениях

1. Динамические структуры данных. Указатели.

2. Динамические переменные.

Динамические структуры данных. Указатели

Данные, описываемые стандартным образом в разделе описания переменных, имеют статистическую, неизменяемую во время исполнения программы структуру. Во время работы программы изменяются только значения переменных, в то время как количество переменных всегда остается постоянным (отсюда и название - статистические структуры). Это не всегда удобно.

Задачи, обрабатывающие данные, которые по своей природе являются динамическими, удобно решать с помощью динамических структур.

Для создания динамических структур используются переменные специального типа - указатели.

Указатель - это переменная, значением которой является адрес другой переменой или структуры данных.


Указатель, как и любая другая переменная программы, должен быть объявлен в разделе объявления переменных. В общем виде объявления указатели выглядят следующим образом:

имя- имя переменной указателя;

Тип- тип переменной, на которую указывает переменная- указатель;

значок ^ показывает, что объявляемая переменная является указателем.

Приведем примеры объявлений указателей:

В приведенном примере переменная p1- это указатель на переменную типа integer, а p2- указатель на переменную типа real.

Тип переменной, на которую ссылается указатель, называют типом указателя. Например, если в программе объявлен указатель p:^integer, то говорят: ^p- указатель целого типа "или "p- это указатель на целое".

В начале работы программы переменная- указатель "ни на что не указывает". В этом случае говорят, что значение указателя равно NIL. Зарезервированное слово NIL соответствует значению указателя, который ни на что не указывает.

Идентификатор NIL можно использовать в инструкциях присваивания и в условиях. Например, если переменные pi и p2 объявлены как указатели, то инструкция p1:=NIL; устанавливает значение переменной, а инструкция if p2 = NIL then Show Message (' Указатель p2 не инициализирован!'); проверяет, инициализирован ли указатель p2.

Указателю можно присвоить значение- адрес переменной соответствующего типа ( в тексте программы адрес переменной- это имя переменной, перед которым стоит оператор @). Ниже приведена инструкция, после выполнения которой переменная p будет содержать адрес переменной п.

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

Указатель можно использовать для доступа к переменной, адрес которой содержит указатель.

Динамические переменные

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

Выделение памяти для динамической переменной осуществляется вызовом процедуры new. У процедуры new один параметр- указатель на переменную того типа, память для которой надо выделить. Например, если p является указателем на тип real, то в результате выполнения процедуры new(p); будет выделена память для переменной типа real (создана переменная типа real) , и переменная- указатель p будет содержать адрес памяти, выделенной для этой переменной.

У динамической переменной нет имени, поэтому обратится к ней можно только при помощи указателя.

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

Например, если p- указатель на динамическую переменную, память для которой выделена инструкцией new(p) , то инструкция dispose(p) освобождает занимаемую динамической переменной память.

Списки

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


Каждый элемент списка (узел) представляет собой запись, состоящую из двух частей. Первая часть- информационная. Вторая часть отвечает за связь со следующим и, возможно, с предыдущим элементом списка. Список, в котором обеспечивается связь только со следующим элементом, называется односвязным.

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

TPStudent=^TStudent;// указатель на переменную типа TStudent// описание типа элемента списка

group:integer;// номер группы

address:string[60];// домашний адрес

next:TPStudent;// указатель на следующий элемент списка

head: TPStudent;// указатель на первый элемент списка

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


Как правило, списки упорядочены. Порядок следования элементов в списке определяется содержимым одного из полей. Например, список с информацией о людях обычно упорядочены по полю, содержащему фамилии.

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


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


Поскольку узел является динамической переменной, то после исключения узла из списка занимаемая им память должна быть освобождена. Освобождение динамической памяти, или, как иногда говорят "уничтожение переменной", выполняется вызовом процедуры dispose. У процедуры dispose один параметр-указатель на динамическую переменную. Память, занимаемая этой динамической переменной, должна быть освобождена.

© 2014-2022 — Студопедия.Нет — Информационный студенческий ресурс. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав (0.006)

Читайте также: