Быстрый вызов процедуры по индексу
Быстрый вызов процедуры по индексу
Быстрый вызов процедуры по индексу Бывает проблема - допустим есть ряд процедур: Proc1 Proc2 Proc3 Proc4 ... И где-то в программе в зависимости от тех или иных условий определяется какую из этих процедур вызвать. Типичный пример - подсветка синтаксиса. В программе определяется тип элемента и необходимо его отформатировать по образцу. Для каждого типа - своя процедура. Первое что приходит в голову - это использовать CASEOF или наставить кучу IF'ов. Но в первом случае это медленно во втором не красиво, да и читабельность страдает. Хорошо бы где-нибудь хранить адреса этих процедур, быстро находить и вызывать. Лучше всего для этого массив. Для начала, объявим свой тип для процедуры и создадим массив по числу их type TMyProc = procedure(); var MyProc : ARRAY [1..4] OF TMyProc; Все начало положено. Далее нам необходимо где-то заполнить наш массив, это надо сделать до начала вызовов! Сделаем это так: procedure TForm1.FormCreate(Sender: TObject); begin MyProc[1]:= @Proc1; MyProc[2]:= @Proc2; MyProc[3]:= @Proc3; MyProc[4]:= @Proc4; end; Все теперь обращаясь к элементу массива мы будем сразу получать адрес нашей процедуры и сможем ее вызвать легко следующим образом: MyProc[ ];