Функции и процедуры для финансовых вычислений Delphi — среда быстрой разработки, где в качестве языка программирования используется Object Pascal. На сегодняшний день позволяет разрабатывать ПО для Microsoft Windows, Mac OS, iOS и Android и входит в состав Embarcadero RAD Studio https://delphi-hlp.ru/index.php/rtl-delphi-kratkij-spravochnik/funktsii-i-protsedury-dlya-finansovykh-vychislenij.feed 2022-09-13T05:39:55+07:00 Delphi help info@delphi-hlp.ru Joomla! - Open Source Content Management TComponent 2017-07-17T21:52:58+07:00 2017-07-17T21:52:58+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tcomponent.html Super User toto44@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> TControl 2017-07-18T16:04:22+07:00 2017-07-18T16:04:22+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tcontrol.html Super User toto44@inbox.ru <p>Класс TControi является базовым для всех визуальных компонентов и инкапсулирует механизмы отображения компонента на экране. В нем используется множество новых свойств и методов. Недаром в Delphi в Инспекторе объектов появилась категоризация методов и свойств (рис. 2.2). Большинство из них вводятся как раз в классах TControl и TWinControl.</p> <p>Класс TControi является базовым для всех визуальных компонентов и инкапсулирует механизмы отображения компонента на экране. В нем используется множество новых свойств и методов. Недаром в Delphi в Инспекторе объектов появилась категоризация методов и свойств (рис. 2.2). Большинство из них вводятся как раз в классах TControl и TWinControl.</p> TCustomControl 2017-07-18T18:49:05+07:00 2017-07-18T18:49:05+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tcustomcontrol.html Super User toto44@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> TGraphicControl 2017-07-18T21:04:56+07:00 2017-07-18T21:04:56+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tgraphiccontrol.html Super User toto44@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> TList 2017-07-17T21:06:40+07:00 2017-07-17T21:06:40+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tlist.html Super User toto44@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> TObject 2017-07-17T21:15:35+07:00 2017-07-17T21:15:35+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tobject.html Super User toto44@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> TPersistent 2017-07-17T21:32:25+07:00 2017-07-17T21:32:25+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tpersistent.html Super User toto44@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:00 2017-07-20T20:59:37+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tstream.html Super User toto44@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 и TStringList 2017-07-20T21:18:52+07:00 2017-07-20T21:18:52+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/tstrings-i-tstringlist.html Super User toto44@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> TWinControl 2017-07-18T16:06:56+07:00 2017-07-18T16:06:56+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/twincontrol.html Super User toto44@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> Глобальный объект Clipboard 2017-07-18T21:10:16+07:00 2017-07-18T21:10:16+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/globalnyj-ob-ekt-clipboard.html Super User toto44@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> Глобальный объект Screen 2017-07-18T21:08:33+07:00 2017-07-18T21:08:33+07:00 https://delphi-hlp.ru/index.php/bazovye-klassy/globalnyj-ob-ekt-screen.html Super User toto44@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:00 2013-11-26T15:32:47+07:00 https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/peredacha-massiva-zapisej-simvolov-v-memo.html Super User toto44@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:00 2013-11-03T03:23:22+07:00 https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/poluchit-tekst-elementa-perechislyaemogo-tipa.html Super User toto44@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:00 2013-11-26T16:03:09+07:00 https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/primer-peremennoj-zapisi.html Super User toto44@inbox.ru <p style="text-align: justify; margin: 7px 0px 7px 0px;">В Delphi 2.0 я пытаюсь прочесть текстовый файл и получаю проблему. Текстовый файл, который я хочу прочесть, имеет записи фиксированной длины, но в самих записях могут располагаться различные типы с различной длиной, и оканчиваться в различных позициях, в зависимости от типа.</p> <p> Файл выглядит примерно так:</p> <p> TFH.......&lt;First record type, первый тип записи&gt;</p> <p>TBH.......&lt;Second record type, второй тип записи&gt;</p> <p>TAB........&lt;Third record type, третий тип записи&gt;</p> <p>TAA........&lt;Fourth record type, четвертый тип записи&gt;</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.......&lt;First record type, первый тип записи&gt;</p> <p>TBH.......&lt;Second record type, второй тип записи&gt;</p> <p>TAB........&lt;Third record type, третий тип записи&gt;</p> <p>TAA........&lt;Fourth record type, четвертый тип записи&gt;</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:00 2013-11-05T12:11:18+07:00 https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/problema-peredachi-zapisi.html Super User toto44@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:00 2013-11-03T03:25:38+07:00 https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/sokhranenie-tipa-dannykh-mnozhestvo-tfontstyles.html Super User toto44@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:00 2013-11-03T03:36:50+07:00 https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/funktsii-i-protsedury-dlya-raboty-s-dannymi-perechislimogo-tipa.html Super User toto44@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:00 2013-11-03T03:17:03+07:00 https://delphi-hlp.ru/index.php/mnozhestva-zapisi-i-perechislyaemye-tipy/chto-takoe-mnozhestva.html Super User toto44@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:00 2013-08-19T15:51:52+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/metody/override-vitual-dynamic-metody.html Super User toto44@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>