:: Написание компонент для оболочки HiAsm 3.x ::
Одна из новых замечательных возможностей HiAsm3 - это возможность самостоятельно написать свой собственный компонент для интеграции в среду. Причем сразу стоит отметить тот факт, что пользовательские компоненты ничем не будут отличатся от тех, что поставляются вместе с программой. А это значит, что конечный EXE файл по прежнему останется автономной, не требующей дополнительных библиотек программой(если конечно вы не будете использовать в своём компоненте внешние DLL библиотеки). Писать компоненты в HiAsm3 просто, но несмотря на это вам необходимо хоть какое-то представление о принципах программирования в целом и знание языка Pascal в часности.
Этапы разработки компонента
Написание компонента для HiAsm достаточно простой и быстрый процесс(по сравнению с тем, как это было в предыдущих версиях). Так, например, полный шаблон со всем описанием для таких компонент, как Beep, Ping, WinExec и прочие делается с среднем за 2-3 минуты, причем большая часть времени уходит на составление описания точек входа.
Всё проектирование компонента можно разделить на две части:

1) написание шаблона
2) реализация методов и вспомогательного кода

Первый этап заключается в том, что пользователь составляет "шаблон" компонента(файл конфигурации) со всем его описанием и определяет для него иконку размером 24х24. Затем по составленному файлу конфигурации, пользователь создает "шаблон" кода. На этом шаге вы уже сможите запустить HiAsm и посмотреть, что у вас получилось. Файл конфигурации вам поможет составить программа ECreator, она же сразу зарегестрирует компонент в оболочке.
Второй этап - это наполнение методов компонента кодом на языке Object Pascal(Delphi). Тут теоритически вы можите использовать любой текстовый редактор вроде программы Notepad, но конечно же лучше воспользоваться какой либо оболочкой Delphi.
Первый этап

И так сначало, как написано выше, необходимо составить файл конфигурации компонента. Для этого вы можите использовать программу ECreator или любой текстовый редактор, поскольку формат описания компонента практически идентичен формату INI файлов Windows и не содержит никаких специальных символов.

------- ШАГ 1 -------

Весь файл конфигурации делится на 5 секций:

[About ] - некоторая информация об авторе и версии компонента
[Type ] - тип компонента и его описание
[Edit ] - эта секция только для интерфейсных элементов. В ней указывается какой стандартный компонент в визуальном редакторе будет отображаться при редактирование
[Property ] - секция описания всех статических св-тв элемента
[Methods ] - описание точек входов

Секция [About]

 На данный момент информация из этой секции нигде не используется и содержит 2 поля Version - версия елемента; Author - автор. При реализации этой секции желательно так же использовать поля Home - адрес домашней страницы и Mail - почтовый ящик

Секция [Type]

 Может содержать всего 3 поля:
Class - указывает к какому классу принадлежит описываемый элемент. Всего HiAsm 3.x поддерживает 5 стандартных класса:

Element простой элемент
WinElement элемент интерфейса, который можно редактировать в Редакторе Формы( Button, Edit, Label и т.д. )
MultiElement компоент контейнер( MultiElement, ChildPanel, ChildForm и т.д. )
EditMulti редактор MultiElement. Его невозможно выбрать непосредственно из палитры и совершенно очевидно, что использовать его в качестве базового не имеет смысла
DPElement элементы с динамическими точками входов( Hub, FormatStr, GetData и т.д. )

 Стоит сразу отметить, что из этих пяти классов EditMulti - не используется нигде, а классы MultiElement и WinElement вы сможете использовать только в том случае, если помимо языка Object Pascal знаете ещё и то, что такое KOL. Поэтому советую начинать с построения простых компонент, основанных на классе Element.
 Info - описание компонента(то, что отображается на вкладке Короткая справка в нижней части редактора HiAsm)
 Sub - не используется классом WinElement.

Element  - если указать этот параметр равным Form( Sub=Form или если вы работаете с программой ECretor - поставить галочку Form ), то HiAsm сгенерирует код, в котором компонент получит ссылку на родительский визуальный элемент( MediaPlayer, ClipboardHook, KeyHook ). Для класса WinElement такой код генерируется всегда и параметр указывать не нужно. Необходимо это потому, что некоторым компонентам необходимо перехватывать и принимать сообщения, которые Windows шлёт форме. Небольшой совет разработчикам: если ваш компонет может обойтись без формы, то не используйте этот параметр, т.к. вы не сможете поместить его(компонент) в проектах где нет формы. Однако если вам нужен(но не обязателен!) доступ к форме, то получить его можно так:

if Assigned(Applet) then Applet.Children[0].Caption := 'Главная форма';

В этом примере сначало происходит проверка на доступность главного апплета приложения, затем первой форме(главная форма всегда создается первой и имеет индекс 0) в заголовок помещается надпись 'Главная форма'. Примерами таких компонет в HiAsm являются Message, Browse и диалоги выбора файла.

MultiElement - указывает на то, какой визуальный компонент  будет компонентом-родителем. В качестве значения прописывается имя компонента-контейнера из папки conf. Например, у ChildPanel это поле выглядит так: Sub=Panel, которое указывает HiAsm автоматически вставить компонент Panel внутрь компонента ChildPanel.

DPElement - служит для описания имен динамически создаваемых точек входа и указания какое свойство отвечает за данный тип точек(это св-во, само собой разумеется должно иметь тип Integer). Формат описания точек следующий:

Sub=(имя св-ва для точек Work)|(общее имя создаваемых точек Work),(... Event)|(... Event),(... Var)|(... Var),(... Data)|(... Data)

Вот как вылядит этот параметр у компонента Hub:
   Sub=InCount|doEvent,OutCount|onEvent,,
Иными словами мы говорим, что элемент Hub имеет динамические точки типа Work, за кол-во которых отвечает св-во InCount и которые имеют базовое имя doEvent. Тоже самое для точек типа Event. А вот точки двух оставшихся типов нам не требуются и поэтому оставляем пустую строку(делать это обязательно!). Кроме элемента Hub такими компонентами являются FormatStr, GetData и MathParse.

Секция [Edit] 

 Эта секция используется только для класса WinElement и состоит из одного обязательного поля:
Class - имя встроенного класса, т.е. элемент, который будет отображаться на форме во время её редактирования.
Дальше следуют поля в формате: (св-во встроенного класса)= (св-во элемента) - они определяют какие св-ва вашего компонента задают его внешний вид на форме во время редактирования(стоит отметить, что речь идет только о Редакторе Форм, сам же интерфейсный компонент и его вид в EXE программе определяет программист).

На данный момент интерфейсные элементы - это самое узкое место в HiAsm, поскольку разработчик не имеет возможности отобразить свой компонент в Редакторе Формы так, как ему хотелось бы, и вынужден заменять его на встроенные элементы управления.

Секция [Property]

 Поля этой секции целиком определяются автором компонента и имеют следующий формат:

 (Имя свойства)=(help)|(тип)|(начальное значение)[|(Список выбора)]
(Имя свойства) - имя, отображаемое в редакторе св-тв компонента. Внимание! Это имя может состоять только из букв Латинского алфавита(a-z), знака _(подчеркивание) и цифр(0-9). Если вы вставите что-то еще, то проект с вашим компонентом компилироваться не будет.

(help) - описание св-ва. Тут вы можите использовать любые символы, кроме |

(тип) - тип данных св-ва. Указывается индексом(напрмер для String индекс равен 1) из таблицы, приведенной ниже;
Имя типа Описание
Integer Число целого типа
String Строка
Data Данные переменного типа. Включают в себя - Integer, String, Real
List Выборочный тип данных( самый простой пример это параметр с выбором True или False )
StrList Список строк
Icon Иконка
Real Число с плавающей точкой
Color Цвет
Script зарезервированно
Stream зарезервированно
Bitmap Картинка в формате BMP
Wave Звуковые данные в формате WAV

(начальное значение) - значение по-умолчанию для данного св-ва. Задаётся только для типов: Integer,String,List(в виде номера пункта начиная с 0),StrList(в виде (строка1)#13#10(строка2) и т.д), Real,Color(кроме числа поддерживаются все стандартные константы: clRed, clWindows, clYellow и т.д.)

(Список выбора) - определяется только в том случае, если выбран тип List и содержит перечисление всех пунктов выбора через запятую( например: True,False ).

Секция [Methods] 

 Поля этой секции так же целиком определяются автором компонента и имеют следующий формат:

(Имя точки)=(help)|(тип)
(Имя точки) и (help) - полностью аналогичны параметрам секции [Property]

(тип) - тип точки входа. Всего, естественно 4 типа: Work, Event, Var и Data.

Если вы используете программу ECreator, то в последнем поле нужно указать папку с установленной программой(например c:\program files\HiAsm3\) и нажать кнопку Save. После этой операции программа добавит компонент к среде разработки и зарегестрирует его. Если вы не используете программу или решили переместить компонент с одной вкладки в другую, то вы можите открыть файл \HiAsm3\Elements\Elements.ini и изменить или добавить описание компонента. Формат этого файла достаточно прост и не нуждается в описание. Сам же файл конфигурации будет помещен в папку \HiAsm3\Elements\conf где вы всегда можите его найти в случае необходимости.

------- ШАГ 2 -------

 После успешного создания прототипа компонента самое время определить ему иконку в соответствие с его функциями. Иконка компонента может иметь любую глубину цвета, с длинной и шириной равной 24 пикселям. Иконка компонента помещается в папку \HiAsm3\Elements\icon и должна иметь точно такое же имя, как и файл конфигурации. Если вы укажите другое имя или не поместите иконку вообще, то HiAsm в качестве таковой вставит иконку с именем nil.ico.

------- ШАГ 3 -------

 Последний шаг первого этапа состоит в генерации шаблона кода на языке Object Pascal(Delphi). В этом вам может помочь программа Code.exe. К сожалению на данный момент она правильно генерирует код только для компонент класса Element( тот самый, что указывается в секции [Type]). Остальные придется делать вручную на основе исходных кодов компонент из стандартного пакета.

Для упрощения отладки компонент в среду HiAsm добавлены специальные сочетания клавиш: Ctrl+F - открыть исходный текст выделенного компонента из папки code, Ctrl+G - открыть файл конфигурации компонента из папки conf.
Второй этап
На втором этапе вы наполняете сгенерированный исходник компонента кодом. Пока нет смысла разъяснять этот процесс для компонент с классом Element, так как программа Code.exe всё сделает сама, а всё остальное вы без проблем сможете дописать сами, ознакомившись с исходным текстом нескольких простых елементов из папки Elements\code. Для остальных же классов описание будет сделано позже.

Программы для закачки
ECreator.exe (146Kb) - создание Файла конфигурации компонента
Code.exe (136Kb) - создание шаблона кода компонента