Re[6]: Странно ведет себя Delphi
От: tim_ Россия  
Дата: 23.12.03 15:54
Оценка: -1
Здравствуйте, Diouzshev, Вы писали:

D>Hello, tim_!

D>You wrote on Tue, 23 Dec 2003 10:23:11 GMT:

t>> Что самое интересное, так это то, что ошибка обращения по адресу

t>> происходит внутри собственного обработчика события, где, как казалось
t>> бы, переменная уже должна была быть правильно инициализирована.
D>не должна. С чего бы это переменная обязательно должна указывать на объект?
D>По сути получается так, что в методе FormShow класса TfrmOperPlan используется переменная ( frmOperPlan.Height := 162;) которая к классу толком-то и отношения не имеет...

Вот в том-то и дело, что переменная не имеет совершенно никакого отношения к классу, а по сути является лишь указателем. Я лишь сказал, что (выражаясь более примитивно) frmOperPlan := nil или frmOperPlan := TfrmOperPlan(Random(MaxInt)) ну и т. д. вызовет ту же ошибку в обработчике.
D>Что мешает программисту сделать так:

D>
D>var 
D>  FRM : TfrmOperPlan;
D>begin
D>  FRM := TfrmOperPlan.Create(Application);
D>  FRM.FormShow(nil);
D>end;
D>

D>и что по твоему сделает вышеприведенное присваивание?
D>Правильно, AV, если, конечно, frmOperPlan не инициализирована. Если инициализирована, то соответственно значение будет присвоено другому объекту, а вовсе не тому на который ссылается переменная FRM.

При чем тут ваш пример?! Sender в прилагаемом коде вообще не используется. Речь шла о переменной frmOperPlan!

t>> Ну а все, что нужно сделать вам, уважаемый Magic, так это выяснить

t>> как случается так, что вызов события объекта происходит до создания
t>> его экземпляра или после его уничтожения.

D>Уважаемуму Magic нужно перестать использовать левые переменные внутри методов класса, без особой на это надобности, что он, судя по всему, уже понял.


D>With best regards, Alexander Diouzshev-Maltsev.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.