Инструменты пользователя

Инструменты сайта


programmirovanie_v_dx:razrabotka_rasshirenij

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
programmirovanie_v_dx:razrabotka_rasshirenij [2020/03/15 22:02]
7bit
programmirovanie_v_dx:razrabotka_rasshirenij [2020/06/30 10:55]
7bit
Строка 1: Строка 1:
 ====== 25. Разработка расширений ====== ====== 25. Разработка расширений ======
-В DataExpress расширения бывают двух видов: функции и действия. Они разрабатываются средствами DataExpress и представляют собой скрипты на Pascal Script. В редакторе скриптов создается модуль расширений,​ пишется скрипт,​ затем используется в текущей базе или экспортируется для использования в других базах. В одном модуле могут быть расширения обоих видов. Расширения позволяют непрограммистам использовать дополнительный функционал.+В DataExpress расширения бывают двух видов: функции и действия. Они разрабатываются средствами DataExpress и представляют собой скрипты на Pascal Script. В редакторе скриптов создается модуль расширений,​ пишется скрипт,​ затем используется в текущей базе или экспортируется для использования в других базах. В одном модуле могут быть расширения обоих видов. Расширения позволяют непрограммистам использовать дополнительный функционал. Большое количество расширений и исходников доступно на [[https://​forum.mydataexpress.ru/​viewforum.php?​f=16|форуме]].
  
 ===== Описание модуля ===== ===== Описание модуля =====
-В специальном комментарии ''​{@module .. @}''​ пишется автор, версия ​и описание модуля расширений. ​+ 
 +В специальном комментарии ''​{@module .. @}''​ пишется автор, версияописание модуля расширений ​и, необязательно,​ ссылка на домашнюю страницу расширения
  
 <code delphi> <code delphi>
Строка 9: Строка 10:
 Author=Автор ​ Author=Автор ​
 Version=1.0 Version=1.0
 +HomePage=https://​forum.mydataexpress.ru/​viewtopic.php?​f=16&​t=2429
 Description=Назначение модуля ​ Description=Назначение модуля ​
 @} @}
Строка 14: Строка 16:
 </​code>​ </​code>​
  
-Всего ​поля:+{{ :​programmirovanie_v_dx:​spisok_rasshirenij.jpg?​400|Описание модуля}} 
 + 
 +Всего ​поля:
   * Author – информация об авторе.   * Author – информация об авторе.
   * Version – версия модуля.   * Version – версия модуля.
 +  * HomePage - ссылка на домашнюю страницу расширения. Если используется,​ то в окне "​Расширения"​ кнопка "​Домашняя страница"​ станет активной. Также в описании функций,​ действий в заголовке появится многоточие ''​...''​ - это ссылка на домашнюю страницу.
   * Description – краткое описание модуля. Описание может быть записано в несколько строк. ​   * Description – краткое описание модуля. Описание может быть записано в несколько строк. ​
    
-Данный комментарий необязательный,​ но если он указывается,​ то нужно строго соблюдать состав и последовательность полей: author, version, description. Информация о модуле отображается в окне «Расширения».\\ +Данный комментарий необязательный,​ но если он указывается,​ то нужно строго соблюдать состав и последовательность полей: author, version, homepage, description. Информация о модуле отображается в окне «Расширения».
- +
-{{ :​programmirovanie_v_dx:​ris_20.png?​nolink&​400 |Рис 20}}\\+
  
 ===== Функции ===== ===== Функции =====
Строка 107: Строка 110:
 Параметры:​ Параметры:​
   * Id - уникальный идентификатор действия. Программа ищет действие по его идентификатору. Это любая последовательность символов,​ но лучше использовать для этого GUID. В редакторе скриптов GUID можно вставить комбинацией Ctrl-Shift-G.   * Id - уникальный идентификатор действия. Программа ищет действие по его идентификатору. Это любая последовательность символов,​ но лучше использовать для этого GUID. В редакторе скриптов GUID можно вставить комбинацией Ctrl-Shift-G.
-  * Target - определяет,​ где можно применять действие:​ в форме, кнопке,​ при запуске базы или везде. В редакторе скриптов в комментариях @action должен идти после атрибута id. Допустимые значения соответственно:​ form, button, main, all. При выборе действия в списке будут только допустимые действия.+  * Target - определяет,​ где можно применять действие:​ в форме, кнопке,​ при запуске базы или везде. Допустимые значения соответственно:​ form, button, main, all. При выборе действия в списке будут только допустимые действия. Данный параметр необязателен,​ но если он указывается,​ то должен идти после параметра id
   * OrigName - имя процедуры или функции в модуле.   * OrigName - имя процедуры или функции в модуле.
   * Name - название действия для пользователя.   * Name - название действия для пользователя.
-  * Group - группа,​ к которой принадлежит действие. Сочетание группы и названия должно быть уникальным.+  * Group - группа,​ к которой принадлежит действие. Возможно создание подгрупп. Для этого группы разделяются слешем,​ например:​ Группа/​Подгруппа/​Подгруппа. Сочетание группы и названия действия должно быть уникальным.
   * UI - описание интерфейса в формате XML. Компоненты используются для настройки действия.   * UI - описание интерфейса в формате XML. Компоненты используются для настройки действия.
-  * Description - описание действия.+  * Description - описание действия ​в формате html.
  
 ==== Описание интерфейса. Параметр UI  ==== ==== Описание интерфейса. Параметр UI  ====
-Для ​описания интерфейса действия ​служит ряд тегов. Каждый тег соответствует определенному ​компоненту:+ 
 +{{ :​programmirovanie_v_dx:​komponenta_dejstvija.jpg?​400|Компоненты действия}} 
 +Любое действие настраивается путем заполнения ​различных компонентов и выбора значений из списков. Состав компонентов,​ предназначенных для настройки ​действия, задается в параметре ui в формате xml. Каждому ​тегу соответствует определенный компонент, а именно:
   * text - поле для ввода текста;​   * text - поле для ввода текста;​
   * number - поле для ввода числа;   * number - поле для ввода числа;
Строка 146: Строка 151:
   * items - элементы списка;​   * items - элементы списка;​
   * source - компонент-источник;​   * source - компонент-источник;​
-  * filter - фильтр списка.+  ​* form - форма, используемая в выражении фильтра;​ 
 +  ​* filter - фильтр списка
 +  * texthint - подсказка;​ 
 +  * editing - редактирование списка;​ 
 +  * noform - не использовать форму.
  
-Каждый компонент должен иметь обязательный ​атрибут ​name - имя ​компонента (для ​разделителя необязательно). Имя должно содержать только символы латинского алфавита,​ цифры и символ ​подчеркивания. Имя ​не может ​начинаться с цифры, должно быть уникальным в пределах интерфейса.+Рассмотрим ​несколько общих ​атрибутов, которые применяются во всех компонентах.
  
-Элементы ​списка items отделяются друг от друга точкой с запятой: один;два;три.+//Name - имя компонента.// Каждый компонент обязательно должен иметь этот атрибут, ​исключение лишь составляет разделитель divider, ​для него указывать имя необязательно. Имя ​должно содержать только символы латинского алфавита,​ цифры и символ подчеркивания. Имя не может начинаться с цифры, ​должно быть уникальным ​в пределах интерфейса.
  
-Такие компоненты, как expr, childform, query, object, field, component, могут зависеть от другого ​компонента. Имя этого ​компонента указывается в атрибуте ​source.+//Caption - поясняющая надпись.// Атрибут caption хоть и необязательныйно также важный атрибут. Он задает некий поясняющий текст над компонентом. В случае с флажком (checkbox), текст будет находится ​справа от флажка. В случае с разделителем (divider) текст ​будет непосредственно в разделителе.
  
-Атрибут ​filter используется в тегах: filefield и components.+//Required - обязательное.//​ Этот атрибут ​означает,​ что компонент обязательно должен быть заполнен или выбрано значение. Значение атрибута должно быть равно ​единице. Пример:​ 
 +<​code><​text name="​title"​ caption="​Заголовок"​ required="​1"/></​code>​ 
 +Атрибут не действует для компонентов gridcolor, checkbox, divider.
  
-==== Атрибуты в тегах ====+//​DefaultValue - значение по умолчанию.//​ Компонент может иметь заранее заданное значение. Если вы задаете значение по умолчанию для списка (list), убедитесь что значение совпадает с одним из возможных значений атрибута items, ​включая регистр символов. Для флажка возможно задание только одного значения по умолчанию - 1.
  
-Рассмотрим некоторые атрибуты применительно к тегам. +//Texthint - подсказка.// Если задан этот атрибут, то в компоненте появится подсказка, ​которая исчезает при заполнении компонента. Очень ​удобно использовать в качестве ​примера заполнения компонента. Действует только в следующих элементах: text, number, file, folder, expr, filter, image
  
-=== Filter в теге file === +=== Text - поле для ввода текста ​===
-В данном случае filter определяет фильтр диалогового окна ​выбора файла. Синтаксис его точно ​такой же, как в компонентах TOpenDialog и TSaveDialog. Пример:​+
  
-<​code><​file name="​file"​ caption="​Запустить программу" filter="​Приложения|*.exe" /></​code>​+Один из самых ​простых компонентов - поля для ввода ​произвольного текста. В нем могут использоваться все общие атрибуты.
  
-=== Source в теге expr === +=== Number - поле для ввода ​числа ​===
-Определяет форму (form), ​в контексте которой вычисляется выражение. Если атрибут не задан, то используется текущая форма. Пример:​+
  
-<​code><​form name="​myform"​ caption="​Форма" /> +Единственное его отличие от компонента Text - это ввод только цифр. Допустимо вводить только целые числа без знака.
-<expr name="​myexpr"​ caption="​Выражение" source="​myform"​ /></​code>​+
  
-=== Source в теге filter === +=== Checkbox - флажок ​===
-Определяет форму (form), данные которой нужно отфильтровать. Если атрибут не задан, то используется текущая форма.+
  
-=== Source в теге form === +Данный компонент может принимать только два значения: 1 и 0, отмечено и неотмечено. ​ 
-Может ​определять запрос (query), формы ​которого показать в списке. Если атрибут не указан, то список содержит все основные формы.+
  
-=== Source в теге childform === +=== File - поле с кнопкой ​выбора ​файла ===
-Может определять форму (form) или объект (object). Если указан объект, то в списке будут все подчиненные формы той формы, на которую ссылается объект. Если источник не указан, то используется текущая форма.+
  
-=== Source в теге query === +Компонент представляет собой поле для ввода текста с кнопкой. Вы можете ввести путь к файлу или выбрать его из стандартного диалога, ​нажав ​на кнопку. При помощи атрибута filter ​(фильтр) можно указать какие ​типы файлов ​будет показаны в диалоге. Фильтр задается ​по следующей ​схеме: 
-Может определять форму (form), подчиненную форму (childform) ​или объект (object). Атрибут ​определяет запросы какой формы будут в списке. Если источник не указанто используется текущая форма.+<​code>​описание|маска|описание|маска|...|описание|маска</​code>​ 
 +Например:​ 
 +<​code>​Файлы документов Word|*.docx;​*.doc|Файлы таблиц Excel|*.xlsx;​*.xls|Все файлы|*.* 
 +Файлы PDF|*.pdf</​code>​ 
 +Как видно из примера, маски файлов могут перечисляться через точку с запятой.
  
-=== Source в теге object === +=== Folder - поле с кнопкой выбора ​папки ===
-Может определять форму или подчиненную форму. Если атрибут ​не задан, то используется текущая форма.+
  
-=== Source ​в теге ​field === +Компонент представляет собой поле для ввода текста с кнопкой выбора папки из стандартного диалога. Возможно ввести путь к папке непосредственно в поле ввода. 
-Может определять форму, подчиненную форму, объект или запрос. Если источник не указан,​ то используется текущая форма. Атрибут ​filter ​определяет поля какого типа показать в списке. ​Типы отделяются точкой с запятой. ​Возможные значения: ​  ​+ 
 +=== Expr - поле для ​ввода выражения === 
 + 
 +Компонент состоит из поля ввода выражения и кнопки,​ которая открывает редактор выражений. В компоненте могут использоваться атрибуты source или noform. Примеры использования:​ 
 + 
 +<​code><​form name="​myform"​ caption="​Выберите форму"/>​ 
 +<expr name="​expr"​ caption="​Выражение"​ source="​myform"/>​ 
 +<expr name="​myexpr"​ caption="​Выражение текущей формы"/>​ 
 +<expr name="​calc"​ caption="​Выражение без формы"​ noform="​1"/></​code>​ 
 + 
 +Атрибут source указывает форму (form или childform), ​поля которой можно использовать в выражении. В редакторе выражений атрибуту соответствует кнопка "​Выбрать поле формы"​. Если source не указан,​ то такой формой считается текущая форма. В качестве значения source выступает имя компонента (атрибут name).  
 +Если вы не хотите,​ чтобы была возможность выбирать поля текущей ​формы, то укажите атрибут noform. Атрибуты source и noform не имеет смысла использовать вместе. 
 + 
 +=== Filter - поле для ввода выражения фильтра === 
 + 
 +Компонент используется для ввода фильтра формы. Текст можно набирать прямо в компоненте или в редакторе выражений. Возможно использование атрибутов sourceform и noform. Примеры:​ 
 +<​code><​filter name="​filter"​ caption="​Простой фильтр текущей формы"/>​ 
 +<form name="​frm"​ caption="​Выберите форму"/>​ 
 +<filter name="​filter2"​ caption="​Фильтрация выбранной формы"​ source="​frm"/>​ 
 +<filter name="​filter3"​ caption="​Фильтрация выбранной формы и применение ее полей в выражении"​ source="​frm"​ form="​frm"/>​ 
 +<filter name="​filter4"​ caption="​Фильтрация формы без использования полей текущей формы в выражении"​ source="​frm"​ noform="​1"/></​code>​ 
 + 
 +Атрибут source определяет форму, к которой применяется фильтр. В редакторе выражений ему соответствует кнопка "​Выбрать поле источника". Атрибут form определяет форму, поля которой можно использовать в выражении. В редакторе выражений атрибуту соответствует кнопка "​Выбрать поле ​формы". Если source или form не указаныто будет использована текущая форма. Если вам необходимо исключить выбор поля формы, то используйте атрибут noform. 
 + 
 +=== List - список ​значений === 
 + 
 +Компонент позволяет выбрать ​одно значение из списка или ввести свое значение. Список значений задается атрибутом items. Значения отделяются друг от друга точкой с запятой. По умолчанию компонент позволяет выбрать только значение из списка. Если ​вам необходимо дать возможность ввести свое значение, используйте атрибут editing. Примеры:​ 
 +<​code><​list name="​mylist"​ caption="​Фиксированный список"​ items="​Один;​Два;​Три;​Четыре"​ defaultvalue="​Один"/>​ 
 +<list name="​mylist2"​ caption="​Редактируемый список" items="​Красный;​Оранжевый;​Желтый;​Зеленый"​ editing="​1"/></​code>​ 
 +Значение по умолчанию для фиксированного списка должно в точности совпадать с одним из значений спискавключая регистр символов. 
 + 
 +=== Form - список основных форм (без ​подчиненных) === 
 + 
 +Компонент позволяет выбрать форму из списка основных форм. Атрибут source может указывать на запрос (тег query) или отчет (тег report). В этом случае в списке будут формы из источников отбора. 
 + 
 +=== ChildForm - список подчиненных форм === 
 + 
 +Компонент позволяет выбрать подчиненную форму из списка. Атрибут source может указывать на основную форму, которой принадлежат подчиненные формы. Если атрибут source не указан,​ то в списке будут подчиненные формы ​текущей формы. Кроме формы в атрибуте source может быть указан объект (object). В этом случае в списке будут подчиненные формы той формы, на которую ссылается объект. Примеры:​ 
 + 
 +<​code><​childform name="​tbl"​ caption="​Подчиненная форма текущей формы"/>​ 
 +<form name="​frm"​ caption="​Основная форма"/>​ 
 +<​childform name="​tbl2"​ caption="​Подчиненная формы выбранной формы"​ source="​frm"/>​ 
 +<object name="​obj"​ caption="​Объект"/>​ 
 +<​childform name="​tbl3"​ caption="​Подчиненная форма объекта"​ source="​obj"/></​code>​ 
 + 
 +=== Query - список запросов === 
 + 
 +Компонент позволяет выбрать запрос из списка. Атрибут ​source указывает на форму, запросы которой будут в списке. Если атрибут не указан,​ в списке будут запросы текущей формы. В качестве source может быть указана не только основная форма (form), но и подчиненная форма (childform) или объект (object). 
 + 
 +=== Object - список объектов === 
 + 
 +Компонент позволяет выбрать объект из списка. Атрибут source может указывать на форму (form или childform). Если source не указан,​ то список будет содержать объекты текущей формы. 
 + 
 +=== Field - список ​полей === 
 + 
 +Компонент позволяет выбрать поле из списка. Атрибут source может указывать ​на форму (form или childform), запрос (query), отчет (report) или объект (object). Если source не указан,​ то в списке ​будут поля текущей формыАтрибут filter ​позволяет показывать в списке поля определенного типа. Типы полей перечисляются ​через ​точку с запятой. ​Допустимые значения:​
   * text - текстовые поля (текст,​ список,​ заметка), ​   * text - текстовые поля (текст,​ список,​ заметка), ​
   * number - число, ​   * number - число, ​
Строка 196: Строка 259:
   * checkbox - флажок, ​   * checkbox - флажок, ​
   * file - файл, ​   * file - файл, ​
-  * image - изображение. ​ +  * image - изображение. 
-  +Примеры: 
-Пример:​+<​code>​ 
 +<field name="​field"​ caption="​Все поля текущей формы"/>​ 
 +<field name="​field2"​ caption="​Поля текущей формы определенного типа"​ filter="​text;​number;​date"/>​ 
 +<form name="​frm"​ caption="​Форма"/>​ 
 +<field name="​field3"​ caption="​Поля выбранной формы"​ source="​frm"/>​ 
 +<object name="​obj"​ caption="​Объект"/>​ 
 +<field name="​field4"​ caption="​Поле объекта"​ source="​obj"/>​ 
 +<report name="​rp"​ caption="​Отчет"/>​ 
 +<field name="​field5"​ caption="​Поле отчета"​ filter="​number;​counter"/>​ 
 +</​code>​
  
-<​code><​form name="​myform"​ caption=орма" /> +=== Component - список компонентов ===
-<field name="​myfield"​ caption="​Поле" source="​myform"​ filter="​text;​number;​date"​ /></​code>​+
  
-=== Source в теге components === +Компонент позволяет выбрать какой-либо компонент из списка. Атрибут source может указывать на форму ​(form или childform) или объект (object). Если ​source ​не указан, то в списке будут ​поля текущей формы. Атрибут filter позволяет ​показывать в списке ​компоненты ​определенного типа. Типы ​компонентов ​перечисляются через точку с запятой. ​Допустимые значения:
-Может определять ​форму или подчиненную форму. Если ​источник ​не задан, то используется текущая форма. Атрибут filter ​определяет компоненты ​какого типа ​показать в списке. Типы перечисляются через точку с запятой. ​В качестве типа используется имя класса. Пример:+
  
-<​code>​ +  * TdxLabel - надпись;​ 
-<form name="​myform"​ caption="​Форма"​ />+  * TdxEdit - текст;​ 
 +  * TdxCalcEdit - число;​ 
 +  * TdxDateEdit - дата; 
 +  * TdxTimeEdit - время;​ 
 +  * TdxCounter - счетчик;​ 
 +  * TdxMemo - заметка;​ 
 +  * TdxCheckBox - флажок;​ 
 +  * TdxComboBox - список;​ 
 +  * TdxLookupComboBox - объект;​ 
 +  * TdxObjectField - поле объекта;​ 
 +  * TdxImage - фоновое изображение;​ 
 +  * TdxDBImage - изображение;​ 
 +  * TdxShape - фигура;​ 
 +  * TdxFile - файл; 
 +  * TdxGrid - таблица;​ 
 +  * TdxQueryGrid - запрос;​ 
 +  * TdxPivotGrid - сводная таблица;​ 
 +  * TdxGroupBox - группа;​ 
 +  * TdxPageControl - закладки;​ 
 +  * TdxButton - кнопка;​ 
 +  * TdxChart - диаграмма. 
 + 
 +Пример:​ 
 + 
 +<​code><​form name="​myform"​ caption="​Форма"​ />
 <​component name="​mycmp"​ caption="​Компонент"​ source="​myform"​ filter="​TdxEdit;​TdxComboBox;​TdxLabel;​TdxButton"​ /></​code>​ <​component name="​mycmp"​ caption="​Компонент"​ source="​myform"​ filter="​TdxEdit;​TdxComboBox;​TdxLabel;​TdxButton"​ /></​code>​
  
-Зависимость может иметь несколько уровней. ​+=== Report - список отчетов ​===
  
-Пример: +Компонент позволяет выбрать отчет из списка.
-<​code>​ +
-<form name="​myform"​ caption="​Форма"​ /> +
-<​childform name="​mychildform"​ caption="​Таблица"​ source="​myform"​ /> +
-<object name="​obj"​ caption="​Объект" source="​mychildform"​ /> +
-<​childform name="​objchild"​ caption="​Таблица объекта" source="​obj"​ /> +
-<field name="​field"​ caption="​Поле"​ source="​objchild"​ /> +
-</​code>​+
  
-Если в родительском компоненте меняется значение, то подчиненные компоненты очищаются. Это относится только к спискам.+=== Template - список ​шаблонов ===
  
-=== Атрибут items === +Компонент позволяет ​выбрать шаблон из списка ​или ввести путь к шаблону вручную. Список заполняется ​шаблонами,​ хранящиеся в папке шаблонов и в ее подпапках.
-Используется в паре с тегом list и определяет ​элементы списка. Элементы перечисляются ​через точку ​с запятой.+
  
-=== Атрибут required ​=== +=== Color - цвет ===
-Можно включить в любой тег (правда,​ для grid он не имеется смысла). При сохранении программа выдаст сообщение,​ если какой-то из обязательных параметров не заполнен.+
  
-=== Атрибут ​defaultvalue === +Компонент представляет ​из себя кнопку с выбранным цветом. При нажатии на кнопку открывается стандартный диалог выбора цвета. Значение по умолчанию может быть задано в виде названия цвета или шестнадцатиричного числа. Шестнадцатиричное число представляет собой ​значения красного,​ зеленого и синего цветов и задается по схеме: $BBGGRR, где BB - синий, GG - зеленый, RR - красный цвет. Значение каждого из цветов должно быть в пределах ​от 00 до FF. Доступные названия цветов:​ clBlack ($000000), clMaroon ($000080), clGreen ($008000), clOlive ($008080), clNavy, ($800000), clPurple ($800080), clTeal ($808000), clGray ($808080), clSilver ($C0C0C0), clRed, ($0000FF), clLime, ($00FF00), clYellow, ($00FFFF), clBlue ($FF0000), clFuchsia ($FF00FF), clAqua ($FFFF00), clLtGray ($C0C0C0), clDkGray ($808080), clWhite ($FFFFFF), clMoneyGreen ($C0DCC0), ​ clSkyBlue ($F0CAA6), clCream ($F0FBFF), clMedGray ($A4A0A0). Специальные цвета: clNone ​   ($1FFFFFFF) - нет цвета (кнопка заштрихована), clDefault ($20000000 - цвет, заданный в системе по умолчанию).
-Определяет значение по умолчанию ​для компонента. Для флажка возможно единственное значение: 1. Остальные ​значения будут проигнорированы.+
  
-=== Атрибут caption === +=== Image - изображение из галереи ===
-Определяет поясняющую надпись. Для разделителя также можно указать надпись.+
  
-=== Атрибут noform === +Компонент представляет собой ​поле ​для ввода ​текста и кнопку, открывающую галерею изображений. Вы можете ввести название изображение вручную или выбрать ​из галереи. В галерееоткрытой в редакторе ​действий невозможно ​удалять и переименовывать изображения.
-Используется в теге expr. Если прописать ​noform=%%"​1"​%%, то в редакторе ​выражений нельзя будет выбрать поле формы.+
  
-===Таблицы ====+=== Grid - Таблица ===
 Вы можете задавать не просто отдельные компоненты,​ а целые массивы компонентов. Для этого используются таблицы. Синтаксис очень простой. Чтобы определить столбцы и типы компонентов,​ достаточно вышеперечисленные теги перечислить между тегами ''<​grid>​..</​grid>''​. ​ Вы можете задавать не просто отдельные компоненты,​ а целые массивы компонентов. Для этого используются таблицы. Синтаксис очень простой. Чтобы определить столбцы и типы компонентов,​ достаточно вышеперечисленные теги перечислить между тегами ''<​grid>​..</​grid>''​. ​
  
Строка 250: Строка 332:
 </​code>​ </​code>​
  
-Таблице можно задать высоту с помощью атрибута height. Текст заголовков берется из атрибута caption вложенных тегов. Если ширина width не задана,​ то ширина колонки определяется автоматически. Ширину колонок менять нельзя. Если в таблице определен только один компонент,​ то заголовок таблицы скрывается. Если в таблице определены зависимые компоненты,​ то при изменении значения в родительском компоненте ячейки НЕ стираются. +Таблице можно задать высоту с помощью атрибута height. Текст заголовков берется из атрибута caption вложенных тегов. Если ширина width не задана,​ то ширина колонки определяется автоматически. Ширину колонок менять нельзя. Если в таблице определен только один компонент,​ то заголовок таблицы скрывается. Если в таблице определены зависимые компоненты ​(имеют атрибут source), то при изменении значения в родительском компоненте ячейки НЕ стираются. 
-Символы внутри атрибутов ''<,​ >''​ и ''"''​ должны быть заменены на ''&​lt;​ &gr; &​quot;''​ соответственно.+Символы внутри атрибутов ''<,​ >''​ и ''"''​ должны быть заменены на ''&​lt;​ &gt; &​quot;''​ соответственно. 
 ==== Сопоставление компонентов с параметрами процедуры ==== ==== Сопоставление компонентов с параметрами процедуры ====
-Число параметров в процедуре должно совпадать с количеством компонентов, ​не включая ​компоненты в тегах grid и разделители ​divider+Число параметров в процедуре должно совпадать с количеством компонентов, ​исключая ​разделители divider. Таблица grid с ее содержимым считается за один параметр. 
 + 
 +Каждый параметр должен иметь тип Variant. Параметр для ​тега grid должен ​иметь тип TVariantArray2d,​ который представляет собой двухмерный массив:​ ''​array of array of Variant''​. Первое измерение - это строки,​ второе - столбцы. Параметры и элементы массива могут быть ​двух типов: LongInt (компоненты number, checkbox, color) и String (остальные). Параметр может быть равен NULL, если компонент был добавлен позже, чем были сохранены параметры
  
-Каждый параметр должен иметь тип Variant. Параметр ​для тега grid должен иметь тип TVariantArray2d, ​который представляет собой двухмерный массив: ''​array of array of Variant''​. Первое измерения - это строки, второе столбцы. Параметры ​и элементы массива могут быть двух ​типов: LongInt ​(компоненты numbercheckboxcolor) и String (остальные). Параметр может быть равен NULL, если компонент был добавлен позже, чем были сохранены параметры.+Вместо Variant ​для параметров допускается указывать совместимый тип: 
 +  * checkbox - Boolean; 
 +  * color - TColor; 
 +  * number - LongInt, ​IntegerByte...; 
 +  * остальные ​- String
  
 ==== Новые версии действий ==== ==== Новые версии действий ====
Строка 264: Строка 353:
 Действия формы начинают свое выполнение при создании формы. В принципе,​ на этом этапе их работа может быть закончена. Но это относится только к простейшим действиям,​ которые,​ например,​ устанавливают свойство компонента. Основное же назначение таких действий – подключаться к событиям формы и других компонентов и выполняться при наступлении этих событий. Действие добавляются в свойстве формы "​Действия формы"​. Действия формы начинают свое выполнение при создании формы. В принципе,​ на этом этапе их работа может быть закончена. Но это относится только к простейшим действиям,​ которые,​ например,​ устанавливают свойство компонента. Основное же назначение таких действий – подключаться к событиям формы и других компонентов и выполняться при наступлении этих событий. Действие добавляются в свойстве формы "​Действия формы"​.
    
-Действие формы сложнее разработать,​ чем действие кнопки,​ потому что приходиться заботиться о сохранении параметров функции в каких-либо структурах для того, чтобы воспользоваться ими затем при наступлении события,​ к которому подключилось действие. Кроме того ​ необходимо сохранять старые обработчики событий и вызывать их в новых, чтобы не нарушить работу ​скрипта и других расширений.+Действие формы сложнее разработать,​ чем действие кнопки,​ потому что приходиться заботиться о сохранении параметров функции в каких-либо структурах для того, чтобы воспользоваться ими затем при наступлении события,​ к которому подключилось действие. Кроме того ​ необходимо сохранять старые обработчики событий и вызывать их в новых, чтобы не нарушить работу программы ​и других расширений.
 Пример подключаемого действия:​ Пример подключаемого действия:​
  
programmirovanie_v_dx/razrabotka_rasshirenij.txt · Последние изменения: 2020/06/30 10:55 — 7bit