мета-данные страницы
Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
unilinescustomization [05.09.2022 13:39] Lingri создано |
unilinescustomization [06.09.2022 07:02] (текущий) Lingri |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Настройка внешнего вида и поведения UniLines ====== | ====== Настройка внешнего вида и поведения UniLines ====== | ||
- | Для UniLines-а уже разработаны и предусмотрены различные варианты кастомизации его работы. | + | Для **UniLines**-а уже разработаны и предусмотрены различные варианты кастомизации его работы. |
В целом, их можно разделить на следующие группы: | В целом, их можно разделить на следующие группы: | ||
Строка 9: | Строка 9: | ||
===== Работа с выборными элементами (представление элементов как чекбоксов)===== | ===== Работа с выборными элементами (представление элементов как чекбоксов)===== | ||
- | UniLines позволяет отобразить элементы в виде галочек. Например, как это сделано в модуле DiscExt.pas (внешняя дисконтная схема), для отображения таблицы со скидками на каждую группу слуг. | + | **UniLines** позволяет отобразить элементы в виде галочек. Например, как это сделано в модуле **DiscExt.pas** (внешняя дисконтная схема), для отображения таблицы со скидками на каждую группу слуг. |
{{:pasted:20220905-101535.png}} | {{:pasted:20220905-101535.png}} | ||
- | Включение галочного представления осуществляется за счёт опции ShowCheckBoxes (по умолчанию False). | + | Включение галочного представления осуществляется за счёт опции **ShowCheckBoxes** (по умолчанию **False**). |
- | Включение этой опции, по сути, для каждой ноды VST выставляет свойство CheckType := ctCheckBox. | + | Включение этой опции, по сути, для каждой ноды **VST** выставляет свойство **CheckType := ctCheckBox**. |
- | Опция IsTriStateCheckBoxes отвечает за возможность отображать "смешанное" состояние чекбокса (когда у дочерних элементов как стоят галочки, так и не стоят): | + | Опция **IsTriStateCheckBoxes** отвечает за возможность отображать "смешанное" состояние чекбокса (когда у дочерних элементов как стоят галочки, так и не стоят): |
{{:pasted:20220905-101950.png}} | {{:pasted:20220905-101950.png}} | ||
Строка 65: | Строка 65: | ||
</sxh> | </sxh> | ||
- | Опция ShowCustomCheckBoxes позволяет подгрузить специальные иконки для чекбоксов. У нас они берутся из ImgDMForm.ilChecksTree32: | + | Опция **ShowCustomCheckBoxes** позволяет подгрузить специальные иконки для чекбоксов. У нас они берутся из **ImgDMForm.ilChecksTree32**: |
<sxh Delphi> | <sxh Delphi> | ||
Строка 85: | Строка 85: | ||
</sxh> | </sxh> | ||
- | Для работы с чекбоксами в рамках UniLines реализованы на текущий момент следующие функции/процедуры: | + | Для работы с чекбоксами в рамках **UniLines** реализованы на текущий момент следующие функции/процедуры: |
* function GetCheckedValues(const ValueName: string; GetSQLStr: boolean = True; Delimiter: string = ','): string; - через указанный разделитель собирает все значения ValueName, у которых отмечены галочки; | * function GetCheckedValues(const ValueName: string; GetSQLStr: boolean = True; Delimiter: string = ','): string; - через указанный разделитель собирает все значения ValueName, у которых отмечены галочки; | ||
Строка 93: | Строка 93: | ||
* procedure Inversion; - инвертировать галочки у всех нод. | * procedure Inversion; - инвертировать галочки у всех нод. | ||
- | Изменение галочек осуществляется через свойство ноды CheckState, например: | + | Изменение галочек осуществляется через свойство ноды **CheckState**, например: |
<sxh Delphi> | <sxh Delphi> | ||
procedure TUniLinesFrame.CheckAll; | procedure TUniLinesFrame.CheckAll; | ||
Строка 113: | Строка 113: | ||
===== Управление выбранными элементами ===== | ===== Управление выбранными элементами ===== | ||
- | Выбранной нодой, если по-простому, можно считать ту ноду, по которой случился клик. Через ctrl выбранных нод может оказаться несколько: | + | Выбранной нодой, если по-простому, можно считать ту ноду, по которой случился клик. Через **ctrl** выбранных нод может оказаться несколько: |
{{:pasted:20220905-105127.png}} | {{:pasted:20220905-105127.png}} | ||
- | Основное управление выбранными нодами осуществляется через VST, например | + | Основное управление выбранными нодами осуществляется через **VST**, например |
<sxh Delphi> | <sxh Delphi> | ||
VST.Selected[LastNode] := True; | VST.Selected[LastNode] := True; | ||
Строка 132: | Строка 132: | ||
===== Кастомизация управляющих кнопок ===== | ===== Кастомизация управляющих кнопок ===== | ||
- | Для UniLines-а предусмотрено несколько методов, позволяющих добавить кастомные кнопки и элементы меню, чтобы можно было сделать уникальное поведение этого фрейма на разных формах, без необходимости изменения в дизайн-тайме. | + | Для **UniLines**-а предусмотрено несколько методов, позволяющих добавить кастомные кнопки и элементы меню, чтобы можно было сделать уникальное поведение этого фрейма на разных формах, без необходимости изменения в дизайн-тайме. |
==== Добавление элементов выпадающего меню в заголовок ==== | ==== Добавление элементов выпадающего меню в заголовок ==== | ||
Строка 180: | Строка 180: | ||
==== Добавление меню в выпадающий список дерева ==== | ==== Добавление меню в выпадающий список дерева ==== | ||
- | Имеется в виду окно, возникающее при правом клике на элементе UniLines | + | Имеется в виду окно, возникающее при правом клике на элементе **UniLines** |
{{:pasted:20220905-130209.png}} | {{:pasted:20220905-130209.png}} | ||
Строка 191: | Строка 191: | ||
</sxh> | </sxh> | ||
- | * ACaption - Название пункта меню; | + | * **ACaption** - Название пункта меню; |
- | * AOnClick - событие при клике; | + | * **AOnClick** - событие при клике; |
- | * AImageIndex - номер иконки (берётся из ImgDMForm.ilAll); | + | * **AImageIndex** - номер иконки (берётся из **ImgDMForm.ilAll**); |
- | * AVisible - видимость пункта меню; | + | * **AVisible** - видимость пункта меню; |
- | * DoHookPopup - позволяет отрисовывать меню в скине. | + | * **DoHookPopup** - позволяет отрисовывать меню в скине. |
Из интересного тут появляется возможность рулить видимостью пункта меню. | Из интересного тут появляется возможность рулить видимостью пункта меню. | ||
Строка 240: | Строка 240: | ||
</sxh> | </sxh> | ||
- | * ACaption - название кнопки; | + | * **ACaption** - название кнопки; |
- | * AAfterPosition - позиция кнопки (есть значения tpsEndButtons = 0 - после всех основных кнопок и tpsEndCheckbox = 1 - после всех чекбоксов); | + | * **AAfterPosition** - позиция кнопки (есть значения tpsEndButtons = 0 - после всех основных кнопок и tpsEndCheckbox = 1 - после всех чекбоксов); |
- | * AImageIndex - индекс картинки, берётся из ImgDMForm.ilAll; | + | * **AImageIndex** - индекс картинки, берётся из ImgDMForm.ilAll; |
- | * AOnClick - событие нажатия; | + | * **AOnClick** - событие нажатия; |
- | * AIsCheck - должна ли кнопка быть чекбоксом. | + | * **AIsCheck** - должна ли кнопка быть чекбоксом. |
Пример: | Пример: | ||
Строка 271: | Строка 271: | ||
Под стандартными подразумеваются кнопки "Создать", "Изменить", "Редактировать", "Печать" и прочие подобные, а также соответствующие им элементы выпадающего меню. | Под стандартными подразумеваются кнопки "Создать", "Изменить", "Редактировать", "Печать" и прочие подобные, а также соответствующие им элементы выпадающего меню. | ||
- | В UniLines-е предусмотрено множество вариаций по их отображению, также как и отображение целых панелей. Подробно рассматривать не будем, названия должны понятно отражать их суть. | + | В **UniLines**-е предусмотрено множество вариаций по их отображению, также как и отображение целых панелей. Подробно рассматривать не будем, названия должны понятно отражать их суть. |
<sxh Delphi> | <sxh Delphi> | ||
Строка 292: | Строка 292: | ||
===== Текстовые опции===== | ===== Текстовые опции===== | ||
- | Также, в UniLines-е возможно настраивать ячейки с информацией, правила её отображения и возможность изменения. | + | Также, в **UniLines**-е возможно настраивать ячейки с информацией, правила её отображения и возможность изменения. |
==== Настройка отображения ==== | ==== Настройка отображения ==== | ||
Строка 298: | Строка 298: | ||
<sxh Delphi> | <sxh Delphi> | ||
property IsMultiline: boolean - добавляет всем нодам настройку vsMultiline (Node.States:=Node.States+[vsMultiline]), поддерживающую многострочность текста в соответствии с шириной колонки; | property IsMultiline: boolean - добавляет всем нодам настройку vsMultiline (Node.States:=Node.States+[vsMultiline]), поддерживающую многострочность текста в соответствии с шириной колонки; | ||
- | property FullText: boolean - значение True предотвращает обрезание текста, в противном случае весь невлезший текст будет заменён многоточием; | + | property IsHtml: boolean - при True позволяет обрабатывать html-теги, а также позволяет подключить ряд опций по обработке текста; |
- | property FullTextIsCenter: boolean - при True | + | property FullText: boolean - при True предотвращает обрезание текста, в противном случае весь невлезший текст будет заменён многоточием (только для IsHtml = True); |
- | property IsEditable: boolean read FIsEditable write SetIsEditable; | + | property FullTextIsCenter: boolean - при True центрирует текст по высоте (только для IsHtml = True); |
- | + | property SmallNodeHeight: boolean - нода имеет фиксированную высоту (25 пикселей), иначе 37; её включение блокирует опцию AutoCalcHodeHeight; | |
- | property IsHtml: boolean read FIsHtml write SetIsHtml; | + | property AutoCalcHodeHeight: boolean - автоматический расчёт требуемой высоты ноды (только для IsHtml = True); |
- | + | property MinNodeHeight: integer - если не равен 0, то выступает в качестве значения высоты ноды при включённой SmallNodeHeight (только для IsHtml = True); | |
- | | + | |
- | property SmallNodeHeight: boolean read FSmallNodeHeight write SetSmallNodeHeight; | + | |
- | property AutoCalcHodeHeight: boolean read FAutoCalcHodeHeight write SetAutoCalcHodeHeight; | + | |
- | property MinNodeHeight: integer read FMinNodeHeight write SetMinNodeHeight; | + | |
- | property AutoEdit: boolean read FAutoEdit write SetAutoEdit; | + | |
</sxh> | </sxh> | ||
+ | Таким образом, в стандартном **ULF** разрешается только многострочность и ручная регулировка высоты ноды. Но при включении **IsHtml** становится возможным серьёзно управлять отображением текста. | ||
+ | |||
+ | ==== Настройка редактирования ==== | ||
+ | |||
+ | <sxh Delphi> | ||
+ | property AutoEdit: boolean - включает возможность редактирования колонок (при клике на ней можно вписать своё значение). Вызывает процедуру VST.EditNode | ||
+ | </sxh> | ||
+ | |||
+ | При редактировании появляется возможность использовать несколько полезных обработчиков: | ||
+ | |||
+ | <sxh Delphi> | ||
+ | procedure VSTEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); - перед редактированием колонки Column можно изменить её Allowed, чтобы запретить/разрешить редактирование; | ||
+ | |||
+ | procedure VSTNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; NewText: String); - срабатывает, когда в колонке Column появляется NewText, который можно получить для какой-либо обработки. В этой процедуре у ноды можно изменить её текст. | ||
+ | </sxh> | ||
+ | |||
+ | |||
+ | [[https://agbis.getcourse.ru/pl/teach/control/lesson/view?id=254286906|Пройти тест]] | ||
+ | |||
+ | [[https://doc.agb.is/develop/unilines|Назад]] |