Вверх ↑
Ответов: 1925
Рейтинг: 172
#1: 2020-11-03 16:12:50 ЛС | профиль | цитата
Друзья, человек ведь просит пример - так дайте ему пример!

Joiner, вот, попробуй. Суть та же, как в моём ответе выше, только для _hi_OnEvent используется отдельная процедура.
Add(MainForm,2953706,490,273)
{
Position=1
link(onCreate,4856348:a,[])
}
Add(InlineCode,4856348,553,287)
{
@Hint=#56:Здесь записываем в глобальную переменную адрес процедуры|
WorkPoints=#1:a|
EventPoints=#8:OurEvent|9:OurEvent1|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|33:uses kol,Share,Debug,hiGlobalVar;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|9: public|23: OurEvent:THI_Event;|24: OurEvent1:THI_Event;|42: procedure a(var dt:TData; index:word);|5: end;|21:var thic:THiAsmClass;|0:|22://procedure globEvent;|0:|14:implementation|0:|82:procedure globEvent; //Наша глобальная процедура - специально для события OurEvent|5:begin|28: _hi_OnEvent(thic.OurEvent);|4:end;|0:|83:procedure globEvent1; //Наша глобальная процедура - специально для события OurEvent|5:begin|29: _hi_OnEvent(thic.OurEvent1);|4:end;|0:|24:procedure THiAsmClass.a;|5:begin|14: thic := self;|74: dtInteger( ForceGVar('any_global_var_name_proc')^, integer(@globEvent) );|90: //А в эту глоб. переменную (any_global_var_name_proc) записываем адрес процедуры/функции,|46: //которая нужна для глобального использования|76: dtInteger( ForceGVar('any_global_var_name_proc1')^, integer(@globEvent1) );|4:end;|0:|4:end.|
link(OurEvent,11179310:doMessage,[])
link(OurEvent1,13721235:doMessage,[(593,300)(593,335)])
AddHint(-79,-65,188,26,@Hint)
}
Add(InlineCode,12655881,553,371)
{
@Hint=#44:Здесь вызываем из глоб. переменной процедуру|
WorkPoints=#1:a|1:b|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|33:uses kol,Share,Debug,hiGlobalVar;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|9: public|42: procedure a(var dt:TData; index:word);|42: procedure b(var dt:TData; index:word);|5: end;|0:|14:implementation|0:|24:procedure THiAsmClass.a;|91:var gpname:procedure; //объявляем процедурную переменную такого же типа, как наша globEvent|5:begin|37: //Исполнение глоб. процедуры/функции|88: //Получаем указатель из глоб. переменной и записываем его в нашу процедурную переменную|72: gpname := pointer( ToInteger(ForceGVar('any_global_var_name_proc')^) );|0:|47: //Проверяем, что указатель не пуст, и вызываем|31: if @gpname <> nil then gpname;|4:end;|0:|24:procedure THiAsmClass.b;|21:var gpname:procedure;|5:begin|73: gpname := pointer( ToInteger(ForceGVar('any_global_var_name_proc1')^) );|31: if @gpname <> nil then gpname;|4:end;|0:|4:end.|
AddHint(46,1,150,26,@Hint)
}
Add(Button,7510949,490,371)
{
Left=100
Top=95
Width=140
Caption="исполнить процедуру"
link(onClick,12655881:a,[])
}
Add(Message,11179310,602,287)
{
Message="Событие OurEvent"
}
Add(Message,13721235,602,329)
{
Message="OurEvent1"
}
Add(Button,15182043,490,413)
{
Left=100
Top=120
Width=140
Caption="исполнить процедуру1"
link(onClick,12655881:b,[(538,419)(538,384)])
}
карма: 9
1
Голосовали:Joiner
Редактировалось 1 раз(а), последний 2020-11-03 16:28:59