Даже если FControlList[I]
не nil
, это не значит, что оно указывает на действительные данные. Возможно, базовый экземпляр объекта уже освобожден.
Я также предлагаю убрать приведение типа к IMyControl
. Supports
может принимать объекты и интерфейсы в качестве параметра, даже если они равны nil
, и выдавать желаемый результат.
Кроме того, вы можете использовать этот способ вызова supports
для удобства и читабельности кода:
if Supports(FControlList[i], IMyControlEx, MyControlEx) then
begin
MyControlEx.DoYourMagic(Self, SomeData);
end;