Вверх ↑
Главный модератор
Ответов: 2997
Рейтинг: 395
#1: 2019-10-18 11:59:40 ЛС | профиль | цитата
    Атрибуты элемента

  В других версиях конструктора описание шаблона элемента хранится в отдельном файле по одному на каждый элемент. Если подсчитать количество файлов, которые хранят информацию об одном элементе, то результат получится немаленький. В проекте HiAsm.NET концепция хранения информации другая. Если бы элемент умел говорить, то мог бы сказать: «Всё своё ношу с собой». К тому же, сборка может служить контейнером нескольким элементам сразу. Получается, что новая концепция сокращает количество файлов пакета примерно на порядок величины. Не забудем ещё отметить, что решена задача локализации элемента под любые национальные языки. Давайте рассмотрим подробнее, что позволило достигнуть такого результата.

  Описание шаблона элемента взяли на себя атрибуты. В C# разрешается вводить в код информацию декларативного характера в форме атрибута, с помощью которого определяются дополнительные сведения (метаданные), связанные с классом, структурой, методом и т.д. Атрибуты указываются в квадратных скобках перед тем элементом, к которому они применяются. Следовательно, атрибут не является членом класса, но обозначает дополнительную информацию, присоединяемую к элементу.

  В .NET атрибуты представляют собой типы классов, которые расширяют абстрактный базовый класс System.Attribute. В поставляемых в .NET пространствах имен доступно множество предопределенных атрибутов, которые полезно применять в своём коде. Более того, можно также создавать собственные атрибуты и тем самым дополнительно уточнять поведение своих типов, создавая для атрибута новый тип, унаследованный от Attribute. В проекте HiAsm.NET была использована эта возможность. Теперь разработчик имеет в своём распоряжении следующий список атрибутов для описания метаданных своего элемента:
НазваниеТипОписание
AboutHiasm.AboutAttributeАтрибут описания версии элемента и его разработчика
InstallHiasm.InstallAttributeАтрибут добавления элемента к пакету и группе на панели инструментов
TypeHiasm.TypeAttributeАтрибут описания класса элемента и метаданных для отображения в конструкторе
EditHiasm.EditAttributeАтрибут метаданных для отображения элемента в редакторе формы
WidgetHiasm.WidgetAttributeАтрибут описания виджета элемента
HandlersHiasm.HandlersAttributeАтрибут метаданных редактора пользовательских свойств элемента
AssemblyHiasm.AssemblyAttributeАтрибут метаданных сторонних сборок связанных с элементом
PropertyHiasm.PropertyAttributeАтрибут описания свойств элемента
PointHiasm.PointAttributeАтрибут описания точек элемента

Атрибут About
  Атрибут About элемента не имеет дополнительных полей. Вся информация задаётся как аргументы конструктора
Атрибут Install

  Атрибут Install элемента может содержать дополнительное поле lang:
НазваниеТипОписание
langSystem.StringОпределяет локализацию описания двухбуквенным языковым кодом. Указывается после аргументов конструктора

Поле являются необязательным. Значение по умолчанию для поля null.
[Install("_base", "Simple demo", "Core")]
[Install("_base", "Простой пример", "Core", lang = "ru")]
Внимание, для каждой локализации создаётся отдельный атрибут.

  Примеры атрибутов для установки элемента в различные пакеты:
[Install("delphi", "Simple demo", "Core")]
[Install("CNET", "Simple demo", "Core")]
Атрибут Type

  Атрибут Type описания элемента может содержать дополнительные поля:
НазваниеТипОписание
langSystem.StringОпределяет локализацию описания двухбуквенным языковым кодом. Указывается после аргументов конструктора
tabSystem.StringЗадаёт имя вкладки на панели инструментов
groupSystem.StringЗадаёт имя группы на вкладке панели инструментов
categorySystem.StringЗадаёт имя категории на панели инструментов редактора формы, если данный элемент должен на ней отображаться
inheritSystem.StringЗадаёт имя наследуемого класса
interfacesSystem.StringЗадаёт список интерфейсов, реализуемых данным элементом
iconSystem.StringЗадаёт имя свойства элемента, значение которого определяет иконку элемента в редакторе схемы
subSystem.StringЗадаёт имя класса элемента, помещаемого внутрь элемента-контейнера при его создании
viewSystem.StringЗадаёт информацию для отображения на элементе в редакторе схемы
flagsHiAsm.ElementFlagЗадаёт специальные флаги элемента

Все дополнительные поля являются необязательными. Значение по умолчанию для полей типа System.String будет null. При использовании поля lang можно указывать его сразу после аргументов конструктора и без имени поля:
[Type("Example", "Say Hello World!", tab = "Core")]
[Type("Example", "Сказать Привет Мир!", "ru", tab = "Core")]
[Type("Example", "Sag Hallo Welt!", "de", tab = "Core")]
Внимание, для каждой локализации создаётся отдельный атрибут.

  Примеры атрибутов для описания элемента различных классов:
[Type("HCImageList", "Collection of Images", tab = "Componets", category = "Componets", interfaces = "ImageList")]
[Type("HCTplListView", "Display a list of items", tab = "Controls", group = "Common", category = "Common", inherit = "TplWinControl")]
[Type("HCMath", "Math operations", tab = "Logic", view = "OpType,8")]
[Type("HCConvertor", "Casting and type conversions", tab = "Logic", icon = "Mode")]
[Type("HCChildTabControl", "Container of TabPage controls", tab = "Controls", group = "Containers", category = "Containers", sub = "HCTplTabControl", flags = ElementFlag.IS_MULTI)]
Атрибут Edit

  Атрибут Edit имеет следующие поля:
НазваниеТипОписание
ClassSystem.StringОпределяет имя класса для отображения элемента в редакторе формы
proSystem.BooleanЗадаёт значение, определяющее необходимость редактирования элемента в дизайнере формы
listSystem.String[]Определяет список строк как пары Ключ=Значение для сопоставления имён свойств элемента со свойствами виджета в редакторе формы

Все поля являются необязательными. Значение по умолчанию для полей типа System.String будет null, для типа System.Boolean - false.

  Примеры атрибутов Edit:
[Edit(Class = "System.Windows.Forms.Button", pro = true)]
[Edit("FlatStyle=Flat", "TextAlign=Alignment", Class = "System.Windows.Forms.Label")]
Атрибут Widget

  Атрибут Widget имеет следующие поля:
НазваниеТипОписание
assemblySystem.StringОпределяет информацию об используемой в элементе сторонней сборке
typeSystem.StringЗадаёт имя используемого типа в сторонней сборке

Все поля являются необязательными. Значение по умолчанию для полей типа System.String будет null

  Пример атрибута Widget:
[Widget(assembly = "System.Windows.Forms.dll", type = "System.Windows.Forms.Panel")]
Внимание, для каждой сторонней сборки создаётся отдельный атрибут.
Атрибут Handlers

  Атрибут Handlers имеет поле list:
НазваниеТипОписание
listSystem.String[]Определяет список строк как пары Ключ=Значение для сопоставления имён свойств элемента с именами пользовательских редакторов

Все поля являются необязательными. Значение по умолчанию для полей типа System.String будет null, для типа System.Boolean - false.

  Пример атрибута Handlers:
[Handlers("HandlerName=PropreryName", "HandlerName2=PropreryName2")]
Атрибут Assembly

  Атрибут Assembly имеет поле list:
НазваниеТипОписание
listSystem.String[]Определяет список строк как пары Ключ=Значение для указания имени сторонней сборки и используемого типа


  Пример атрибута Assembly:
[Assembly("System.Windows.Forms.dll=System.Windows.Forms.Panel", "ColorPicker.dll=Sano.PersonalProjects.ColorPicker.Controls.ColorPanel")]
Атрибут Property

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

НазваниеТипОписание
data_intSystem.Int32Целое число
data_strSystem.StringСтрока символов в кодировке UTF8
data_dataHiAsm.TDataКомплексный тип, способный задать значение четырёх типов: data_int, data_str, data_real и data_null
data_comboSystem.Int32Задаёт индекс значения в фиксированном списке строк
data_listSystem.StringЗадаёт список строк
data_data_iconSystem.Drawing.IconКартинка в формате иконки Windows
data_realSystem.DoubleДействительное число двойной точности
data_colorSystem.Int32Задаёт цвет
data_scriptSystem.StringИспользуется для установки кода сценария
data_streamSystem.IO.MemoryStreamИспользуется для установки бинарных данных
data_bitmapSystem.Drawing.BitmapКартинка в формате Bitmap
data_waveSystem.IO.MemoryStreamИспользуется для установки звуковых данных в Wave формате
data_arrayHiAsm.ArrayValueКомплексный тип, способный задать значение массива различных типов
data_comboExSystem.StringЗадаёт строковое значение из фиксированного списка строк
data_fontHiAsm.FontRecordКомплексный тип, используемый для установки шрифта
data_jpegSystem.IO.MemoryStreamИспользуется для установки картинки в Jpeg формате
data_codeSystem.StringИспользуется для установки кода сценария
data_elementSystem.StringИспользуется для установки ссылки на другие элементы схемы
data_flagsSystem.Int32Задаёт значение отдельных битов
data_objectHiAsm.ObjectRecordКомплексный тип, способный задать значение различных типов
data_timeSystem.DateTimeИспользуется для установки даты и времени
data_boolSystem.BooleanИспользуется для установки логичекого значения True или False
data_longSystem.Int6464-битное целое число
data_charSystem.CharИспользуется для установки символьного значения
data_floatSystem.SingleДействительное число одинарной точности
data_decimalSystem.DecimalЗадаёт десятичное число
data_componentHiAsm.ObjectRecordИспользуется для установки значения типа IComponent

Список полей, используемых при создании свойства элемента

  Кроме обязательных аргументов конструктора атрибута Property можно использовать другие поля, определяющие дополнительные установки для свойства элемента:
НазваниеТипОписание
langSystem.StringОпределяет локализацию описания двухбуквенным языковым кодом. Указывается после аргументов конструктора
groupSystem.StringЗадаёт имя группы свойств для отображения в редакторе свойств элемента
valueSystem.StringЗадаёт строкой значение свойства по умолчанию
listSystem.StringЗадаёт строкой фиксированный список возможных значений свойства. В качестве разделителя используется символ запятой
doubleopenSystem.BooleanУказывает на единственное свойство элемента, которое будет открываться на редактирование при двойном клике мышью на элементе
makemethodSystem.BooleanРазрешает создание на элементе точки для изменения значения свойства во время выполнения
readOnlySystem.BooleanУказывает, что свойство в редакторе доступно только для чтения
visibleSystem.BooleanЗадаёт значение, определяющее видимость свойства в редакторе элемента
editorSystem.TypeЗадаёт тип редактора свойства
converterSystem.TypeЗадаёт тип конвертора для свойства

Все дополнительные поля являются необязательными. Значение по умолчанию для полей типа System.String будет null, для типа System.Boolean - false, кроме поля visible для которого значение по умолчанию true. При использовании поля lang можно указывать его сразу после аргументов конструктора и без имени поля:
[Property("Greeting", "The greeting message", DataType.data_str)]
[Property("Greeting", "Приветствие", DataType.data_str, "ru")]
Внимание, для каждой локализации создаётся отдельный атрибут.

  Примеры атрибутов для создания свойств элемента различных типов:
[Property("Name", "Brief description. ARG(Int32)", DataType.data_int, makemethod = true, value = "123")]
[Property("Name", "Brief description. ARG(Double)", DataType.data_real, value = "3.1415926")]
[Property("Name", "Brief description. ARG(Boolean)", DataType.data_bool, group = "Group name", value = "true")]
[Property("Name", "Brief description. ARG(DateTime)", DataType.data_time, value = "01/01/1753")]
[Property("Name", "Brief description. ARG(Color)", DataType.data_color, value = "Transparent")]
[Property("Name", "Brief description. ARG(LeftRightAlignment)", DataType.data_comboEx, value = "0", list = "Left,Right")]
[Property("Name", "Brief description. ARG(ImageList)", DataType.data_array, value = "System.Drawing.Bitmap", readOnly = true)]
[Property("Name", "Brief description. ARG(Size)", DataType.data_object, value = "System.Drawing.Size", list = "{'Width':16,'Height':16}")]
Атрибут Point

  Список полей, используемых при создании точки элемента:
НазваниеТипОписание
langSystem.StringОпределяет локализацию описания двухбуквенным языковым кодом. Указывается после аргументов конструктора
hiddenSystem.BooleanЗадаёт значение, определяющее видимость точки элемента по умолчанию
indexSystem.StringЗадаёт имя свойства элемента, значение которого определяет постфикс для модификатора имени точки

Все дополнительные поля являются необязательными. Значение по умолчанию для полей типа System.String будет null. При использовании поля lang можно указывать его сразу после аргументов конструктора и без имени поля:
[Point("doSayHello", "Returns greeting message", DataType.data_str, PointType.pt_work)]
[Point("doSayHello", "Возвращает приветствие", DataType.data_str, PointType.pt_work, "ru")]
Внимание, для каждой локализации создаётся отдельный атрибут.

  Пример атрибута для создания точки элемента с использованием дополнительных полей:
[Point("Name", "Brief description. ARG()", DataType.data_null, PointType.pt_work, "ru", hidden = true, index = "PropertyName")]
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Редактировалось 4 раз(а), последний 2020-02-08 15:11:22