Вверх ↑
Пакеты 
HiAsm4
Windows 
Компоненты 
Инcтpумeнты 
Языки - lnLineCode

lnLineCode
Краткое описание
   Элемент для вставки кода в программу
Параметры
  • WorkPoints - Содержит список имён методов
  • EventPoints - Содержит список имён событий
  • VarPoints - Содержит список имён свойств
  • DataPoints - Содержит список имён точек получения данных
  • Code - Содержит код на языке Delphi
  • Замечания
       Элемент Вставка кода (lnlineCode) предназначен для быстрого создания «заплатки» непосредственно на языке применяемого в пакете выбранном для разработки приложения . Обычно применяется в тех случаях когда нет смысла создавать новый элемент (Например если код явно нигде кроме этого приложения не будет востребован ) Кроме того , в отличии от метода расширения функциональности путем написания
    нового элемента, 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), объявляющее раздел общих переменных и процедур, которые вероятно могут использоваться и вне этого модуля.

    
    #pas
    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), в данном случае это конец реализации процедуры doWork
    end. - с точкой - означает конец модуля.
    Описание структуры TData
    Переменная Data, имеющая тип TData, которая передает в обработчики данные из потока содержит следующие поля:
    
    #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. Т.е. в общем случае рекомендуется применять первый метод тогда, когда после его отработки нужно сделать что-то еще, а второй - когда делать уже ничего не нужно. Например:

    
    #pas
    procedure Test;
    begin
    _hi_onEvent(); // вызываем внешнее событие
    // делаем что-то еще
    _hi_CreateEvent(); // вызываем отложенное внешнее событие, запуск которого произойдет после выхода из ф-ции Test
    end;
       Так же _hi_CreateEvent нельзя использовать внутри циклов, либо путем вставки их друг за другом.

       Основных параметра два: собственно событие, которое необходимо вызвать и данные, которые помещаются в топок вызванного события. Какого бы типа не были переданы данные в последствие они всеравно преобразуются в тип 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
    (комментарии к статье еще не добавлены)
    Комментарий
    ...