| Языки | - lnLineCode |
lnLineCode
Краткое описание
Элемент для вставки кода в программу
Параметры
Замечания
Элемент Вставка кода (lnlineCode) предназначен для быстрого создания «заплатки» непосредственно на языке применяемого в пакете выбранном для разработки приложения . Обычно применяется в тех случаях когда нет смысла создавать новый элемент (Например если код явно нигде кроме этого приложения не будет востребован ) Кроме того , в отличии от метода расширения функциональности путем написания
нового элемента, lnLineCode включает код «заплатки» непосредственно в схему, что бывает удобнее при публикации исходникоков .
Обновление элемента: [svn]InlineCode.pas[/svn]
нового элемента, lnLineCode включает код «заплатки» непосредственно в схему, что бывает удобнее при публикации исходникоков .
Обновление элемента: [svn]InlineCode.pas[/svn]
Описание языка
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, унаследованного от TDebug. Класс TDebug позволяет элементу правильно работать в отладочном режиме
private - ключевое слово языка Object Pascal(Delphi), объявляющее раздел частных переменных и процедур, которые могут использоваться только внутри этого модуля.
public - ключевое слово языка Object Pascal(Delphi), объявляющее раздел общих переменных и процедур, которые вероятно могут использоваться и вне этого модуля.
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), в данном случае это конец реализации процедуры doWork
end. - с точкой - означает конец модуля.
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, унаследованного от TDebug. Класс TDebug позволяет элементу правильно работать в отладочном режиме
private - ключевое слово языка Object Pascal(Delphi), объявляющее раздел частных переменных и процедур, которые могут использоваться только внутри этого модуля.
public - ключевое слово языка Object Pascal(Delphi), объявляющее раздел общих переменных и процедур, которые вероятно могут использоваться и вне этого модуля.
#pas
procedure doWork(var Data:TData; index:word);
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), в данном случае это конец реализации процедуры doWork
end. - с точкой - означает конец модуля.
Описание структуры TData
Переменная Data, имеющая тип TData, которая передает в обработчики данные из потока содержит следующие поля:
Для манипуляций с типом TData используются процедуры ToXXX и ReadXXX в соответсвие с тем типом данных, которые необходимо получить. Например:
#pas
Data_type:byte; // хранит конкретный тип данных, заданный константами data_XXX(например: data_int, data_str, data_stream и т.д.).
idata:THiInt; // для данных типа integer и объектов (целое число);
sdata:string; // для данных типа string (строка любых алфавитно-цифровых символов);
rdata:real; // для данных типа real (дробное число);
Next: PHI_Event; // указатель на событие THI_Event
ldata: PData; // указатель на следующий элемент МТ
Для манипуляций с типом TData используются процедуры ToXXX и ReadXXX в соответсвие с тем типом данных, которые необходимо получить. Например:
#pas
procedure [имя процедуры];
var
s:integer
begin
// чтение данных из потока
s := ToInteger(_Data); // значение TData приcваивается s.
// чтение данных из потока или верхней точки
s := ReadInteger(_Data, MyValue); // где MyValue имя верхней точки элемента
end;
Описание типа THI_Event
_hi_onEvent - непосредственный немедленный вызов указанного в первом параметре события с передачей данных в поток, указанных вторым параметром. Если второй параметр не указан вовсе, то в этом случае событие будет вызванно с пустыми данными в потоке.
_hi_CreateEvent - отличается от предыдущего метода тем, что указанное событие не вызывается сразу, а заносится в структуру TData в поле Next. Собственно вызов события происходит только после завершения текущего метода. Сделано это для того, чтобы избежать возможного переполнения стека при достаточно большой вложенности вызовов событий _hi_onEvent. Т.е. в общем случае рекомендуется применять первый метод тогда, когда после его отработки нужно сделать что-то еще, а второй - когда делать уже ничего не нужно. Например:
Так же _hi_CreateEvent нельзя использовать внутри циклов, либо путем вставки их друг за другом.
Основных параметра два: собственно событие, которое необходимо вызвать и данные, которые помещаются в топок вызванного события. Какого бы типа не были переданы данные в последствие они всеравно преобразуются в тип TData(даже пустые данные) и именно в таком виде приходят в качестве первого параметра любого метода элемента или IC.
Последнее, что необходимо усвоить это ручное формирование типа TData. Реализовать в примере ниже следующую логику работы элемента IC: по событию doWork элемент должен брать данные из потока или верхней точки, добавлять в конец и в начало считанных данных фрагмент строки "###", после чего выдавать их в поток с методом onEvent. Результат последней проделанной операции должен быть доступен через нижнюю точку Result.
По материалам Sergius
_hi_CreateEvent - отличается от предыдущего метода тем, что указанное событие не вызывается сразу, а заносится в структуру TData в поле Next. Собственно вызов события происходит только после завершения текущего метода. Сделано это для того, чтобы избежать возможного переполнения стека при достаточно большой вложенности вызовов событий _hi_onEvent. Т.е. в общем случае рекомендуется применять первый метод тогда, когда после его отработки нужно сделать что-то еще, а второй - когда делать уже ничего не нужно. Например:
#pas
procedure Test;
begin
_hi_onEvent(); // вызываем внешнее событие
// делаем что-то еще
_hi_CreateEvent(); // вызываем отложенное внешнее событие, запуск которого произойдет после выхода из ф-ции Test
end;
Основных параметра два: собственно событие, которое необходимо вызвать и данные, которые помещаются в топок вызванного события. Какого бы типа не были переданы данные в последствие они всеравно преобразуются в тип TData(даже пустые данные) и именно в таком виде приходят в качестве первого параметра любого метода элемента или IC.
Последнее, что необходимо усвоить это ручное формирование типа TData. Реализовать в примере ниже следующую логику работы элемента IC: по событию doWork элемент должен брать данные из потока или верхней точки, добавлять в конец и в начало считанных данных фрагмент строки "###", после чего выдавать их в поток с методом onEvent. Результат последней проделанной операции должен быть доступен через нижнюю точку Result.
#pas
unit HiAsmUnit;
interface
uses kol,Share,Debug;
type
THiAsmClass = class(TDebug)
private
s:string;
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 = '###';
procedure THiAsmClass.doWork(var Data:TData; index:word);
var
s1:string;
begin
s1 := ReadString(Data, Text);
//s1 := toString(Data);
s := s0 + s1 + s0;
_hi_OnEvent(onEvent, s);
end;
procedure THiAsmClass.Result(var Data:TData; index:word);
begin
dtString(Data, s);
end;
end.
По материалам Sergius
BB-code статьи для вставки
Всего комментариев: 0
(комментарии к статье еще не добавлены)