Вот как я решил подобную ситуацию в одной из своих программ(тема Wizarder в форуме GUI
).
У меня есть динамический массив объектов типа Инфо. При открытии нового окна создаётся новый экземпляр Инфо, и ссылка на него присваивается глобальной переменной типа Инфо объявленной в модуле, к полям которой присоединены контролы на форме.
Запоминаю переменную открывшегося окна(можно получить стандартными методами модуля Windows), а на событие Activate окна вешаем стандартный хук. Теперь, в процедуре хука, мы получаем переменную текущего окна, ищем её в массиве и получаем нужный нам экземпляр объекта. Объявленной глобальной переменной мы присваиваем найденный объект из масива. Получается некая динамика "глобальных" интеракторов.
Известно, что все контролы прекрасно работают с интеракторами из указателя на запись итд. То есть понимают указатели. А все охранники, увеомители и интеракторы кнопок работают с глобальными процедурами, в обычном порядке, которые работают с глобальной переменной Инфо.
Полезно так же применить некую процедуру-семафор, чтобы избежать обращений к NIL-ной глобальной переменной.