TObject — Тип Delphi


Содержание

TObject — Тип Delphi

Параметр Sender в Delphi-программе присутствует в каждом обработчике событий любого компонента. Однако, поскольку в использовании параметра Sender часто нет необходимости, новички про него «забывают» и часто даже не догадываются о его предназначении. В этой статье я хочу рассказать о том, для чего предназначен параметр Sender Delphi и как работать с таким, как оказывается, важным и удобным параметром как Sender.

Sender имеет тип TObject, и имеет значение объекта — источника события, в обработчике которого он используется. То есть, если на Форме находится несколько одинаковых компонентов, к тому же выполняющих одинаковые функции, то нет необходимости для каждого из них создавать свои процедуры-обработчики событий. Вполне достаточно одного комплекта обработчиков, а выяснить, к какому компоненту относится событие обрабатываемое именно сейчас, позволит именно параметр Sender.

Ну, во первых, мы можем непосредственно выяснить имя компонента — источника события. Положите на Форму два любых компонента (например кнопки Button), для одного из низ создайте заготовку обработчика любого события (например OnClick), а второму просто сопоставьте обработчик первого. Для этого откройте Инспектор Oбъектов, выберите второй ваш объект, и на вкадке Events щёлкните по обработчику выбранного события (OnClick в данном случае). В раскрывшемся списке выберите Button1Click. Затем щёлкните туда дважды. В редакторе кода, куда вы попадёте, введите такой код:

if Sender = Button1
then Caption:=’Щелчок по кнопке №1′
else Caption:=’Щелчок по кнопке №2′;

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

Это ещё не всё! Работая с параметром Sender, можно обойтись даже и без выяснения имени компонента-источника. Например, задача такая: мы должны следить за свойством Text нескольких компонентов Edit и при появлении в любом из них символа ‘,’ (запятая) менять его на ‘.’ (точка). Создайте такой обработчик события OnChange для одного из Edit’ов, а остальным просто сопоставьте, как в предыдущем случае:

Прежде всего заметим, что слово Edit1 написано много раз, что на самом деле излишне. С помощью оператора присоединения with избавимся от необходимости писать Edit1 внутри операторов:

Всё! Теперь для того чтобы избавится от запятых во всех Edit’ах, нужно заменить в операторе присоединения Edit1 на — лучше вот так, в скобках.
Дело в том, что конструкция (Sender as TObject) позволяет работать с источником события как с соответствующим объектом. В частности, если после (Sender as TEdit) поставить точку, то Delphi выдаст нам список свойств и методов компонента Edit. Хотя, по лично моей логике, вместо (Sender as TEdit) достаточно было бы просто Sender. Ан нет, не получается.

Теперь вы понимаете, почему мы избавились от Edit1 внутри операторов — заменять каждый Edit1 на было бы затруднительно!

Наконец, иногда бывает необходимо выяснить не имя, а тип источника события. В этом поможет оператор is , с помощью которого параметр Sender можно сравнить с одним из типов Delphi:

if (Sender is TButton)
then Caption:=’Источник события — кнопка TButton’;

Кстати, насчёт использованного выше способа замены запятой на точку. Вместо того чтобы заменять их в тексте строки, гораздо удобнее делать это прямо «на лету», используя процедуру OnKeyPress:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=’,’ then Key:=’.’;
end;

Почему я сразу не использовал этот способ? Потому что тут вообще не используется параметр Sender! Хотя работать эта процедура также будет для всех компонентов, которым она сопоставлена. Но учитесь видеть разные возможности, когда-то и первый способ пригодится. И вообще, учитесь.

Как определить тип Tobject для отправителя в Delphi?

Я создаю код для диалога с радиогруппой как часть формы предпочтений. Часть нашего кода заключается в том, что при открытии формы предпочтений кликается группа радиостанций, которая настраивает кучу материала (т.е. Если радиокнопка выключена, тогда скрывается куча содержимого конфигурации).

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

Итак, код выглядит так:

Но этот код также выполняется, когда открывается диалог настроек. Что мне следует вводить, чтобы выполнить, только когда пользователь нажимает кнопку мыши на кнопке?

Тестирование отправителя

Вы можете проверить отправителя двумя способами:

или вы можете проверить тип отправителя.

Тестирование ключевых слов is , чтобы узнать, имеет ли объект определенный тип.
Обратите внимание, что тест if AObject is TObject всегда верен, потому что каждый объект получен из TObject.

Больше удовольствия от typecasting

Тот факт, что тесты is для типа объекта и всех предков могут использоваться для других целей:

Из-за короткой замыкания булевой оценки Delphi сначала проверит (sender is TControl) и только, если это правда. Выполнение следующего теста (TControl(Sender).Tag = 10) безопасно для использования.

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

Если это случай, вы можете захотеть удалить код, который устанавливает состояние формы в свой собственный метод, а затем вызывать его как из события щелчка радио, так и из файла initialze/show/create вашей формы.

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

Класс TObject

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

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

Указатель на экземпляр объекта передается в переменную объектного типа, которая в дальнейшем будет идентифицировать объект в программном коде приложения. В приведенном выше фрагменте кода переменная объектного типа someList объявлена как экземпляр типа TStrings . При создании экземпляра этого типа конструктор Create возвращает в переменную SomeList указатель на выделенную для нового объекта область памяти. Для этого применяется метод Newinstance , который вызывается в конструкторе автоматически:

class function Newinstance: TObject; virtual;

Объект класса TObject обеспечивает выполнение этого процесса для любого порожденного от него объекта. А уже внутри конструктора, который унаследован от класса TObject , можно предусмотреть инициализацию переменных и выполнение дополнительных операций. Объявление конструктора выглядит следующим образом:

В конструкторах потомков это объявление может перекрываться, но при необходимости вызвать конструктор предка используется оператор inherited :

Для уничтожения экземпляра объекта в классе TObject предназначены методы Destroy и Free :

Как видно из объявления, настоящим деструктором является метод Destroy. Он обеспечивает освобождение всех занимаемых экземпляром объекта ресурсов. Обычно при создании новых классов деструктор всегда перекрывается для того, чтобы корректно завершить работу с данными.

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

При уничтожении объектов рекомендуется вместо деструктора использовать метод Free , который просто вызывает деструктор, но перед этим проверяет, чтобы указатель на экземпляр объекта был не пустым (не был равен Nil ). Это позволяет избежать серьезных ошибок.

Если объект является владельцем других объектов (например, форма владеет всеми размещенными на ней компонентами), то его метод Free автоматически вызовет эти же методы для всех объектов. Поэтому при закрытии формы разработчик избавлен от необходимости заботиться об уничтожении всех компонентов.

Для освобождения занимаемой объектом памяти деструктор автоматически Вызывает метод Freelnstance :

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

class function Classlnfo: Pointer;

возвращает указатель на таблицу информации времени выполнения (RTTI). Эта информация используется в среде разработки и в приложении.

class function ClassName: ShortString;

возвращает имя типа объекта, которое может быть использовано для идентификации. Например, один метод-обработчик щелчка на кнопке может работать с несколькими типами компонентов кнопок:

procedure TForml.BitBtnlClick(Sender: TObject);

if Sender is TBitBtn

then TBitBtn(Sender).Enabled := False;

if Sender is TSpeedButton

then TSpeedButton(Sender).Down := True;

class function ClassNamels(const Name: string): Boolean;

позволяет определить, является ли данный объект того типа, имя которого передано в параметре Name . В случае положительного ответа функция возвращает True .

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

procedure Dispatch(var Message); virtual;

осуществляет обработку сообщений, поступающих объекту. Он определяет, сможет ли объект обработать сообщение при помощи собственных обработчиков событий. В случае отсутствия таких методов сообщение передается аналогичному методу Dispatch класса-предка (если он есть).

Класс TObject имеет предопределенный обработчик событий:

procedure DefaultHandler(var Message); virtual;

Кроме рассмотренных здесь методов, класс TObject имеет еще несколько методов, которые в основном применяются для взаимодействия объекта со средой разработки.

В целом класс TObject может служить для создания на его основе некоторых простых классов для использования в приложениях.

НОВОСТИ ФОРУМА
Рыцари теории эфира
01.10.2020 — 05:20: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]69vJGqDENq4[/Youtube][/center]
[center]14:36[/center]
Osievskii Global News
29 сент. Отправлено 05:20, 01.10.2020 г.’ target=_top>Просвещение от Вячеслава Осиевского — Карим_Хайдаров.
30.09.2020 — 12:51: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Ok]376309070[/Ok][/center]
[center]11:03[/center] Отправлено 12:51, 30.09.2020 г.’ target=_top>Просвещение от Дэйвида Дюка — Карим_Хайдаров.
30.09.2020 — 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]VVQv1EzDTtY[/Youtube][/center]
[center]10:43[/center]

интервью Раввина Борода https://cursorinfo.co.il/all-news/rav.
мой телеграмм https://t.me/peshekhonovandrei
мой твиттер https://twitter.com/Andrey54708595
мой инстаграм https://www.instagram.com/andreipeshekhonow/

[b]Мой комментарий:
Андрей спрашивает: Краснодарская синагога — это что, военный объект?
— Да, военный, потому что имеет разрешение от Росатома на манипуляции с радиоактивными веществами, а также иными веществами, опасными в отношении массового поражения. Именно это было выявлено группой краснодарцев во главе с Мариной Мелиховой.

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

Как определить тип TObject для отправителя в Delphi?

я творю код для диалога с радио группы в составе формы предпочтений. Часть нашего кода является то, что, когда форма предпочтения открыта, группа радио щелкнула, которая настраивает кучу вещей (то есть, если переключатель «Выключен», то куча конфигурации материала скрыта).

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

Таким образом, код выглядит следующим образом:

Но этот код также выполняется, когда диалог настроек открывается. То, что я должен поставить там, чтобы выполнить только когда пользователь фактически щелкает мышью на кнопке?

Тестирование отправителя

Вы можете проверить отправитель двух способов:

или вы можете проверить тип отправителя.

В is тесты по ключевым словам , чтобы увидеть , является ли объект определенного типа.
Обратите внимание , что тест if AObject is TObject всегда верно , потому что каждый объект является производным от TObject.

Веселее с типажей

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

Из — за короткого замыкания булевой оценки Delphi сначала проверит , (sender is TControl) и только продолжаться , если это верно. Заставить последующее испытание (TControl(Sender).Tag = 10) безопасным для использования.

Если я правильно вас понять вы щелкаете ваш RadioGroup программно настроить начальное состояние формы, но у вас есть дополнительный код в обработчик щелчка, что вы не хотите работать?

Если это так, вы можете рассмотреть вопрос о снятии кода, который устанавливает состояние формы к своему собственному методу, а затем вызвать его как от события радио мыши и из initialze / шоу / создания вашей формы.

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

TObject — Тип Delphi

Конструктор объекта. Используется для создания экземпляра класса TObject или его потомков. В базовом классе не делает ничего (пустой метод). Его следует переопределить в потомках для распределения дополнительных ресурсов, инициализации начальных значений полей, создания экземпляров объектов. Может быть виртуальным, но не динамическим.

Пример

TObject.Free

Безопасный метод освобождения ресурсов и уничтожения объекта. Если указатель на объект nil, аварийного заверщения не произойдет. В реализации метод Free вызывает виртуальный метод Destroy.

TObject.InitInstance

Метод производит инициализацию экземпляра в памяти, при этом инициализируются поля, VMT, DMT. Параметр Instance должен содержать указатель на область памяти размером не меньше InstanceSize.

Используется непосредственно методом NewInsatnce, который вызывается встроенными средствами в конструкторе Create первым и единственный раз.

Строки инициализируются пустыми. Интерфейсы, объекты, указатели значениями NIL. Варианты — значением «Unassigned». Целые, вещественные, в том числе и Currency — «0».

TObject.CleanupInstance

Метод производит деинициализацию всех полей экземпляра объекта. Освобождаются ресурсы связанные с вариантами, строками, интерфейсами. Целые, дествительные и Currency устанавливаются в «0», указатели и варианты в NIL, динамические массивы очищаются.

Вызывается непостредственно в методе FreeInstance.

Пример использования NewInstance, InitInstance, FreeInstance, CleanupInstance

TObject.ClassType

Метод возвращает ссылку на класс объекта.

Wikimedia Foundation . 2010 .

Смотреть что такое «TObject» в других словарях:

Реализация АВЛ-дерева — Ниже предложены возможная программная реализация АВЛ дерева. Код класса на Object Pascal. unit mAVLTree; interface type TAVLTree = >Википедия

Delphi (язык программирования) — У этого термина существуют и другие значения, см. Delphi. Эта статья о языке программирования. Об интегрированной среде разработки см. Delphi (среда разработки). Delphi … Википедия

Magic pushbutton — The magic pushbutton is a common anti pattern in graphical programming environments.[1] In this scenario, the programmer draws the user interface first and then writes the business logic in the automatically created methods. In event driven… … Wikipedia

Magic pushbutton — En computación el antipatrón de diseño magic pushbutton ocurre en el desarrollo de interfaces gráficas, cuando el programador construye primero la interfaz gráfica y luego las llamadas a la lógica de negocio se realizan en los huecos,… … Wikipedia Español

Singleton — Para el término matemático, véase Conjunto unitario. El patrón de diseño singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Su intención consiste en … Wikipedia Español

Паскаль (язык программирования) — Эта статья или раздел нуждается в переработке. В Паскале нет модулей, ООП и прочих новомодных веяний. Описание расширений должно присутствовать только в статьях о соответ … Википедия

Наследование (программирование) — Для улучшения этой статьи желательно?: Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное. У этого термин … Википедия

Строитель (шаблон проектирования) — У этого термина существуют и другие значения, см. Строитель. Шаблон проектирования Строитель Builder Тип: порождающий Описан в Design Patterns Да Строитель (англ. Builder) п … Википедия

Магическая кнопка — В этом разделе не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка… … Википедия

Introspección de tipos — En informática, la introspección de tipos es la capac >Wikipedia Español

Библиотека классов VCL среды проектирования Delphi

Компоненты Delphi

Объекты

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

Все объекты имеют общего предка — класс TObject .

Компоненты

Компонент Delphi — это особый вид объектов — визуальный объект (визуальный для проектирования, а не для отображения пользователя). Создавать и редактировать такой объект можно как программным путем, так и на этапе проектирования.

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

Все компоненты имеют общего предка — класс TComponent.

Delphi предоставляет широкий набор компонентов, называемый иногда VCL — библиотекой. Все компоненты Delphi могут быть доступны через палитру компонентов.

В настоящее время в Borland Developer Studio входит Delphi 2006 for Win32 (использует библиотеку VCL ) и Delphi 2006 for Microsoft .NET (использует библиотеку Framework 1.1).

Часть компонентов являются элементами управления. В основном это элементы управления Windows. Доступ к элементам управления возможен не только на этапе проектирования, но и во время выполнения приложения.

Элементы управления можно подразделить на оконные и неоконные. Оконные элементы могут получать фокус и имеют дескриптор окна. Предком всех оконных элементов управления является абстрактный класс TWinControl . Предком неоконных элементов управления является абстрактный класс TGraphicControl .

При добавлении в форму любого компонента из палитры компонентов Delphi автоматически формирует программный код для создания объекта (переменной) данного типа. Переменная добавляется как член класса данной формы.

Библиотека VCL

Иерархия классов

Классы библиотеки VCL используют механизм простого наследования: один класс может иметь только одного предка. Корнем иерархии классов является класс TObject. Любой класс VCL -библиотеки наследуется от класса TObject .

На рис. 24.1 представлена корневая часть дерева иерархии классов VCL -библиотеки.

Класс TObject

Класс TObject инкапсулирует общие черты поведения всех объектов VCL -библиотеки. Если при создании нового объекта не указан базовый класс, то Delphi автоматически использует как предка класс TObject .

Объявление нового класса выполняется в секции type . Если после слова >TObject .

Класс TComponent

TComponent является предком всех компонентов VCL -библиотеки.

Все потомки данного класса могут быть расположены в палитре компонентов .

Класс TComponent позволяет определять родительский элемент управления и владельца компонента.

Родительским элементом управления называется тот, в который непосредственно помещен данный компонент.

Владельцем всех компонентов, расположенных в форме, является сама форма.

Владельцем всех форм является приложение.

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

Класс предоставляет большой набор свойств, включая следующие:

Иерархические структуры в Delphi (часть 1)

Класс TTreeView представляет собой окно, которое показывает иерархический список любых пунктов: заголовков документов, индексов, файлов на диске.

Иерархия классов:

Tobject->TPersistent->TComponent->TControl->TWinControl->TCustomTreeView->TTreeView

Unit ComCtrls

Описание

Каждый узел дерева состоит из ярлыка и множества дополнительных изображений типа bitmapped. Каждый узел может иметь список подузлов, связанных с ним. Щелкая левой кнопкой мыши по узлу, пользователь может раскрыть связанный список подузлов.

Свойства TTreeView

Наследует от TCustomTreeView

BorderStyle

Canvas

ChangeDelay

DropTarget

HideSelection

HotTrack

Images

Indent

Items

MultiSelect

MultiSelectStyle

ReadOnly

RightClickSelect

RowSelect

Selected

SelectionCount

Selections

ShowButtons

ShowLines

ShowRoot

SortType

StateImages

ToolTips

TopItem

Наследует от TwinControl

BevelEdges

BevelInner

BevelKind

BevelOuter

BevelWidth

BorderWidth

Brush

ClientOrigin

ClientRect

ControlCount

Controls

Ctl3D

DockClientCount

DockClients

DoubleBuffered

Handle

ParentCtl3D

ParentWindow

Showing

TabOrder

TabStop

VisibleDockClientCount

Наследует от Tcontrol

Action

Align

Anchors

BiDiMode

BoundsRect

ClientHeight

ClientWidth

Color

Constraints

ControlState

ControlStyle

Cursor

DockOrientation

DragCursor

DragKind

Enabled

Floating

FloatingDockSiteClass

Height

HelpContext

HelpKeyword

HelpType

HostDockSite

LRDockWidth

Parent

ParentBiDiMode

ParentColor

ParentFont

ParentShowHint

PopupMenu

ShowHint

TBDockHeight

UndockHeight

UndockWidth

Visible

Width

WindowProc

Наследует от Tcomponent

ComObject

ComponentCount

ComponentIndex

Components

ComponentState

ComponentStyle

DesignInfo

Owner

VCLComObject

Все свойства, события, методы класс TTreeView наследует от родителя – класса TCustomTreeView.

TCustomTreeView

TCustomTreeView является базовым типом для компоненты TTreeView.

Иерархия классов

Tobject->TPersistent->TComponent->TControl->TWinControl->TCustomTreeView

Unit

Описание

Используйте TCustomTreeView как основной класс при определении деревьев, Большинство свойств, определенных в TCustomTreeView защищены так, чтобы Вы могли их использовать, в собственных компонентах вида дерева.

Не следует использовать в программах класс TCustomTreeView. Необходимо пользоваться либо классом TTreeView, либо создавать своего потомка.

AutoExpand property (TCustomTreeView)

Определяет, раскрываются ли и свертываются узлы дерева автоматически.

Синтаксис:

property AutoExpand: Boolean;

Описание

Необходимо установить AutoExpand:=true, чтобы заставить выбранные узлы разворачиваться, а не выбранные – сворачиваться.

BorderStyle property (TCustomTreeView)

Определяет, имеет ли компоненты TreeView границы (бордюры).

Синтаксис:

property BorderStyle: TBorderStyle;

Описание

Свойство BorderStyle устанавливает две возможности выбора:

Значение Описание

  • bsNone Нет бордюра
  • bsSingle Бордюр в виде одинарной линии

Canvas property (TCustomTreeView)

Обеспечивает доступ к холсту.

Синтаксис:

property Canvas: TCanvas;

Описание

Используют свойство Canvas для рисования через события OnCustomDraw и OnCustomDrawItem.

ChangeDelay property (TCustomTreeView)

Определяет задержку между тем, когда узел выбран и когда происходит событие OnChange.

Синтаксис:

property ChangeDelay: Integer;

Описание

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

Установите свойство ChangeDelay на 50 миллисекунд, чтобы подражать поведению дерева, используемого в Windows Проводнике.

DropTarget property (TCustomTreeView)

Определяет, какой элемент дерева появляется в результате операции перетаскивания drag and drop.

Синтаксис:

property DropTarget: TTreeNode;

Описание

Указывает узел, который может служить приемником операций Drag&Drop

HideSelection property (TCustomTreeView)

Указывает, будет ли убираться выделение узлов, когда компонент теряет фокус ввода

Синтаксис:

property HideSelection: Boolean;

Описание

Если свойство H >

HotTrack property (TCustomTreeView)

Определяет, выделяются ли цветом элементы (узлы), над которыми проходит курсор мыши.

Синтаксис:

property HotTrack: Boolean;

Описание

Установка свойства HotTrack:=true означает, что будут выделяться узлы над которыми проходит курсор мыши.

Images property (TCustomTreeView)

Определяет, какой список изображений TImageList, связан с деревом.

Синтаксис:

property Images: TCustomImageList;

Indent property (TCustomTreeView)

Определяет отступ в пикселях от левого угла узла для всех его подузлов

Синтаксис:

property Indent: Integer;

Следующий пример показывает, как обработчик события OnCustomDrawItem рисует элементы (пункты) и строки дерева после того, как обработчик события OnCustomDraw заполнился на заднем плане.

procedure TCustomDrawForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
NodeRect: TRect;
begin
with TV.Canvas do
begin
// Если DefaultDraw является истинным, любое из свойств шрифта узла, может быть
// изменено. Обратите внимание также, что, когда DefaultDraw = True, Windows рисует
// кнопки и игнорирует наши цвета фона шрифта, используя вместо этого
// цветовые особенности TTreeView.
if cdsSelected in State then
begin
Font.Assign(SelectedFontDialog.Font);
Brush.Color := SelBkgColorDialog.Color;
end;
DefaultDraw := FDefaultDrawItem;
//DefaultDraw = False означает, что Вы должны обработать весь элемент, рисуя
//непосредственно кнопки, строки, изображения, и текст.
if not DefaultDraw then
begin
//рисуем прямоугольное выделение
if cdsSelected in State then
begin
NodeRect := Node.DisplayRect(True);
FillRect(NodeRect);
end;
NodeRect := Node.DisplayRect(False);
if None1.Checked then
// никакой точечный рисунок, не красит цветом фона.
begin
Brush.Color := BkgColorDialog.Color;
Brush.Style := FBrushStyle;
FillRect(NodeRect)
end
else
// не красить по фоновому точечному рисунку.
Brush.Style := bsClear;
NodeRect.Left := NodeRect.Left + (Node.Level * TV.Indent);
//NodeRect.Left теперь представляет крайнюю левую часть развернутой кнопки
DrawButton(NodeRect, Node);
NodeRect.Left := NodeRect.Left + TV.Indent + FButtonSize;
//NodeRect.Left является теперь крайней левой частью изображения>.
DrawImage(NodeRect, Node.ImageIndex);
NodeRect.Left := NodeRect.Left + ImageList.Width;
// Теперь мы наконец имеем возможность тянуть (рисовать) текст.
TextOut(NodeRect.Left, NodeRect.Top, Node.Text);
end;
end;
end;

Items property (TCustomTreeView)

Индексированный список узлов дерева

Синтаксис:

property Items: TTreeNodes;

Описание

Индивидуальные узлы дерева – объекты класса TTreeNode. Открывает доступ к любому узлу по его индексу. Индексация начинается с нуля и соответствует просмотру всех узлов полностью раскрытого списка. Например:

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

Следующий пример удаляет узел из дерева, когда пользователь нажимает на узле левую кнопку мыши.

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
HT : THitTests;
begin
if (CheckBox1.Checked) and (Sender is TTreeView) then
begin
with Sender as TTreeView do
begin
HT := GetHitTestInfoAt(X,Y);
if (htOnItem in HT) then Items.Delete(GetNodeAt(X,Y));
end;
end;
end;

MultiSelect property (TCustomTreeView)

Разрешает/запрещает одновременный выбор нескольких узлов Delphi:

Синтаксис:

property MultiSelect: Boolean;

Описание

Свойство MultiSelect определяет, могут ли выбираться несколько узлов с помощью клавиш Control и Shift. Стиль выбора определяется свойством MultiSelectStyle.

MultiSelectStyle property (TCustomTreeView)

Определяет способ выбора нескольких узлов

Синтаксис:

property MultiSelectStyle: TMultiSelectStyle;
type
TMultiSelectStyles = (msControlSelect, msShiftSelect, msVisibleOnly, msSiblingOnly);
TMultiSelectStyle = set of TMultiSelectStyles;

Описание

Значение Комментарий

  • msControlSelect с нажатой и удерживаемой клавишей Ctrl для выбора узлов в произвольном порядке;
  • msShiftSelect с нажатой и удерживаемой клавишей Shift для выбора сплошного диапазона;
  • msVisibleOnly подобно msShiftSelect, но в диапазон не включаются дочерние нераскрытые узлы;
  • msSiblingOnly подобно msShiftSelect, но в диапазон включаются только узлы одного уровня.

ReadOnly property (TCustomTreeView)

Запрещает/разрешает редактирование надписей в узлах

Синтаксис:

property ReadOnly: Boolean;

Описание

Свойство ReadOnly используется, чтобы определить, может ли пользователь редактировать узлы дерева. Если ReadOnly равен True, пользователь может развернуть и свернуть узлы, но не может редактировать их метки. Если ReadOnly является False, пользователь может также редактировать метки. Значение по умолчанию является False.

RightClickSelect property (TCustomTreeView)

Разрешает выбор узлов правой кнопкой мыши

Синтаксис:

property RightClickSelect: Boolean;

Описание

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

Обратите внимание: RightClickSelect должен быть установлен в True прежде, чем пользователь щелкает правой кнопкой мыши.

RowSelect property (TCustomTreeView)

Определяет, выделяется ли полная строка выбранного узла.

Синтаксис:

property RowSelect: Boolean;

Описание

Установка RowSelect в True выделяет полную строку выбранного узла.

Свойство RowSelect игнорируется, если ShowLines равен True.

Selected property (TCustomTreeView)

Содержит список всех выбранных узлов или nil, если таких нет

Синтаксис:

property Selected: TTreeNode;

Описание

Когда узел становится выбранным, происходит событие дерева OnChanging и раскрываются дочерние узлы, если они имеются. В этом случае также происходит событие дерева OnExpanded.

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

procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
begin
for I := 0 to (TreeView1.Selected.Count — 1) do
ListBox1.Items.Add(TreeView1.Selected.Item[I].Text);
end;

SelectionCount property (TCustomTreeView)

Возвращает номер выбранного узла

Синтаксис:

property SelectionCount: Cardinal;

Selections property (TCustomTreeView)

Возвращает выделенные узлы.

Синтаксис:

property Selections[Index: Integer]: TTreeNode;

Описание

Selections возвращает один из выбранных узлов. Максимальное значение Индекса — SelectionCount-1. Если выбрано больше чем один узел, Selections[0] — первый выбранный узел. Этот узел — отправная точка для множественных выборов, если свойство MultiSelectStyle установлено в msShiftSelect.

ShowButtons property (TCustomTreeView)

Определяет, отображать ли плюс (+) и минус (-) с левой стороны каждого родительского узла.

Синтаксис:

property ShowButtons: Boolean;

Описание

Если ShowButtons установлен в True, +/- появится слева от каждого родительского узла. Пользователь может нажать на +/-, чтобы развернуть или свернуть дочерние узлы как альтернатива двойному нажатию на родительский узел.

ShowLines property (TCustomTreeView)

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

Синтаксис:

property ShowLines: Boolean;

Описание

Если свойство ShowLines установлено в true, то линии, связывающие дочерние и родительские узлы будут отображаться.

ShowRoot property (TCustomTreeView)

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

Синтаксис:

property ShowRoot: Boolean;

Описание

Для отображения линий верхнего уровня с корнем дерева установите свойства ShowRoot и ShowLines в true.

SortType property (TCustomTreeView)

Указывает способ сортировки узлов

Синтаксис:

property SortType: TSortType;

Описание

TSortType = (stNone, stData, stText, stBoth);

Значение Комментарий

  • stNone нет сортировки.
  • stData сортировка по данным;
  • stText сортировка по тексту надписей;
  • stBoth сортировка по тексту и по данным.

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

StateImages property (TCustomTreeView)

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

Синтаксис:

property StateImages: TCustomImageList;

ToolTips property (TCustomTreeView)

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

Синтаксис:

property ToolTips: Boolean;

Описание

Установите ToolTips в true для снабжения элементов дерева подсказками (Help Hints).

Определите текст ToolTip в обработчике события OnHint, используя свойство Hint.

TopItem property (TCustomTreeView)

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

Синтаксис:

property TopItem: TTreeNode!al(`ttreenode’,3,`TopicNotFound’,`main’);

Описание

Определяет корневой узел.

События TTreeView

Наследует от TCustomTreeView

    • OnAddition
    • OnAdvancedCustomDraw
    • OnAdvancedCustomDrawItem
    • OnChange
    • OnChanging
    • OnCollapsed
    • OnCollapsing
    • OnCompare
    • OnCreateNodeClass
    • OnCustomDraw
    • OnCustomDrawItem
    • OnDeletion
    • OnEdited
    • OnEditing
    • OnExpanded
    • OnExpanding
    • OnGetImageIndex
    • OnGetSelectedIndex

Наследует от TwinControl

Наследует от Tcontrol

  • OnClick
  • OnContextPopup
  • OnDblClick
  • OnDragDrop
  • OnDragOver
  • OnEndDock
  • OnEndDrag
  • OnMouseDown
  • OnMouseMove
  • OnMouseUp
  • OnStartDock
  • OnStartDrag

OnAddition event (TCustomTreeView)

Происходит, когда новая вершина <узел>добавлена к дереву.

Синтаксис:

property OnAddition: TTVExpandedEvent;

Описание

Событие OnAddition происходит тогда, когда новая вершина (узел) добавлена к дереву.

OnAdvancedCustomDraw event (TCustomTreeView)

Происходит в течение закрашивания дерева.

Синтаксис:

property OnAdvancedCustomDraw: TTVAdvancedCustomDrawEvent;

Описание

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

Чтобы красить индивидуальные элементы (узлы), используйте событие OnAdvancedCustomDrawItem или OnCustomDrawItem.

Замечание: Событие OnAdvancedCustomDraw происходит в нескольких стадиях в течение процесса раскраски. Если Вы только использовали стадию cdPrePaint, более эффективно использовать событие OnCustomDraw.

OnAdvancedCustomDrawItem event (TCustomTreeView)

Происходит в дискретных стадиях в течение закрашивания вершин (узлов) дерева.

Синтаксис:

property OnCustomDrawItem: TTVCustomDrawItemEvent;

Описание

Создайте обработчик события OnAdvancedCustomDrawItem, чтобы настроить закрашивание индивидуальных элементов (узлов) в дереве.

Замечание: Событие OnAdvancedCustomDrawItem происходит в нескольких стадиях в течение раскраски. Если Вы только использовали cdPrePaint, более эффективно использовать событие OnCustomDrawItem.

OnCancelEdit event (TCustomTreeView)

Происходит когда выполняется редактирование Заголовка вершины (узла).

Синтаксис:

type TTVChangedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;

property OnCancelEdit: TTVChangedEvent;

Описание

Событие OnCancelEdit происходит, когда пользователь отменяет редактирование вершины. Sender — содержит вершину (узел) дерева.

Node – вершина (узел), редактирование которой было отменено.

OnChange event (TCustomTreeView)

Происходит всякий раз, когда перемещается выделение от одной вершины (узла) к другой.

Синтаксис:

type TTVChangedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;

property OnChange: TTVChangedEvent;

Описание

Событие OnChange происходит, когда выбранная вершина изменяется. Параметр Sender — содержит выбранные изменения вершины, и параметр Node — недавно выбранная вершина.

Замечание: Событие OnChange не происходит для выбранных вершин с использованием правой кнопки мыши, когда RightClickSelect равен True. Для правой кнопки мыши используйте событие OnMouseUp.

OnChanging event (TCustomTreeView)

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

Синтаксис:

property OnChanging: TTVChangingEvent;

type TTVChangingEvent = procedure(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean) of object;

Описание

Событие OnChanging препятствует выделению перемещаться на некоторые вершины.

Тип TTVChangingEvent указывает на метод, который вызывается, когда выделение собирается переместиться от одной вершины (узла) к другой. Переменная AllowChange, равная False, препятствует выделению переместиться на новую вершину. Параметр Node определяет вершину, которая собирается быть выделенной.

OnCollapsed event (TCustomTreeView)

Событие происходит после свертывания узла.

Синтаксис:

property OnCollapsed: TTVExpandedEvent;

Описание

Событие OnCollapsed происходит после свертывания узла. Параметр Node — вершина, дочерние записи которой больше не видимы.

OnCollapsing event (TCustomTreeView)

Событие происходит перед свертыванием узла

Синтаксис:

property OnCollapsing: TTVCollapsingEvent;

type TTVCollapsingEvent = procedure(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean) of object;

Описание

Событие TTVCollapsingEvent указывает на метод, который вызывается, когда вершина собирается быть свернутой. Установите параметр AllowCollapse в False, чтобы предотвратить свертывание узла, который определен параметром Node.

OnCompare event (TCustomTreeView)

Происходит, когда две вершины (узла) должны быть сравнены в течение сортировки дерева.

Синтаксис:

property OnCompare: TTVCompareEvent;

type TTVCompareEvent = procedure(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer) of object;

Описание

Обработчик события OnCompare используется, чтобы настроить порядок сортировки вершин (узлов) в дереве. Установите параметр Compare меньше 0, если Node1 — меньше чем Node2. Установите параметр Compare 0, если Node1 эквивалентен Node2, и установите параметр Compare больше 0, если Node1 больше чем Node2. Если обработчик события OnCompare создается, то узлы сортируются в алфавитном порядке, по их метках (именам).

OnCreateNodeClass event (TCustomTreeView)

Происходит, когда вершина (узел) дерева собирается быть созданной.

Синтаксис:

property OnCreateNodeClass: TTVCreateNodeClassEvent;

type TTVCreateNode >

Описание

Событие OnCreateNodeClass происходит, когда новая вершина собирается быть созданной.

Sender — дерево, куда собираемся прибавлять новую вершину.

NodeClass возвращает ссылку на класс, чтобы создать новый объект вершины.

OnCustomDraw event (TCustomTreeView)

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

Синтаксис:

property OnCustomDraw: TTVCustomDrawEvent;

OnCustomDrawItem event (TCustomTreeView)

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

Синтаксис:

property OnCustomDrawItem: TTVCustomDrawItemEvent;

Следующий пример показывает, как обработчик события OnCustomDrawItem рисует элементы (пункты) и строки дерева после того, как обработчик события OnCustomDraw выполнился на заднем плане.

procedure TCustomDrawForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
NodeRect: TRect;
begin
with TV.Canvas do
begin
// Если параметр DefaultDraw является True, любое из свойств шрифта узла может быть
// изменено. Обратите внимание также, что, когда DefaultDraw = True, Windows рисует
// кнопки и игнорирует наши цвета фона шрифта, используя вместо этого
// свойство Color собственной канвы (Canvas).
if cdsSelected in State then
begin
Font.Assign(SelectedFontDialog.Font);
Brush.Color := SelBkgColorDialog.Color;
end;
DefaultDraw := FDefaultDrawItem;
//DefaultDraw = False необходимо обработать весь узел
if not DefaultDraw then
begin
// рисовать выделенный прямоугольник (rect).
if cdsSelected in State then
begin
NodeRect := Node.DisplayRect(True);
FillRect(NodeRect);
end;
NodeRect := Node.DisplayRect(False);
if None1.Checked then
//никакой точечный рисунок так не красит цветом фона.
begin
Brush.Color := BkgColorDialog.Color;
Brush.Style := FBrushStyle;
FillRect(NodeRect)
end
else
// не красьте по фоновому точечному рисунку.
Brush.Style := bsClear;
NodeRect.Left := NodeRect.Left + (Node.Level * TV.Indent);
//NodeRect.Left теперь представляет крайнюю левую часть развернутой кнопки
DrawButton(NodeRect, Node);
NodeRect.Left := NodeRect.Left + TV.Indent + FButtonSize;
// является теперь крайней левой частью изображения.
DrawImage(NodeRect, Node.ImageIndex);
NodeRect.Left := NodeRect.Left + ImageList.Width;
//Теперь мы наконец имеем возможность рисовать текст.
TextOut(NodeRect.Left, NodeRect.Top, Node.Text);
end;
end;
end;

OnDeletion event (TCustomTreeView)

Событие происходит при удалении узла из дерева.

Синтаксис:

property OnDeletion: TTVExpandedEvent;

OnEdited event (TCustomTreeView)

Происходит после того, как пользователь редактирует Текстовое свойство вершины (метку).

Синтаксис:

property OnEdited: TTVEditedEvent;

type TTVEditedEvent = procedure(Sender: TObject; Node: TTreeNode; var S: string) of object;

Описание

Создайте обработчик события OnEdited, чтобы реагировать на изменения метки узла. Параметр Node — вершина, метка которой была отредактирована. Параметр S — новое значение Текстового свойства вершины. Метка вершины может быть изменена в обработчике события OnEdited прежде, чем выполнено редактирование пользователем. Это явление может произойти, только если ReadOnly установлено в False.

OnEditing event (TCustomTreeView)

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

Синтаксис:

property OnEditing: TTVEditingEvent;

type TTVEditingEvent = procedure(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean) of object;

Описание

Установите параметр AllowEdit в False, чтобы препятствовать пользователю редактировать вершину, установленную параметром Node. Чтобы запретить редактирование всех вершин дерева, используйте свойство ReadOnly вместо этого.

OnExpanded event (TCustomTreeView)

Событие происходит после раскрытия узла.

Синтаксис:

property OnExpanded: TTVExpandedEvent;

OnExpanding event (TCustomTreeView)

Событие происходит перед раскрытием узла. Обработчик позволяет запретить раскрытие.

Синтаксис:

property OnExpanding: TTVExpandingEvent;

type TTVExpandingEvent = procedure(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean) of object;

Описание

Обработчик события OnExpanding определяет, может ли вершина быть расширена. Установите параметр AllowExpansion в False, чтобы препятствовать вершине расширяться.

OnGetImageIndex event (TCustomTreeView)

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

Синтаксис:

property OnGetImageIndex: TTVExpandedEvent;

OnGetSelectedIndex event (TCustomTreeView)

Происходит, когда дерево ищет SelectedIndex вершины (узла).

Синтаксис:

property OnGetSelectedIndex: TTVExpandedEvent;

Описание

Обработчик события OnGetSelectedIndex используется, чтобы изменить выбранный индекс изображения вершины (узла).

Методы TTreeView

Наследует от TcustomTreeView

    • AlphaSort
    • ClearSelection
    • Create
    • CustomSort
    • Deselect
    • Destroy
    • FindNextToSelect
    • FullCollapse
    • FullExpand
    • GetHitTestInfoAt
    • GetNodeAt
    • GetSelections
    • IsEditing
    • LoadFromFile
    • LoadFromStream
    • SaveToFile
    • SaveToStream
    • Select
    • Subselect

Наследует от TwinControl

    • Broadcast
    • CanFocus
    • ContainsControl
    • ControlAtPos
    • CreateParented
    • CreateParentedControl
    • DefaultHandler
    • DisableAlign
    • DockDrop
    • EnableAlign
    • FindChildControl
    • FlipChildren
    • Focused
    • GetTabOrderList
    • HandleAllocated
    • HandleNeeded
    • InsertControl
    • Invalidate
    • PaintTo
    • Realign
    • RemoveControl
    • Repaint
    • ScaleBy
    • ScrollBy
    • SetBounds
    • SetFocus
    • Update
    • UpdateControlState

Наследует от Tcontrol

  • BeginDrag
  • BringToFront
  • ClientToParent
  • ClientToScreen
  • Dock
  • DragDrop
  • Dragging
  • DrawTextBiDiModeFlags
  • DrawTextBiDiModeFlagsReadingOnly
  • EndDrag
  • GetControlsAlignment
  • GetParentComponent
  • GetTextBuf
  • GetTextLen
  • HasParent
  • Hide
  • InitiateAction
  • IsRightToLeft
  • ManualDock
  • ManualFloat
  • MouseWheelHandler
  • ParentToClient
  • Perform
  • Refresh
  • ReplaceDockedControl
  • ScreenToClient
  • SendToBack
  • SetTextBuf
  • Show
  • UseRightToLeftAlignment
  • UseRightToLeftReading
  • UseRightToLeftScrollBar

Наследует от TComponent

    • BeforeDestruction
    • DestroyComponents
    • Destroying
    • ExecuteAction
    • FindComponent
    • FreeNotification
    • FreeOnRelease
    • GetNamePath
    • InsertComponent
    • IsImplementorOf
    • ReferenceInterface
    • RemoveComponent
    • RemoveFreeNotification
    • SafeCallException
    • SetSubComponent
    • UpdateAction

Наследует от Tpersistent

Наследует от Tobject

  • AfterConstruction
  • ClassInfo
  • ClassName
  • ClassNameIs
  • ClassParent
  • ClassType
  • CleanupInstance
  • Dispatch
  • FieldAddress
  • Free
  • FreeInstance
  • GetInterface
  • GetInterfaceEntry
  • GetInterfaceTable
  • InheritsFrom
  • InitInstance
  • InstanceSize
  • MethodAddress
  • MethodName
  • NewInstance

AlphaSort method (TCustomTreeView)

Сортирует узлы дерева.

Синтаксис:

function AlphaSort([ARecurse: Boolean]): Boolean;

Описание

Функция AlphaSort вызывает сортировку вершин или пересортировку. Если обработчик события OnCompare определен, то подпрограмма определяет порядок сортировки.

В противном случае вершины сортируются по заголовкам (надписям) с учетом регистра.

Дополнительный параметр ARecurse (заданн по умолчанию True) определяет, что сортировка дерева должна выполняться рекурсивно и сортироваться должно каждое поддерево в свою очередь.

Чтобы сортировать поддерево, используйте метод AlphaSort в TTreeNodes.

CanChange method (TCustomTreeView)

Метод обработки события OnChanging для изменения узла.

Синтасис:

function CanChange(Node: TTreeNode): Boolean; dynamic;

Описание

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

Если нет никакого обработчика события OnChanging, CanChange возвращает истину.

CanCollapse method (TCustomTreeView)

Диспетчер события свертывания узлов.

Синтаксис:

function CanCollapse(Node: TTreeNode): Boolean; dynamic;

Описание

Метод CanCollapse вызывается автоматически всякий раз, когда делается попытка свертывания вершин, в установленном параметром Node узле. CanCollapse возвращает истину, если вершина (узел) может быть свернута, иначе ложь.

Если нет никакого обработчика события OnCollapsing, CanCollapse возвращает истину.

CanEdit method (TCustomTreeView)

Диспетчер события редактирования узлов.

Синтаксис:

function CanEdit(Node: TTreeNode): Boolean; dynamic;

Описание

Метод CanEdit вызывается автоматически всякий раз, когда делается попытка редактировать вершину (узел), установленную параметром Node. Метод CanEdit возвращает истину, если пользователь может редактировать вершину, иначе ложь.

Если нет никакого обработчика события OnEditing, CanEdit возвращает истину.

CanExpand method (TCustomTreeView)

Диспетчер развертывания вершин.

Синтаксис:

function CanExpand(Node: TTreeNode): Boolean; dynamic;

Описание

Метод CanExpand вызывается автоматически всякий раз, когда делается попытка разворачивать вершину (узел), установленную параметром Node. Метод CanExpand возвращает истину, если вершина может быть расширена, иначе ложь.

Если нет никакого обработчика события OnExpanding, CanExpand возвращает истину.

Change method (TCustomTreeView)

Диспетчер события изменения вершины.

Синтаксис:

procedure Change(Node: TTreeNode); dynamic;

Описание

Метод Change вызывается автоматически всякий раз, когда выбранная вершина (узел) изменяется. Параметр Node указывает на выбранную вершину.

ClearSelection method (TCustomTreeView)

Удаляет все выбранные вершины (узлы).

Синтаксис:

procedure ClearSelection(KeepPrimary: Boolean = False); virtual;

Описание

Метод ClearSelection удаляет все выбранные вершины. Если параметр KeepPrimary равен True, выделение (в первом элементе свойства Selection) не переключается.

Collapse method (TCustomTreeView)

Диспетчер события свертывания вершин.

Синтаксис:

procedure Collapse(Node: TTreeNode); dynamic;

Описание

Свертывание узлов вызывается автоматически после узла, указанного параметром Node.

Create constructor (TCustomTreeView)

Создает экземпляр класса TTreeView.

Синтаксис:

constructor Create(AOwner: TComponent);

CreateNode method (TCustomTreeView)

Создает новый узел TTreeNode дерева TTreeNodes.

Синтаксис:

function CreateNode: TTreeNode; virtual;

Описание

Не вызывайте CreateNode в коде прикладной программы. Объект TTreeNodes использует этот метод при выполнении методов Add, AddFirst, AddChild, AddChildFirst, AddObject, AddObjectFirst, AddChildObject, и AddChildObjectFirst. Чтобы создавать новый узел для дерева, используйте один из этих перечисленных методов вместо функции CreateNode. Эти методы гарантируют, что узел будет вставлен должным образом, и его свойства отражают его позицию в дереве.

CreateParams method (TCustomTreeView)

Инициализирует структуру данных параметров создания окна.

Синтаксис:

procedure CreateParams(var Params: TCreateParams); override;

Описание

Метод CreateWnd вызывает метод CreateParams, чтобы инициализировать параметры, которые передаются к CreateWindowHandle.

CreateWnd method (TCustomTreeView)

Создает окно, используемое деревом TTreeView.

Синтаксис:

procedure CreateWnd; override;

Описание

Метод CreateWnd вызывается автоматически, когда дерево создано или когда окно должно быть разрушено и обновлено, чтобы отразить изменения.

CustomDraw method (TCustomTreeView)

Генерирует события OnCustomDraw или OnAdvancedCustomDraw

Синтаксис:

function CustomDraw(const ARect: TRect; Stage: TCustomDrawStage):boolean; virtual;

Описание

Метод CustomDraw вызывается автоматически в процессе закрашивания.

ARect — границы дерева в координатах свойств Canvas.

Stage — текущая стадия процесса закрашивания.

Метод CustomDraw возвращает истину, если дерево продолжает процесс закрашивания, и ложь, если метод полностью выполнил закрашивание дерева.

CustomDrawItem method (TCustomTreeView)

Генерирует события OnCustomDrawItem или OnAdvancedCustomDrawItem.

Синтаксис:

function CustomDrawItem(Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages: Boolean): Boolean; virtual;

Описание

Метод CustomDrawItem вызывается автоматически в дискретных стадиях в течение закрашивания узлов дерева. Node – узел, который собирается быть окрашенным.

State — текущее состояние узла: один или больше cdsSelected, cdsGrayed, cdsDisabled, cdsChecked, cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate.

Stage — текущая стадия процесса закрашивания.

Переменная PaintImages возвращает значение, которое указывает, можно ли изображение дерева еще красить, связанное с текущим узлом. Это значение только тогда значимо, когда Stage — csPrePaint.

Метод CustomDrawItem возвращает True, если дерево можно красить и False, в противном случае.

CustomSort method (TCustomTreeView)

Сортирует узлы дерева в соответствии с настроенным порядком сортировки.

Синтаксис:

function CustomSort(SortProc: TTVCompare; Data: Longint; ARecurse: Boolean = True): Boolean;

type TTVCompare = function(lParam1, lParam2, lParamSort: Longint): Integer; stdcall;

Описание

Метод CustomSort вызывает сортировку узла или обращается к использованию подпрограммы сравнения, обозначенной параметром SortProc. Параметр Data передает данные подпрограмме сравнения. Дополнительный параметр ARecurse (заданная по умолчанию True) определяет, что сортировка должна проводиться рекурсивно и сортироваться каждое поддерево в свою очередь.

Если SortProc является нулевым (Delphi), используется заданная по умолчанию подпрограмма сравнения. Заданная по умолчанию подпрограмма использует обработчик события OnCompare, если он определен, в противном случае используется заданная по умолчанию подпрограмма сравнения, которая с учетом регистра сравнивает заголовки узлов.

В подпрограмме сравнения, lParam1 и lParam2 параметры относятся к двум узлам TTreeNode. Возвращаемое значение подпрограммы сравнения указывает относительный порядок сортировки IParam1 и IParam2:

Возвращаемое значение

0 IParam2 предшествует IParam1

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

Этот пример показывает, как использовать метод CustomSort в дереве, узлы сортируются в алфавитном порядке без учета регистра (или вперед или назад). Приложение должно обеспечить функцию повторного вызова типа CompareFunc, которая вызывает глобальную функцию AnsiStrIComp, чтобы исполнить фактическое сравнение.

function CustomSortProc(Node1, Node2: TTreeNode; Data: Integer): Integer; stdcall;
begin
Result := -AnsiStrIComp(PChar(Node1.Text), PChar(Node2.Text));
end;

Delete method (TCustomTreeView)

Генерирует событие OnDeletion.

Синтаксис:

procedure Delete(Node: TTreeNode); dynamic;

Описание

Delete вызывается автоматически прежде, чем узел, указанный параметром Node будет удален.

Deselect method (TCustomTreeView)

Снимает выделение с указанного узла.

Синтаксис:

procedure Deselect(Node: TTreeNode); virtual;

Описание

Метод Deselect удаляет выделение узла. Этот метод не эффективен, когда MultiSelect равно true и MultiSelectStyle содержит msControlSelect.

Destroy destructor (TCustomTreeView)

Синтаксис:

destructor Destroy; override;

Описание

Не вызывайте метод Destroy непосредственно. Для разрушения рекомендуется использовать метод Free.

DestroyWnd method (TCustomTreeView)

Разрушает окно управления.

Синтаксис:

procedure DestroyWnd; override;

Описание

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

DoEndDrag method (TCustomTreeView)

Диспетчер события конца перетаскивания узлов дерева.

Синтаксис:

procedure DoEndDrag(Target: TObject; X, Y: Integer); override;

Описание

Метод DoEndDrag вызывается автоматически когда пользователь перемещает дерево или один из его пунктов.

DoStartDrag method (TCustomTreeView)

Диспетчер события начала перетаскивания узла.

Синтаксис:

procedure DoStartDrag(DragObject: TDragObject); override;

Описание

Метод DoStartDrag вызывается автоматически.

Edit method (TCustomTreeView)

Диспетчер события редактирования.

Синтаксис:

procedure Edit(const Item: TTVItem); dynamic;

Описание

Метод Edit вызывается автоматически.

Expand method (TCustomTreeView)

Диспетчер события развертывания узла.

Синтаксис:

procedure Expand(Node: TTreeNode); dynamic;

Описание

Метод Expand вызывается автоматически.

FindNextToSelect method (TCustomTreeView)

Возвращает следующий выбираемый узел.

Синтаксис:

function FindNextToSelect: TTreeNode; virtual;

Описание

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

FullCollapse method (TCustomTreeView)

Свертывает все узлы дерева.

Синтаксис:

procedure FullCollapse;

FullExpand method (TCustomTreeView)

Раскрывает все узлы дерева.

Синтаксис:

procedure FullExpand;

Описание

Метод FullExpand раскрывает все узлы дерева. Если ShowButtons равен True, все кнопки изменятся от ‘+’ до ‘-‘.

GetDragImages method (TCustomTreeView)

Возвращается список изображений, который будет отображен в течение операции перетаскивания.

Синтаксис:

function GetDragImages: TDragImageList; override;

Описание

Метод GetDragImages вызывается автоматически в течение операции перетаскивания, чтобы позволить дереву. Если узел (а не полное дерево) перемещают, метод GetDragImages возвращает изображение для узла, которое было сгенерировано методом DoStartDrag.

GetHitTestInfoAt method (TCustomTreeView)

Возвращает информацию о позиции точки относительно клиентской области данного узла.

Синтаксис:

function GetHitTestInfoAt(X, Y: Integer): THitTests;

Описание

Метод GetHitTestInfoAt вызывается, чтобы определить, какая часть дерева, если таковые вообще имеются, находится в месте, указанном параметрами X и Y. Метод GetHitTestInfo возвращает тип THitTests. Этот набор описывает возможные узлы дерева под мышью.

TObject Class

Hierarchy

Description

(Please provide a description in your own words. It is illegal to use the wording from the Delphi Help.)

Technical Comments

(Known issues / Documentation clarifications / Things to be aware of)

Examples

(Please provide links to articles/source code that show how to use this item.)

See Also

(Please provide links to items specifically related to this item.)

User Comments/Tips

(Please leave your name with your comment.)

TObject — Тип Delphi

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

Мы уже не раз сталкивались с ситуациями, когда необходимо, например, получить строковое представление числа, или число из его строкового представления. Далеко за примерами таких ситуаций идти не придется, т.к. нам потребуется реализовать соответствующие преобразования даже при попытке отобразить число на экране, например в виде сообщения. Кроме того, ранее мы уже упоминали о существовании таких полезных функций, как StrToInt, IntToStr и т.п. Еще раз вспомним, как они работают:
[cc lang=»delphi»]var
a: integer;
b: string;
begin
a := 123;
b := IntToStr(a);

b := ‘234’;
a := StrToInt(b);
end;
[/cc]
Также существуют функции FloatToStr, StrToFloat, которые выполняют аналогичные действия, но только между строковыми и вещественными типами данных.
Т.е. большинство явных приведений в Delphi выполняется при помощи специальных функций. В число таких функций войдут и DateToStr, DateTimeToStr и многие другие.
Некоторые явные преобразования можно реализовывать и следующим образом:
[cc lang=»delphi»]var
c: char;
b: byte;
begin
b := 69;
c := Char(b); // В результате переменная «c» будет содержать букву «E»
end;[/cc]
В таком случае произойдет преобразование числа в символ по таблице ASCII. Тоже самое можно проделать и наоборот:
[cc lang=»delphi»]var
c: char;
b: byte;
begin
c := ‘E’;
b := Byte(c); // b = 69
end;[/cc]

Неявными считаются те преобразования типов переменных, которые происходят без нашего непосредственного контроля. Обычно они происходят посредством операций присвоения или сравнения. Например:
[cc lang=»delphi»]var
d: double;
a: integer;
begin
a := 100;
d := a;
if a = d then ShowMessage(‘a = d’);
end;[/cc]
Но важно учитывать те случаи, когда присваиваемое значение может принципиально не соответствовать переменной, в которую происходит присвоение. Примером таких случаев является попытка присвоить целочисленной переменной вещественное значение (или математическое выражение, которое сводится к вещественному значению), или попытка выйти за границы допустимых значений у какого-либо типа. Последняя ошибка в некоторых случаях может отлавливаться компилятором еще до компиляции («Constant expression violates subrange bounds»), но чаще всего такую ошибку допускают именно в run-time, т.е. во время работы программы, поэтому стоит с осторожностью применять неявные приведения.

Рассмотрим два класса, один из которых будет являться родительским для другого:
[cc lang=»delphi»]type

TParent = class
public
procedure ParentMethod;
end;

TChild = class(TParent)
public
procedure ChildMethod;
end;[/cc]
В случае с экземплярами классов, возможны привидения объекта дочернего класса к родительскому и наоборот. Рассмотрим эти приведения подробнее:

TDLite

Delphi → Компоненты в массиве TObjectList

Недавно, при написании одной из программ, столкнулся с проблемой большого количества элементов на форме. А именно 20 объектов TShape, 20 объектов TEdit и 100 объектов TMaskEdit.

Проблема заключается в том, что при операциях с этими элементами через программный код, его необходимо было бы тиражировать ровно столько раз, сколько этих элементов, а в каждой новой копии изменять только имя элемента (например, Edit1, Edit2 и т.д.) Недостатки такого метода достаточно серьезны: большая вероятность допустить ошибку при изменении имени в каждом блоке; в случае каких-либо изменений кода, его потребуется менять во всех блоках; исходник разрастается до тысяч строк и становится менее понятен и т.д. Обратится к элементам, как к массиву, в виде Edit[i].Text в цикле не получится.

Что же делать? Мы будем использовать класс TObjectList из модуля Contnrs, который позволит нам добавить все элементы в массив, после чего к ним можно обращаться через индекс.

Как пользоваться? Для начала необходимо добавить в раздел uses модуль Contnrs, затем для каждого типа объекта (TShape, TEdit, TMaskEdit и т.д.) определить класс на основе TObjectList.

Пример для TEdit (размещается между uses и implementation):

Затем добавляем объявленные функции и процедуры после строки implementation. Эти функции отвечают за установление и получение значений через оператор квадратные скобки [].

Теперь можно объявить переменную этого класса и использовать её как массив, предварительно заполнив его нужными элементами.

Объявляем переменную EditList:

Добавляем в массив визуальные элементы (код можно разместить в событии OnCreate формы):

Пример обращения к элементу Edit1.Text:

Исходный текст полностью:

Таким образом, мне удалось уменьшить функцию в 1000 строк до 46 (20 блоков по 46 строк).

Илон Маск рекомендует:  Размер заголовка в rem
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL