Показать сообщение отдельно
  #23  
Старый 01.04.2008, 18:06
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от 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.
Ответить с цитированием