Справочное руководство по созданию компонентов в

       конструкторе программ 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.//Конец программы   

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++