Цитата:
Сообщение от PashaXP
Вот вот, а я еще и плохо разбираюсь...
Этот код выдернул из проги(просто кусок), он работает все ОК, выполняется при событии - нажатие на кнопку
Код:
....
E_Stroka:=TEdit(FindComponent('Edit'+IntTostr(Tek)+IntToStr(z))).Text;
Delete(E_Stroka,Length(E_Stroka)-Length(Poisk)+1,Length(Poisk));
TEdit(FindComponent('Edit'+IntTostr(Tek)+IntToStr(z))).Text:=E_Strok
....
А если Использую TEdit(FindComponent(...).Text в своей процедуре, компилируется, но при работе проги - ошибка....
|
FindComponent - это не просто функция, а член класса
TComponent, и, соответственно, всех его наследников. Когда вы пишете просто
FindComponent, компилятор выбирает метод того класса, в контексте которого происходит вызов. В частности, если вы это пишете внутри процедуры типа
OnCreate,
OnClick и т.п., вызывается метод формы, поскольку эти события принадлежат форме. Если вы выносите вызов
за пределы контекста объекта, компилятор не находит такой функции (потому что вне потомков
TComponent ее просто нет) и сообщает об ошибке.
Если вы хотите непременно пользоваться
FindComponent вне методов формы, указывайте явно принадлежность при вызове:
Form1.FindComponent. Если вы этого не делаете, может сложиться ситуация, когда компилятор подставит неверный контекст, например, если этот вызов будет обернут в
with.