Справочное
руководство по созданию компонентов в
конструкторе программ HiAsm (для начинающих)
Основы.
Для создания полноценных
компонентов необходимо иметь:
1) хотя бы начальные
знания языка программирования Delphi \ Pascal.
2) опыт программирования на HiAsm.
3) знать структуру
конструктора HiAsm.
4) знать структуру Файлов
конструктора HiAsm.
Введение.
Справка для начинающих
поэтому некоторые понятия даны упрощённо.
Я непрофессиональный
программист и данная справка не претендует
на полноту всех сведений.
Основная идея создания этой
справки это делай как я. То есть если вы понимаете что здесь,
написано, то так же как я сможете сделать необходимые вам изменения в
компоненте или даже создать новый.
Данную справку надо изучать, а не
читать.
Начальные сведения.
Структура файлов HiAsm.
Файл Pas
Собственно если вы не
понимаете что написано в данном разделе, можете дальше не читать.
Файлы с исходными кодами компонентов находятся в папке Code и имеют формат аналогичный формату файлов Delphi \ Pascal.
Рассмотрим подробнее на примере исходного кода Компонента Label.
=================================================================
unit hiLabel; //В этом разделе как можно увидеть присутствует имя компонента
с приставкой hi приставка обязательна для файла компонента в формате HiAsm.
unit hiLabel;
Если вы желаете создать свой собственный компонент отличный
от стандартного, и отображающийся на панели вкладок отдельной иконкой
необходимо изменить имя компонента (например unit hiBabel;). Если нет то
оставляете без изменений.
Так же необходимо будет изменить
имя Label на Babel и во всём тексте программы где оно
встречается. Подробнее о таком методе создания компонентов будет написано
дальше.
interface
uses Kol,Share,Win;
//В этом разделе описаны библиотеки
необходимые для работы компонента.
Uses
Если в компоненте должны
использоваться другие библиотеки их необходимо вписать в этот раздел.
Создание компонентов с
использованием сторонних библиотек будет описано далее.
Если вы не укажете не
обходимую для работы компонента
библиотеку то при компиляции проекта получите сообщение об ошибке типа :
Indeclared identificier – не задекларированный идентификатор.
Так как необходимые для работы
компонента процедуры,функции,переменные
описаны как раз в недостающей
библиотеке.
Type //Раздел описания классов ,типов и т.д.
THILabel = class(THIWin)
Type
THILabel = class(THIWin) Эта строка
говорит нам о том что компонент Label принадлежит к классу THIWin. В данном разделе
могут встречаться и другие классы например:
THIAnyTen = class(TDebug)
THIBitmapArray = class(TArray)
THIListBox = class(THIWinList)
Так же в данном разделе могут встречаться и другие структуры типа:
Записи
TRPoint = record
x,y:real;
end;
Список
TRegDataType = (rdUnknown,
rdString, rdExpandString, rdInteger, rdBinary);
Подробнее о таких структурах вы можете получить из
справочного руководства по языку программирования Delphi\Паскаль.
Private //В этом разделе описываются
локальные переменные процедуры и функции.
Локальные значит используемые только в этом
компоненте.
Private
Этот раздел непосредственно может нам, понадобится при разработке дополнений к компоненту и содержит следующие структуры.
procedure _OnClick( Sender: PObj );
В данном случае здесь содержатся, определение процедур
в частности, procedure _OnClick при выполнении которой, происходит событие на одноимённой точке
компонента и описанное в файле, INI который будет подробно рассмотрен далее.
Так же описание действия этой процедуры вы можете увидеть при
наведении курсора на одноимённую точку.
Само же, действие
происходящее при выполнении этой процедуры описано в теле процедуры в разделе Implementation.
Описание процедур.
procedure SetAutoSize(Value:boolean);
Автоматическое изменение размера.
procedure SetAlignment(Value:TTextAlign);
Выравнивание компонента
procedure _OnClick( Sender: PObj );
Выполняется при клике на компоненте Левой кнопкой
мыши
procedure _OnMouseEnter(
Sender: PObj );
Выполняется при нажатии кнопки Enter.
procedure _OnMouseLeave( Sender: PObj );
Выполняется при перемещении над компонентом
указателя мыши.
public //В этом разделе описаны
публичные переменные процедуры
и функции
Публичные значит – используемые не только в этом компоненте .
Описание точек.
В данном разделе описывается
тип созданной вами(в файле INI ) точки
_event_OnClick : THI_Event; Точка OnClick - это выходная точка(справа)
об этом нам говорит слово _event (префикс _ (подчёркивание) является неотъемлемой частью XiAsm и поставлен
для отличия кода XiAsm от кода Паскаля.
THI_Event – специальный тип XiAsm для получения входных\выходных данных.
_prop_ColorHover : integer;
Точка ColorHover тип integer (Целое) .
_prop_ это слово говорит нам о том что
данная структура является свойством компонента и будет отображаться в разделе
свойств компонента .
_prop_Cursor : integer;
_prop_Underline : boolean;
_prop_Caption : string;
_data_Text : THI_Event;
_data_ это слово говорит нам о том что данная точка находится (сверху).
Точка Text тип THI_Event (входная\ выходная).
procedure _work_DoText(var Data:TData; Index:word);
Процедура она же точка DoText то есть в данной процедуре описывается, что будет
происходить при подаче данных на точку DoText .
_work_ это слово говорит нам о том
что точка является входной и находится (слева).
procedure _var_Caption(var Data:TData; Index:word);
_var_ это слово говорит нам о том что точка
находится (снизу).
Примечание: верхние и нижние точки
являются сквозными и могут как получать так и
выдавать данные.
constructor Create(Parent:PControl);
constructor сложный тип и его описание не входит задачу данной справки(более
подробно вы можете прочитать в литературе по языку программирования Delphi ).
procedure Init; override;
Данная процедура является
стандартной в ней происходит инициализация (ввод исходных данных).
Тип Override(виртуальный)
Методы
Сложный тип – попробую объяснить популярно.
property _prop_AutoSize:boolean
write SetAutoSize;
property данное слово говорит нам о том что это метод созданный вами для выполнения каких либо
действий.
_prop_ будет отображаться в свойствах
компонента под именем AutoSize.
Имеет тип Boolean (двоичный) .
Write – Вывод.
SetAutoSize – в эту системную функцию.
property _prop_Alignment:TTextAlign
write SetAlignment;
end; //Конец раздела описания
переменных.
Implementation //Раздел программы.
constructor THILabel.Create;
begin
inherited
Create(Parent);
Control := NewLabel(Parent,'');
Control.OnClick := _OnClick;
Control.OnMouseEnter:=_OnMouseEnter;
Control.OnMouseLeave:=_OnMouseLeave;
end;
Описание Конструкторов не входит в задачу данной
справки.
=================================================
procedure THILabel.Init;
begin
inherited;
Control.Caption := _prop_Caption;
end;
В данной процедуре происходит инициализация
(присвоение начального значения переменной _Caption ).
_prop_Caption – присвоение происходит из
свойства компонента.
===================================================
procedure THILabel._OnClick;
begin
_hi_OnEvent(_event_OnClick);
end;
Получение события на точке _OnClick
_hi_OnEvent – Системная функция вывода данных .
_event – Вывести данные.
_OnClick – на эту точку.
=========================================
procedure THILabel._OnMouseEnter;
begin
if _prop_ColorHover <> 0 then
Control.Font.Color := _prop_ColorHover;
Присвоение переменной ColorHover значения из свойств компонента.
if _prop_Cursor
<> 0 then
Control.Cursor := _prop_Cursor;
if _prop_Underline then
Control.Font.FontStyle := Control.Font.FontStyle + [fsUnderline];
end;
Обработка действий мыши.
=======================================
procedure THILabel._OnMouseLeave;
begin
if _prop_ColorHover <> 0 then
Control.Font.Color := _prop_Font.Color;
if _prop_Cursor <> 0 then
Control.Cursor := crDefault;
if _prop_Underline then
Control.Font.FontStyle := Control.Font.FontStyle - [fsUnderline];
end;
Обработка действий мыши.
=================================================
procedure THILabel._work_DoText;
begin
Control.Caption := ReadString(Data,_data_Text,'');
end;
Процедура
описывает, что должно произойти при подаче
данных на
точку DoText .
Control. – компонент.
Caption – данные в компоненте.
ReadString – системная функция (чтение данных типа String ).
Data, -
_data – читаем с верхней точки.
_Text – Имя точки.
'' – чтение значения по умолчанию.
То есть если на точку _Text значение не задано(точка не
подключена) то значение берётся из входной точки _work_DoText (задано в имени процедуры).
===============================================
procedure THILabel.SetAlignment;
begin
Control.TextAlign := Value;
end;
Выравнивание текста в компоненте .
TextAlign – имя системной функции выравнивания.
Тип выравнивания задаётся выбором из списка свойств
компонента
Или при активации точки Align – вводится снаружи.
=======================================
procedure THILabel.SetAutoSize;
begin
Control.AutoSize( Value );
end;
Автоматическое изменение размера компонента в
зависимости от содержимого.
===============================================
procedure THILabel._var_Caption;
begin
Data.Data_type := data_str;
Data.sdata := Control.Caption;
end;
Процедура вывода данных на нижнюю точку (_var).
Data.Data_type – Тип выводимых данных.
data_str – данные типа String (_str)
Data.sdata – Присвоить внутренней переменной (sdata).
Control.Caption – Значение хранящееся в переменной (Caption).
================================================
end.//Конец программы
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++