Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2014-04-29 12:52:23 ЛС | профиль | цитата
ДА, правильно.

Обработчик батона (к примеру) обязательно содержит _hi_OnEvent.
Не, ну можно попробовать _hi_CreateEvent - и ничего не получим. Некому просто будет исполнять вышеупомянутое "поручение"
Самый первый исполнитель-то -- должен быть.

Add(MainForm,2953706,343,133)
{
}
Add(Button,12545460,112,126)
{
Left=200
Top=105
link(onClick,11928653:doWork2,[])
}
Add(Edit,5116022,273,63)
{
Left=200
Top=70
Text="99995"
Alignment=1
}
Add(If_else,4885337,266,126)
{
Type=3
link(onTrue,11928653:doWork1,[(305,132)(305,118)(172,118)])
link(onFalse,2953706:doCaption,[])
link(Op2,5116022:Text,[])
}
Add(Counter,6657830,196,126)
{
Max=100000
link(onNext,4885337:doCompare,[])
}
Add(HubEx,11928653,168,126)
{
link(onEvent,6657830:doNext,[])
}
В этом примере именно БАТОН делает все вызовы, и именно поэтому "кольцевание" является корректным. ((даже doCaption делает батон))
Если знать некоторые подробности...
В данном случае, оно не более, чем "графическое"

------------ Дoбавленo в 12.42:
И еще один момент про НИЗЯ для _hi_CreateEvent: следует помнить, что сначала закончится метод, а уже потом вызовется событие (если будет кому его вызывать)
Например здесь -- НИЗЯ
#pas
procedure THIConvertor._work_doConvert12(var _Data:TData; Index:word);//StrToStream
var S:string;
St:PStream;
len:cardinal;
begin
S := ReadString(_Data,_data_Data);
St := NewMemoryStream;
len := Length(S);
if len > 0 then St.Write(s[1],len);
St.Position := 0;
_hi_OnEvent(_event_onResult,St);
St.free;
end;
Упадет все нафиг, когда будет отправлено событие (предшественником) с уже убитым стримом

------------ Дoбавленo в 12.52:
Да, и еще первый аргумент типа TData....
Это не какая-то левая структура, а именно входной аргумент метода. Просто обязательно.
А иначе как "предшественник" узнает о твоих хитромудрых манипуляциях
карма: 9

0