Использование PHP-like операций с массивамиDelphi — среда быстрой разработки, где в качестве языка программирования используется Object Pascal. На сегодняшний день позволяет разрабатывать ПО для Microsoft Windows, Mac OS, iOS и Android и входит в состав Embarcadero RAD Studiohttps://delphi-hlp.ru/index.php/rabota-s-massivami/ispolzovanie-php-like-operatsij-s-massivami.feed2022-09-13T05:38:22+07:00Delphi helpinfo@delphi-hlp.ruJoomla! - Open Source Content ManagementTComponent2017-07-17T21:52:58+07:002017-07-17T21:52:58+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tcomponent.htmlSuper Usertoto44@inbox.ru<p>Класс TComponent является предком всех компонентов VCL. Он используется в качестве основы для создания невизуальных компонентов и реализует основные механизмы, которые обеспечивают функционирование любого компонента. В нем появляются первые свойства, которые отображаются в Инспекторе объектов. Это свойство</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tcomponent.html">Подробнее...</a></p><p>Класс TComponent является предком всех компонентов VCL. Он используется в качестве основы для создания невизуальных компонентов и реализует основные механизмы, которые обеспечивают функционирование любого компонента. В нем появляются первые свойства, которые отображаются в Инспекторе объектов. Это свойство</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tcomponent.html">Подробнее...</a></p>TControl2017-07-18T16:04:22+07:002017-07-18T16:04:22+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tcontrol.htmlSuper Usertoto44@inbox.ru<p>Класс TControi является базовым для всех визуальных компонентов и инкапсулирует механизмы отображения компонента на экране. В нем используется множество новых свойств и методов. Недаром в Delphi в Инспекторе объектов появилась категоризация методов и свойств (рис. 2.2). Большинство из них вводятся как раз в классах TControl и TWinControl.</p><p>Класс TControi является базовым для всех визуальных компонентов и инкапсулирует механизмы отображения компонента на экране. В нем используется множество новых свойств и методов. Недаром в Delphi в Инспекторе объектов появилась категоризация методов и свойств (рис. 2.2). Большинство из них вводятся как раз в классах TControl и TWinControl.</p>TCustomControl2017-07-18T18:49:05+07:002017-07-18T18:49:05+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tcustomcontrol.htmlSuper Usertoto44@inbox.ru<p>Класс TCustomControl предназначен для создания на его основе нестандартных оконных элементов управления. Процесс визуализации в нем упрощен за счет использования специального класса TCanvas, инкапсулирующего канву (см. гл. 11).</p>
<p> </p>
<p>Доступ к канве осуществляется через свойство</p>
<p> </p>
<p>property Canvas: TCanvas;</p>
<p> </p>
<p>Отрисовка элемента управления осуществляется методом</p>
<p> </p>
<p>procedure PaintWindowfDC: HDC); override;</p>
<p> </p>
<p>после получения сообщения WM_PAINT.</p>
<p> </p>
<p>Возможности этого класса унаследовали классы TPanel, TGroupBox, TStringGrid и т. д.</p><p>Класс TCustomControl предназначен для создания на его основе нестандартных оконных элементов управления. Процесс визуализации в нем упрощен за счет использования специального класса TCanvas, инкапсулирующего канву (см. гл. 11).</p>
<p> </p>
<p>Доступ к канве осуществляется через свойство</p>
<p> </p>
<p>property Canvas: TCanvas;</p>
<p> </p>
<p>Отрисовка элемента управления осуществляется методом</p>
<p> </p>
<p>procedure PaintWindowfDC: HDC); override;</p>
<p> </p>
<p>после получения сообщения WM_PAINT.</p>
<p> </p>
<p>Возможности этого класса унаследовали классы TPanel, TGroupBox, TStringGrid и т. д.</p>TGraphicControl2017-07-18T21:04:56+07:002017-07-18T21:04:56+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tgraphiccontrol.htmlSuper Usertoto44@inbox.ru<p>Класс TGraphicControl предназначен для создания на его основе визуальных компонентов, не получающих фокус в процессе выполнения приложения. Так как непосредственным предком класса является класс TControl, то потомки TGraphicControl умеют реагировать на управляющие воздействия мышью.</p>
<p> </p>
<p>Наглядный пример элемента управления, которому не нужно получать фокус, — это компонент TLabel, предназначенный для отображения текста, или компонент Timage, предназначенный для визуализации изображений.</p>
<p> </p>
<p>Для визуализации элементов управления на основе этого класса используется канва, инкапсулированная в классе TCanvas.</p>
<p> </p>
<p>Доступ к канве осуществляется через свойство</p>
<p> </p>
<p>property Canvas: TCanvas;</p>
<p> </p>
<p>Отрисовка элемента управления осуществляется методом</p>
<p> </p>
<p>procedure PaintWindow(DC: HDC); override;</p>
<p> </p>
<p>после получения сообщения WM_PAINT.</p><p>Класс TGraphicControl предназначен для создания на его основе визуальных компонентов, не получающих фокус в процессе выполнения приложения. Так как непосредственным предком класса является класс TControl, то потомки TGraphicControl умеют реагировать на управляющие воздействия мышью.</p>
<p> </p>
<p>Наглядный пример элемента управления, которому не нужно получать фокус, — это компонент TLabel, предназначенный для отображения текста, или компонент Timage, предназначенный для визуализации изображений.</p>
<p> </p>
<p>Для визуализации элементов управления на основе этого класса используется канва, инкапсулированная в классе TCanvas.</p>
<p> </p>
<p>Доступ к канве осуществляется через свойство</p>
<p> </p>
<p>property Canvas: TCanvas;</p>
<p> </p>
<p>Отрисовка элемента управления осуществляется методом</p>
<p> </p>
<p>procedure PaintWindow(DC: HDC); override;</p>
<p> </p>
<p>после получения сообщения WM_PAINT.</p>TList2017-07-17T21:06:40+07:002017-07-17T21:06:40+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tlist.htmlSuper Usertoto44@inbox.ru<p>Класс TList</p>
<p>Класс TList — универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются — эта обязанность лежит на программисте.</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tlist.html">Подробнее...</a></p><p>Класс TList</p>
<p>Класс TList — универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются — эта обязанность лежит на программисте.</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tlist.html">Подробнее...</a></p>TObject2017-07-17T21:15:35+07:002017-07-17T21:15:35+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tobject.htmlSuper Usertoto44@inbox.ru<p>Класс TObject</p>
<p> </p>
<p>Класс TObject является родоначальником всей иерархии использующихся в Delphi классов VCL. Он реализует функции, которые обязательно будет выполнять любой объект, который может быть создан в среде разработки. Учитывая гигантское разнообразие возможных областей применения объектов в процессе создания приложений, можно сказать, что круг общих для всех классов операций весьма невелик.</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tobject.html">Подробнее...</a></p><p>Класс TObject</p>
<p> </p>
<p>Класс TObject является родоначальником всей иерархии использующихся в Delphi классов VCL. Он реализует функции, которые обязательно будет выполнять любой объект, который может быть создан в среде разработки. Учитывая гигантское разнообразие возможных областей применения объектов в процессе создания приложений, можно сказать, что круг общих для всех классов операций весьма невелик.</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tobject.html">Подробнее...</a></p>TPersistent2017-07-17T21:32:25+07:002017-07-17T21:32:25+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tpersistent.htmlSuper Usertoto44@inbox.ru<p>"Persistent" в переводе с английского означает "устойчивый", "постоянный". Что же такого постоянного в одноименном классе? Ответ таков: виртуальный метод</p>
<p> procedure Assign(Source: TPersistent);</p>
<p> </p>
<p>Этот важнейший метод осуществляет копирование содержимого одного объекта (source) в другой (self, т. е. в объект, вызвавший метод Assign). При этом объект-получатель остается самим собой, чего нельзя достигнуть, используя простое присваивание переменных объектного типа:</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tpersistent.html">Подробнее...</a></p><p>"Persistent" в переводе с английского означает "устойчивый", "постоянный". Что же такого постоянного в одноименном классе? Ответ таков: виртуальный метод</p>
<p> procedure Assign(Source: TPersistent);</p>
<p> </p>
<p>Этот важнейший метод осуществляет копирование содержимого одного объекта (source) в другой (self, т. е. в объект, вызвавший метод Assign). При этом объект-получатель остается самим собой, чего нельзя достигнуть, используя простое присваивание переменных объектного типа:</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tpersistent.html">Подробнее...</a></p>TStream несколько функций2017-07-20T20:59:37+07:002017-07-20T20:59:37+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tstream.htmlSuper Usertoto44@inbox.ru<p> </p>
<p> </p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">Класс TStream не нов для библиотек фирмы Borland; он и его потомки называются </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-style: italic;">потоками.</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> Со времен появления в библиотеке Turbo Vision он не претерпел существенных изменений, но теперь потоки стали обязательными составными частями там, где нужно прочитать или передать во внешний источник какую-либо информацию.</span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">TStream "является абстрактной моделью совокупности данных, обладающей двумя свойствами </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">—</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> длиной Size и положением текущего элемента Position:</span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-weight: bold;"> </span></p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tstream.html">Подробнее...</a></p><p> </p>
<p> </p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">Класс TStream не нов для библиотек фирмы Borland; он и его потомки называются </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-style: italic;">потоками.</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> Со времен появления в библиотеке Turbo Vision он не претерпел существенных изменений, но теперь потоки стали обязательными составными частями там, где нужно прочитать или передать во внешний источник какую-либо информацию.</span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">TStream "является абстрактной моделью совокупности данных, обладающей двумя свойствами </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">—</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> длиной Size и положением текущего элемента Position:</span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-weight: bold;"> </span></p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tstream.html">Подробнее...</a></p>TStrings и TStringList2017-07-20T21:18:52+07:002017-07-20T21:18:52+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/tstrings-i-tstringlist.htmlSuper Usertoto44@inbox.ru<h2> </h2>
<p style="text-align: center;"><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-weight: bold;">Класс TStrings</span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-style: italic; font-weight: bold;"> </span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">Многофункциональный класс, предназначенный для хранения текстовых строк и связанных с ними объектов (любых потомков TObject). TStrings </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">—</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> абстрактный класс; он только описывает методы работы с наборами строк и сопутствующих им объектов, но как именно они хранятся, на его уровне не определено. Его потомки очень многочисленны; они играют основную роль в компонентах-списках (TListBox, TComboBox), редакторе (TMemo) и других. Так что вам чаще всего придется иметь дело с TStrings как со свойством одного из компонентов. В дальнейшем экземпляры этого класса и порожденных от него классов мы-будем называть </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-style: italic;">наборами строк.</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> Для создания собственных наборов строк вне компонентов предназначен потомок TStrings </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">—</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> TStringList, который будет рассмотрен ниже.</span></p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tstrings-i-tstringlist.html">Подробнее...</a></p><h2> </h2>
<p style="text-align: center;"><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-weight: bold;">Класс TStrings</span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-style: italic; font-weight: bold;"> </span></p>
<p><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">Многофункциональный класс, предназначенный для хранения текстовых строк и связанных с ними объектов (любых потомков TObject). TStrings </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">—</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> абстрактный класс; он только описывает методы работы с наборами строк и сопутствующих им объектов, но как именно они хранятся, на его уровне не определено. Его потомки очень многочисленны; они играют основную роль в компонентах-списках (TListBox, TComboBox), редакторе (TMemo) и других. Так что вам чаще всего придется иметь дело с TStrings как со свойством одного из компонентов. В дальнейшем экземпляры этого класса и порожденных от него классов мы-будем называть </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt; font-style: italic;">наборами строк.</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> Для создания собственных наборов строк вне компонентов предназначен потомок TStrings </span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;">—</span><span style="color: #000000; font-family: 'Times New Roman'; font-size: 11pt;"> TStringList, который будет рассмотрен ниже.</span></p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/tstrings-i-tstringlist.html">Подробнее...</a></p>TWinControl2017-07-18T16:06:56+07:002017-07-18T16:06:56+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/twincontrol.htmlSuper Usertoto44@inbox.ru<p>Класс TWinControl обеспечивает создание и использование оконных элементов управления (см. выше). Напомним, что оконный элемент управления имеет системный дескриптор окна hwnd. Однако оконными элементами являются не только формы и диалоги, но и большинство стандартных элементов управления.</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/twincontrol.html">Подробнее...</a></p><p>Класс TWinControl обеспечивает создание и использование оконных элементов управления (см. выше). Напомним, что оконный элемент управления имеет системный дескриптор окна hwnd. Однако оконными элементами являются не только формы и диалоги, но и большинство стандартных элементов управления.</p>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/twincontrol.html">Подробнее...</a></p>Глобальный объект Clipboard2017-07-18T21:10:16+07:002017-07-18T21:10:16+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/globalnyj-ob-ekt-clipboard.htmlSuper Usertoto44@inbox.ru<p>Последний глобальный объект, который мы рассмотрим в этой статье будет объект Clipboard, необходимый для работы с буфером обмена. Для того, чтобы начатьработу с этим объектом, необходимо в разделе Uses указать модуль Clipbrd. У этого объекта всего три свойства:</p>
<div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr align="left" valign="top">
<td valign="middle" bgcolor="#ffffff" width="312">
<p>Свойство</p>
</td>
<td valign="middle" bgcolor="#ffffff" width="312">
<p>Описание</p>
</td>
</tr>
<tr align="left" valign="top">
<td valign="middle" width="312">
<p>AsText: string</p>
</td>
<td valign="middle" width="312">
<p>Используется для обмена информацией втекстовом виде.</p>
</td>
</tr>
<tr align="left" valign="top">
<td valign="middle" width="312">
<p>FormatCount: integer</p>
</td>
<td valign="middle" width="312">
<p>Содержит общее число форматов, которыенаходятся в буфере обмена в данный момент.</p>
</td>
</tr>
<tr align="left" valign="top">
<td valign="middle" width="312">
<p>Formats [Index: Integer]: Word</p>
</td>
<td valign="middle" width="312">
<p>Содержит значения идентификаторовформата, Index[0..FormatCount-1].</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Например, чтобы при загрузке программы, в Memo помещался текст из буфера обмена, в обработчике формы OnCreate, нужно написать следующее:</p>
<p class="p_CodeExample"><span class="f_CodeExample">Memo1.Text:=Clipboard.AsText;</span></p>
<p>Для работы с буфером обмена существует ряд методов. Для очистки буфера используется метод Clear, для того, чтобы поместить в буфер изображение (*.BMP или *.WMF) нужно воспользоваться методом Assign (Source: TPersistent).</p>
<p>(С) Автор статьи: Михаил Христосенко // Development и Дельфи (https://delphid.dax.ru/).</p><p>Последний глобальный объект, который мы рассмотрим в этой статье будет объект Clipboard, необходимый для работы с буфером обмена. Для того, чтобы начатьработу с этим объектом, необходимо в разделе Uses указать модуль Clipbrd. У этого объекта всего три свойства:</p>
<div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr align="left" valign="top">
<td valign="middle" bgcolor="#ffffff" width="312">
<p>Свойство</p>
</td>
<td valign="middle" bgcolor="#ffffff" width="312">
<p>Описание</p>
</td>
</tr>
<tr align="left" valign="top">
<td valign="middle" width="312">
<p>AsText: string</p>
</td>
<td valign="middle" width="312">
<p>Используется для обмена информацией втекстовом виде.</p>
</td>
</tr>
<tr align="left" valign="top">
<td valign="middle" width="312">
<p>FormatCount: integer</p>
</td>
<td valign="middle" width="312">
<p>Содержит общее число форматов, которыенаходятся в буфере обмена в данный момент.</p>
</td>
</tr>
<tr align="left" valign="top">
<td valign="middle" width="312">
<p>Formats [Index: Integer]: Word</p>
</td>
<td valign="middle" width="312">
<p>Содержит значения идентификаторовформата, Index[0..FormatCount-1].</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Например, чтобы при загрузке программы, в Memo помещался текст из буфера обмена, в обработчике формы OnCreate, нужно написать следующее:</p>
<p class="p_CodeExample"><span class="f_CodeExample">Memo1.Text:=Clipboard.AsText;</span></p>
<p>Для работы с буфером обмена существует ряд методов. Для очистки буфера используется метод Clear, для того, чтобы поместить в буфер изображение (*.BMP или *.WMF) нужно воспользоваться методом Assign (Source: TPersistent).</p>
<p>(С) Автор статьи: Михаил Христосенко // Development и Дельфи (https://delphid.dax.ru/).</p>Глобальный объект Screen2017-07-18T21:08:33+07:002017-07-18T21:08:33+07:00https://delphi-hlp.ru/index.php/bazovye-klassy/globalnyj-ob-ekt-screen.htmlSuper Usertoto44@inbox.ru<p>Этот объект инкапсулирует свойства дисплея. У него очень много свойств, но мы посмотрим только некоторые из них. Вам, наверно, часто приходилось встречать такую вещь: когда программа выполняет какую-нибудь долгую операцию, курсор над формой изменяет свой вид, а потом, когда операция выполнена, становится нормальным. Чтобы реализовать эту штуку, нам придется воспользоваться свойством Cursor, объекта Screen. Это свойство отвечает за вид курсора над вашим приложением. Тогда общий вид какой-нибудь процедуры может быть таким:</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/globalnyj-ob-ekt-screen.html">Подробнее...</a></p><p>Этот объект инкапсулирует свойства дисплея. У него очень много свойств, но мы посмотрим только некоторые из них. Вам, наверно, часто приходилось встречать такую вещь: когда программа выполняет какую-нибудь долгую операцию, курсор над формой изменяет свой вид, а потом, когда операция выполнена, становится нормальным. Чтобы реализовать эту штуку, нам придется воспользоваться свойством Cursor, объекта Screen. Это свойство отвечает за вид курсора над вашим приложением. Тогда общий вид какой-нибудь процедуры может быть таким:</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/bazovye-klassy/globalnyj-ob-ekt-screen.html">Подробнее...</a></p>Передача массива записей символов в Memo 2013-11-26T15:32:47+07:002013-11-26T15:32:47+07:00https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/peredacha-massiva-zapisej-simvolov-v-memo.htmlSuper Usertoto44@inbox.ru<p>Обработка больших строк в 16-битной версии Delphi задача далеко непростая. Особенно когда строки являются частью структуры записи и вы хотите передать их в TMemo. В данном совете показано как создать структуру записи размером 1000 символов, прочесть в нее содержимое Memo и затем записать ее обратно в Memo. Основной метод, который мы здесь используем - метод Memo GetTextBuf. Используемая структура записи представляет собой простую строку и массив из 1000 символов, но структура могла бы быть сложнее.</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/peredacha-massiva-zapisej-simvolov-v-memo.html">Подробнее...</a></p><p>Обработка больших строк в 16-битной версии Delphi задача далеко непростая. Особенно когда строки являются частью структуры записи и вы хотите передать их в TMemo. В данном совете показано как создать структуру записи размером 1000 символов, прочесть в нее содержимое Memo и затем записать ее обратно в Memo. Основной метод, который мы здесь используем - метод Memo GetTextBuf. Используемая структура записи представляет собой простую строку и массив из 1000 символов, но структура могла бы быть сложнее.</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/peredacha-massiva-zapisej-simvolov-v-memo.html">Подробнее...</a></p>Получить текст элемента перечисляемого типа 2013-11-03T03:23:22+07:002013-11-03T03:23:22+07:00https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/poluchit-tekst-elementa-perechislyaemogo-tipa.htmlSuper Usertoto44@inbox.ru<div style="margin: 0px; padding: 0px; text-align: left; text-indent: 0px;">
<table style="border-width: 1px; border-style: solid; border-color: #000000 #c0c0c0 #c0c0c0 #000000; border-spacing: 0px; background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4">
<tbody>
<tr align="left" valign="top">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p style="text-align: justify;"><span style="color: #000000; font-family: 'Times New Roman'; font-weight: bold;">Code:</span></p>
</td>
</tr>
<tr align="left">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// For example, if you have some enum type</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Als Beispiel, wenn dieser Aufzahlungstyp vorhanden ist</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{....}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TYourEnumType = (One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten);</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{....}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{ </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;"> And you want in run-time to get a string with same value for each of </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;"> them (for example, fill the Listbox items with enum values), then you </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;"> can use the next procedure: </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> TypInfo;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject); </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> i: Integer; </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> i := Ord(Low(TYourEnumType)) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Ord(High(TYourEnumType)) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ListBox1.Items.Add(GetEnumName(TypeInfo(TYourEnumType), i)); </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
</td>
</tr>
</tbody>
</table>
</div><div style="margin: 0px; padding: 0px; text-align: left; text-indent: 0px;">
<table style="border-width: 1px; border-style: solid; border-color: #000000 #c0c0c0 #c0c0c0 #000000; border-spacing: 0px; background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4">
<tbody>
<tr align="left" valign="top">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p style="text-align: justify;"><span style="color: #000000; font-family: 'Times New Roman'; font-weight: bold;">Code:</span></p>
</td>
</tr>
<tr align="left">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// For example, if you have some enum type</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Als Beispiel, wenn dieser Aufzahlungstyp vorhanden ist</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{....}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TYourEnumType = (One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten);</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{....}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{ </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;"> And you want in run-time to get a string with same value for each of </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;"> them (for example, fill the Listbox items with enum values), then you </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;"> can use the next procedure: </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> TypInfo;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject); </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> i: Integer; </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> i := Ord(Low(TYourEnumType)) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Ord(High(TYourEnumType)) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ListBox1.Items.Add(GetEnumName(TypeInfo(TYourEnumType), i)); </span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
</td>
</tr>
</tbody>
</table>
</div>Пример переменной записи 2013-11-26T16:03:09+07:002013-11-26T16:03:09+07:00https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/primer-peremennoj-zapisi.htmlSuper Usertoto44@inbox.ru<p style="text-align: justify; margin: 7px 0px 7px 0px;">В Delphi 2.0 я пытаюсь прочесть текстовый файл и получаю проблему. Текстовый файл, который я хочу прочесть, имеет записи фиксированной длины, но в самих записях могут располагаться различные типы с различной длиной, и оканчиваться в различных позициях, в зависимости от типа.</p>
<p> Файл выглядит примерно так:</p>
<p> TFH.......<First record type, первый тип записи></p>
<p>TBH.......<Second record type, второй тип записи></p>
<p>TAB........<Third record type, третий тип записи></p>
<p>TAA........<Fourth record type, четвертый тип записи></p>
<p> Вы можете поймать больше одного зайца в случае объявления переменной записи, но если сделаете это правильно.</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/primer-peremennoj-zapisi.html">Подробнее...</a></p><p style="text-align: justify; margin: 7px 0px 7px 0px;">В Delphi 2.0 я пытаюсь прочесть текстовый файл и получаю проблему. Текстовый файл, который я хочу прочесть, имеет записи фиксированной длины, но в самих записях могут располагаться различные типы с различной длиной, и оканчиваться в различных позициях, в зависимости от типа.</p>
<p> Файл выглядит примерно так:</p>
<p> TFH.......<First record type, первый тип записи></p>
<p>TBH.......<Second record type, второй тип записи></p>
<p>TAB........<Third record type, третий тип записи></p>
<p>TAA........<Fourth record type, четвертый тип записи></p>
<p> Вы можете поймать больше одного зайца в случае объявления переменной записи, но если сделаете это правильно.</p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/primer-peremennoj-zapisi.html">Подробнее...</a></p>Проблема передачи записи2013-11-05T12:11:18+07:002013-11-05T12:11:18+07:00https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/problema-peredachi-zapisi.htmlSuper Usertoto44@inbox.ru<p style="text-align: justify; margin: 7px 0px;"> Может это не то, что вы ищете, но идея такая:</p>
<p> Определите базовый класс с именем, скажем, allrecs:</p>
<div style="text-align: justify; text-indent: 0px; padding: 0px; margin: 7px 0px;">
<table style="background-color: #ffffc4; border-color: #000000 #c0c0c0 #c0c0c0 #000000; border-style: solid; border-width: 1px; border-spacing: 0px;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4">
<tbody>
<tr align="left" valign="top">
<td style="border-color: #c0c0c0 #000000 #000000 #c0c0c0; border-style: solid; border-width: 1px;">
<p style="text-align: justify;"><span style="font-family: 'Times New Roman'; font-weight: bold; color: #000000;">Code:</span></p>
</td>
</tr>
<tr align="left">
<td style="border-color: #c0c0c0 #000000 #000000 #c0c0c0; border-style: solid; border-width: 1px;">
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">tAllrecs = </span><span class="f_CodeExample" style="font-weight: bold; color: #008000;">class</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="font-weight: bold; color: #008000;">function</span><span class="f_CodeExample" style="color: #000000;"> getVal (field: integer): </span><span class="f_CodeExample" style="font-weight: bold; color: #008000;">string</span><span class="f_CodeExample" style="color: #000000;">; </span><span class="f_CodeExample" style="font-weight: bold; color: #008000;">virtual</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="font-weight: bold; color: #008000;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/problema-peredachi-zapisi.html">Подробнее...</a></p><p style="text-align: justify; margin: 7px 0px;"> Может это не то, что вы ищете, но идея такая:</p>
<p> Определите базовый класс с именем, скажем, allrecs:</p>
<div style="text-align: justify; text-indent: 0px; padding: 0px; margin: 7px 0px;">
<table style="background-color: #ffffc4; border-color: #000000 #c0c0c0 #c0c0c0 #000000; border-style: solid; border-width: 1px; border-spacing: 0px;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4">
<tbody>
<tr align="left" valign="top">
<td style="border-color: #c0c0c0 #000000 #000000 #c0c0c0; border-style: solid; border-width: 1px;">
<p style="text-align: justify;"><span style="font-family: 'Times New Roman'; font-weight: bold; color: #000000;">Code:</span></p>
</td>
</tr>
<tr align="left">
<td style="border-color: #c0c0c0 #000000 #000000 #c0c0c0; border-style: solid; border-width: 1px;">
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">tAllrecs = </span><span class="f_CodeExample" style="font-weight: bold; color: #008000;">class</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="font-weight: bold; color: #008000;">function</span><span class="f_CodeExample" style="color: #000000;"> getVal (field: integer): </span><span class="f_CodeExample" style="font-weight: bold; color: #008000;">string</span><span class="f_CodeExample" style="color: #000000;">; </span><span class="f_CodeExample" style="font-weight: bold; color: #008000;">virtual</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="font-weight: bold; color: #008000;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/problema-peredachi-zapisi.html">Подробнее...</a></p>Сохранение типа данных множество (TFontStyles) 2013-11-03T03:25:38+07:002013-11-03T03:25:38+07:00https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/sokhranenie-tipa-dannykh-mnozhestvo-tfontstyles.htmlSuper Usertoto44@inbox.ru<div style="margin: 0px; padding: 0px; text-align: left; text-indent: 0px;">
<table style="border-width: 1px; border-style: solid; border-color: #000000 #c0c0c0 #c0c0c0 #000000; border-spacing: 0px; background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4">
<tbody>
<tr align="left" valign="top">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p style="text-align: justify;"><span style="color: #000000; font-family: 'Times New Roman'; font-weight: bold;">Code:</span></p>
</td>
</tr>
<tr align="left">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{You do that simple by converting it to an integer, and then stores that:}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> pFontStyles = ^TFontStyles;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> pInteger = ^integer;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> FontStylesToInteger(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> Value : TFontStyles): integer;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := pInteger(@Value)^;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> IntegerToFontStyles(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> Value : integer): TFontStyles;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := pFontStyles(@Value)^;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
</td>
</tr>
</tbody>
</table>
</div><div style="margin: 0px; padding: 0px; text-align: left; text-indent: 0px;">
<table style="border-width: 1px; border-style: solid; border-color: #000000 #c0c0c0 #c0c0c0 #000000; border-spacing: 0px; background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4">
<tbody>
<tr align="left" valign="top">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p style="text-align: justify;"><span style="color: #000000; font-family: 'Times New Roman'; font-weight: bold;">Code:</span></p>
</td>
</tr>
<tr align="left">
<td style="border-width: 1px; border-style: solid; border-color: #c0c0c0 #000000 #000000 #c0c0c0;">
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{You do that simple by converting it to an integer, and then stores that:}</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> pFontStyles = ^TFontStyles;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> pInteger = ^integer;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> FontStylesToInteger(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> Value : TFontStyles): integer;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := pInteger(@Value)^;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> IntegerToFontStyles(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> Value : integer): TFontStyles;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := pFontStyles(@Value)^;</span></p>
<p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p>
</td>
</tr>
</tbody>
</table>
</div>Функции и процедуры для работы с данными перечислимого типа2013-11-03T03:36:50+07:002013-11-03T03:36:50+07:00https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/funktsii-i-protsedury-dlya-raboty-s-dannymi-perechislimogo-tipa.htmlSuper Usertoto44@inbox.ru<p><span style="color: #000000; font-weight: bold;">Dec</span><span style="color: #000000;"> Уменьшает значение переменной на заданную величину. </span></p>
<p><span style="color: #000000; font-weight: bold;">Inc</span><span style="color: #000000;"> Увеличивает значение переменной на заданную величину. </span></p>
<p><span style="color: #000000; font-weight: bold;">Odd</span><span style="color: #000000;"> Определяет четность аргумента. </span></p>
<p><span style="color: #000000; font-weight: bold;">Ord</span><span style="color: #000000;"> Возвращает порядковый номер выражения перечислимого типа или код ASCII выражения символьного типа. </span></p>
<p><span style="color: #000000; font-weight: bold;">Pred</span><span style="color: #000000;"> Возвращает значение, предшествующее аргументу. </span></p>
<p><span style="color: #000000; font-weight: bold;">Succ</span><span style="color: #000000;"> Возвращает значение, следующее за аргументом. </span></p><p><span style="color: #000000; font-weight: bold;">Dec</span><span style="color: #000000;"> Уменьшает значение переменной на заданную величину. </span></p>
<p><span style="color: #000000; font-weight: bold;">Inc</span><span style="color: #000000;"> Увеличивает значение переменной на заданную величину. </span></p>
<p><span style="color: #000000; font-weight: bold;">Odd</span><span style="color: #000000;"> Определяет четность аргумента. </span></p>
<p><span style="color: #000000; font-weight: bold;">Ord</span><span style="color: #000000;"> Возвращает порядковый номер выражения перечислимого типа или код ASCII выражения символьного типа. </span></p>
<p><span style="color: #000000; font-weight: bold;">Pred</span><span style="color: #000000;"> Возвращает значение, предшествующее аргументу. </span></p>
<p><span style="color: #000000; font-weight: bold;">Succ</span><span style="color: #000000;"> Возвращает значение, следующее за аргументом. </span></p>Что такое множества?2013-11-03T03:17:03+07:002013-11-03T03:17:03+07:00https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/chto-takoe-mnozhestva.htmlSuper Usertoto44@inbox.ru<p style="margin: 7px 0px; text-align: justify;"><span style="color: #000000; font-weight: bold;">Множества</span><span style="color: #000000;"> - это наборы однотипных логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется Object Pascal. Количество элементов, входящих в множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Именно непостоянством количества своих элементов множества отличаются от массивов и записей. </span></p>
<p style="margin: 7px 0px; text-align: justify;"> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/chto-takoe-mnozhestva.html">Подробнее...</a></p><p style="margin: 7px 0px; text-align: justify;"><span style="color: #000000; font-weight: bold;">Множества</span><span style="color: #000000;"> - это наборы однотипных логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется Object Pascal. Количество элементов, входящих в множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Именно непостоянством количества своих элементов множества отличаются от массивов и записей. </span></p>
<p style="margin: 7px 0px; text-align: justify;"> </p>
<p class="feed-readmore"><a target="_blank" href ="/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/chto-takoe-mnozhestva.html">Подробнее...</a></p>Override/Vitual/Dynamic - методы 2013-08-19T15:51:52+07:002013-08-19T15:51:52+07:00https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/metody/override-vitual-dynamic-metody.htmlSuper Usertoto44@inbox.ru<p><span style="color: #000000;">Если метод в классе предка объявлен как виртуальный (virtual) или динамический (dynamic), вам необходимо перекрыть его во всех классах-наследниках. Если вы объявляете унаследованный метод виртуальным или динамическим, вы начинаете строить его новое виртуальное/динамическое дерево наследования. Допустим, у нас есть следующая иерархия: A (родитель) - B - C - D. Если вы объявляете метод как виртуальный (или динамический) в A, перекрываете в B, создаете виртуальным в C и перекрываете в D, вот что получается:</span></p>
<p> </p>
<p> </p>
<p><span style="color: #000000;">фактический класс, используемый класс, использующий</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">класс для доступа к методу метод</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">-----------+---------------------+--------------------</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D D D</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D C D</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D B B</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D A B</span></p>
<p> </p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> C C C</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> C B B</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> C A B</span></p>
<p> </p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> B B B</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> B A B</span></p>
<p> </p>
<p><span style="color: #000000;">Вывод: работа виртуального/динамического наследования прекращается в момент создания одноименного виртуального/динамического метода наследниками класса.</span></p>
<p><span style="color: #000000;">Mark </span></p>
<p> </p>
<p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p>
<p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от</span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p>
<p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p><p><span style="color: #000000;">Если метод в классе предка объявлен как виртуальный (virtual) или динамический (dynamic), вам необходимо перекрыть его во всех классах-наследниках. Если вы объявляете унаследованный метод виртуальным или динамическим, вы начинаете строить его новое виртуальное/динамическое дерево наследования. Допустим, у нас есть следующая иерархия: A (родитель) - B - C - D. Если вы объявляете метод как виртуальный (или динамический) в A, перекрываете в B, создаете виртуальным в C и перекрываете в D, вот что получается:</span></p>
<p> </p>
<p> </p>
<p><span style="color: #000000;">фактический класс, используемый класс, использующий</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">класс для доступа к методу метод</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">-----------+---------------------+--------------------</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D D D</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D C D</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D B B</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> D A B</span></p>
<p> </p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> C C C</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> C B B</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> C A B</span></p>
<p> </p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> B B B</span></p>
<p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;"> B A B</span></p>
<p> </p>
<p><span style="color: #000000;">Вывод: работа виртуального/динамического наследования прекращается в момент создания одноименного виртуального/динамического метода наследниками класса.</span></p>
<p><span style="color: #000000;">Mark </span></p>
<p> </p>
<p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p>
<p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от</span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p>
<p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p>