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. |