мета-данные страницы
  •  

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
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|Назад]]