Вверх ↑
Администрация
Ответов: 15273
Рейтинг: 1501
#1: 2007-08-10 15:49:16 ЛС | профиль | цитата
Dilma писал(а):
1) Какие функции _hi_XXX существуют(два основных типа)?

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

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

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

Dilma писал(а):
2) Какие основные параметры им передаются и для чего?

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

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

Add(Message,13357553,511,224)
{
}
Add(InlineCode,4787859,462,224)
{
WorkPoints=#6:doWork|
EventPoints=#7:onEvent|
VarPoints=#6:Result|
DataPoints=#4:Text|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onEvent:THI_Event;|5: |50: procedure doWork(var Data:TData; index:word);|50: procedure Result(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|57:procedure THiAsmClass.doWork(var Data:TData; index:word);|5:begin|28: _hi_OnEvent(onEvent,Data);|4:end;|0:|57:procedure THiAsmClass.Result(var Data:TData; index:word);|5:begin|0:|4:end;|0:|4:end.|
link(onEvent,13357553:doMessage,[])
}
Add(Button,7016514,413,224)
{
Left=90
Top=145
Data=String(hello)
link(onClick,4787859:doWork,[])
}
Add(Edit,2823786,462,175)
{
Left=460
Top=160
}
карма: 23
0