Help по элементу InlineCode


Элемент Вставка кода (lnLineCode) предназначен для быстрого создания «заплатки» непосредственно на языке применяемого в пакете выбранном для разработки приложения . Обычно применяется в тех случаях когда нет смысла создавать новый элемент (Например если код явно нигде кроме этого приложения не будет востребован ) Кроме того , в отличии от метода расширения функциональности путем написания

нового элемента, lnLineCode включает код «заплатки» непосредственно в схему, что бывает удобнее при публикации исходникоков .


WorkPoints - Содержит список имён методов

EventPoints - Содержит список имён событий

VarPoints - Содержит список имён свойств

DataPoints - Содержит список имён точек получения данных

Code - Содержит код на языке пакета


unit - ключевое слово языка Object Pascal(Delphi), объявляющее начало нового модуля(юнита).

interface - ключевое слово языка Object Pascal(Delphi), объявляющее начало интерфейсной (управляющей взаимодействием) части модуля(юнита).

uses - ключевое слово языка Object Pascal(Delphi), объявляющее используемые внешние модули (исходники), kol,Share,Debug; - собственно имена этих модулей, разделяемых запятой, и оканчивающихся на знак ; kol - это кол, кодоэкономичная библиотека Кладова, Share - разделяемые, общие функции, Debug - Модуль Debug, как и Share является частью стандартного пакета HiAsm и содержит описания и реализацию методов, используемых в отладочном режиме.

type - ключевое слово языка Object Pascal(Delphi), объявляющее раздел объявления типов классов.

THiAsmClass = class(TDebug) - означает THiAsmClass класс, но дальше непонятно, что такое class(TDebug).

private - ключевое слово языка Object Pascal(Delphi), объявляющее раздел частных переменных и процедур, которые могут использоваться только внутри этого модуля.

public - ключевое слово языка Object Pascal(Delphi), объявляющее раздел общих переменных и процедур, которые вероятно могут использоваться и вне этого модуля.


procedure doWork(var Data:TData; index:word);

procedure - ключевое слово языка Object Pascal(Delphi), означающее начало процедуры.

doWork - название левой точки элемента из среды, заданное в св-ве WorkPoints. Именно так всегда объявляются точки типа Work и Var., а значение в скобках - означает что там есть переменная Data, имеющая тип TData; Индекс - это номер точки элемента соответствующего типа начиная от 0. Скажем если IC имеет две левые точки с именами doWork1 и doWork2, то их индексы соответственно будут 0 и 1. Обычно индекс в элементе InlineCode не используется.

end; - ключевое слово языка Object Pascal(Delphi), в данном случае это конец объявления класса THiAsmClass = class(TDebug).

implementation - ключевое слово языка Object Pascal(Delphi), означающее начало отдела реализации объявленных процедур и функций.

procedure THiAsmClass.doWork(var Data:TData; index:word); - начало непосредственно самой объявленной ранее процедуры. В скобках - указан повторно тип переменной, что переменная Data имеет тип TData, а индекс - 16 разрядное число. Хотя можно эти скобки с параметрами опустить, как показывает практика, т.к. они объявлены уже ранее.

begin - ключевое слово языка Object Pascal(Delphi), означающее начало места для записи исполняемых операторов процедуры.

end; - ключевое слово языка Object Pascal(Delphi), в данном случае это конец объявления класса THiAsmClass = class(TDebug).

end. - с точкой - означает конец модуля.



переменная Data, имеющая тип TData

Data_type:byte; - для данных типа байт, 8-битных чисел; ( хранит конкретный тип данных, заданный константами data_XXX(например: data_int, data_str, data_stream и т.д.).

idata:THiInt; - для данных типа integer (целое число);

sdata:string; - для данных типа string (строка любых алфавитно-цифровых символов);

rdata:real; - для данных типа real (дробное число);

Next: PHI_Event; - для событий типа PHI_Event, а что это - не знаю, и чем отличается от THI_Event;

ldata: PData; - для данных типа PData, - тоже, незнаю, что за формат.

Next - служебное поле МТ технологии(не должно использоваться пользователем).

ldata - служебное поле МТ технологии(не должно использоваться пользователем).

procedure [имя процедуры];

var

s:integer

d:TData

begin

s := ToInteger(d); // значение TData приcваивается s.

end;


PData = ^TData; - на строку выше определения TData

А PHI_Event - еще на строку выше


Ну и есть негласное правило (необязательное - для облегчения собственного же понимания написанного): имена типов начинаются с 'T', а указателей на эти же типы - с 'P'


Описание типа THI_Event

_hi_onEvent - непосредственный немедленный вызов указанного в первом параметре события с передачей данных в поток, указанных вторым параметром. Если второй параметр не указан вовсе, то в этом случае событие будет вызванно с пустыми данными в потоке.

_hi_CreateEvent - отличается от предыдущего метода тем, что указанное событие не вызывается сразу, а заносится в структуру TData в поле Next. Собственно вызов события происходит только после завершения текущего метода. Сделано это для того, чтобы избежать возможного переполнения стека при достаточно большой вложенности вызовов событий _hi_onEvent. Т.е. в общем случае рекомендуется применять первый метод тогда, когда после его отработки нужно сделать что-то еще, а второй - когда делать уже ничего не нужно. Например:

procedure Test;

begin

_hi_onEvent(); // вызываем внешнее событие

// делаем что-то еще

_hi_CreateEvent(); // вызываем отложенное внешнее событие, запуск которого произойдет после выхода из ф-ции Test

end;

Так же _hi_CreateEvent нельзя использовать внутри циклов, либо путем вставки их друг за другом.

Основные параметры

Основных параметра два: собственно событие, которое необходимо вызвать и данные, которые помещаются в топок вызванного события. Какого бы типа не были переданы данные в последствие они всеравно преобразуются в тип TData(даже пустые данные) и именно в таком виде приходят в качестве первого параметра любого метода элемента или IC.


Последнее, что необходимо усвоить это ручное формирование типа TData. Реализовать в примере ниже следующую логику работы элемента IC: по событию doWork элемент должен брать данные из потока или верхней точки, добавлять в конец и в начало считанных данных фрагмент строки "###", после чего выдавать их в поток с методом onEvent. Результат последней проделанной операции должен быть доступен через нижнюю точку Result.

unit HiAsmUnit;

interface

uses kol,Share,Debug;

type

THiAsmClass = class(TDebug)

private

public

onEvent:THI_Event;

text:THI_Event;

procedure doWork(var Data:TData; index:word);

procedure Result(var Data:TData; index:word);

end;

implementation

const

s0 = '###';

var

s1:string;

s2:string;


procedure THiAsmClass.doWork(var Data:TData; index:word);


begin

s1 := readstring(Data,Text);

//s1 := toString(Data);

s2 := s0+s1;

s1 := s2+s0;


_hi_OnEvent(onEvent,s1);

end;


procedure THiAsmClass.Result(var Data:TData; index:word);

begin

dtString(Data,s1);

end;

end.


3