![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TNotifyEvent и AccessViolation [D7]
mfender © (2006-12-06 14:16:00)
type
TmfCustomPicturePanel = class(TCustomPanel)
private
FbtnStretch: TSpeedButton;
FOnStretchClick: TNotifyEvent;
protected
procedure StretchClick(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
published
property OnStretchClick: TNotifyEvent
read FOnStretchClick write FOnStretchClick;
end;
constructor TmfCustomPicturePanel.Create(AOwner: TComponent);
begin
FbtnStretch.OnClick := StretchClick;
end;
procedure TmfCustomPicturePanel.StretchClick(Sender: TObject);
begin
if FImage.Stretch then
FImage.Stretch := False
else
FImage.Stretch := True;
FOnStretchClick(Sender);
end;
Так вот, если я снаружи (у компонента на форме) определяю какие-то действия по клику на кнопку - всё нормально. Если нет - AccessViolation по адресу 0. Как можно избавиться от этой порчи?
Anatoly Podgoretsky (2006-12-07 00:41:00) [1]О черт, замылились глаза
FbtnStretch: TSpeedButton;
Я думал об
FOnStretchClick: TNotifyEvent;
sniknik (2006-12-06 21:53:00) [2]>> Как такое вообще может работать?
> Нет оснований для сомнений, процедура типа TNotifyEvent, а раз так то почему бы ей не работать.
...
> Какие еще конструкторы, при назначение свойства?
> Ты о чем?
о том, что у него в конструкторе вообще не связанному с TNotifyEvent, и главное не созданному обьекту FbtnStretch: TSpeedButton; свойство устанавливается FbtnStretch.OnClick := StretchClick;
т.е. если бы он там событие FOnStretchClickинициализировал начальным значением то вопроса бы не было. да и то inherited в конструкторе все одно бы не помешал.
Loginov Dmitry (2006-12-06 20:55:00) [3]- 2 + 2 = 5 ?
- Неа!
- Тогда читай учебники, пока не поймешь, что 2 + 2 = 5!
Anatoly Podgoretsky (2006-12-06 20:32:00) [4]> Loginov Dmitry (06.12.2006 17:10:18) [18]
Зря не слушаешься, сопротивляешься, почитай хотя бы справку, если уж не хочешь читать учебник для начинающих.
Loginov Dmitry (2006-12-06 17:10:00) [5]> [17] Anatoly Podgoretsky © (06.12.06 17:03)
> > Loginov Dmitry (06.12.2006 17:02:16) [16]
>
> Например не знаешь как работают конструкторы, ознакомься
> самостоятельно по справке.
Как бы конструкторы ни работали, а код
constructor TmfCustomPicturePanel.Create(AOwner: TComponent);
begin
FbtnStretch.OnClick := StretchClick;
end;
в любом случае является некорректным.
Объект FbtnStretch еще не создан, однако OnClick используется.
Если вы считаете что объект FbtnStretch уже создан, то поясните, где, кем и почему он был создан?
Anatoly Podgoretsky (2006-12-06 17:03:00) [6]> Loginov Dmitry (06.12.2006 17:02:16) [16]
Например не знаешь как работают конструкторы, ознакомься самостоятельно по справке.
Loginov Dmitry (2006-12-06 17:02:00) [7]> Ой, ты что совсем Дельфи не знаешь?
Что именно я не знаю?
Только пожалуйста, отвечайте максимально осмысленно.
Anatoly Podgoretsky (2006-12-06 16:53:00) [8]> Loginov Dmitry (06.12.2006 16:47:14) [14]
Ой, ты что совсем Дельфи не знаешь?
Loginov Dmitry (2006-12-06 16:47:00) [9]> Он уже создан, это поле класса
Откуда такая информация?
Anatoly Podgoretsky (2006-12-06 16:45:00) [10]> Loginov Dmitry (06.12.2006 16:43:11) [11]
> Где создается FbtnStretch?
Он уже создан, это поле класса
Amoeba (2006-12-06 16:45:00) [11]
> if FImage.Stretch then
> FImage.Stretch := False
> else
> FImage.Stretch := True;
Это замени на
FImage.Stretch := not FImage.Stretch;
Так короче и понятней.
Loginov Dmitry (2006-12-06 16:43:00) [12]> Какие еще конструкторы, при назначение свойства?
Не знаю. Вам виднее. Только как вот это объясните:
constructor TmfCustomPicturePanel.Create(AOwner: TComponent);
begin
FbtnStretch.OnClick := StretchClick;
end;
Где создается FbtnStretch?
Где вызывается inherited?
Или счас так и нужно, и я отстал от жизни?
Anatoly Podgoretsky (2006-12-06 16:25:00) [13]> Loginov Dmitry (06.12.2006 16:20:08) [8]
Какие еще конструкторы, при назначение свойства?
Ты о чем?
Loginov Dmitry (2006-12-06 16:22:00) [14]Как я понял, в [0] приведен псевдокод.
Loginov Dmitry (2006-12-06 16:20:00) [15]> А почему оно не может работать?
Не вызваны родительские конструкторы. Это по вашему нормально?
app (2006-12-06 15:48:00) [16]
>
> Как такое вообще может работать?
Нет оснований для сомнений, процедура типа TNotifyEvent, а раз так то почему бы ей не работать.
Palladin (2006-12-06 15:45:00) [17]А почему оно не может работать?
Loginov Dmitry (2006-12-06 15:43:00) [18]
constructor TmfCustomPicturePanel.Create(AOwner: TComponent);
begin
FbtnStretch.OnClick := StretchClick;
end;
Как такое вообще может работать?
Anatoly Podgoretsky (2006-12-06 14:48:00) [19]> mfender (06.12.2006 14:16:00) [0]
Странно написаный компонент.
Почему то этот переход делается без проверки на допустимость
Посмотри как VCL написан.
mfender (2006-12-06 14:47:00) [20]
> Рамиль © (06.12.06 14:40) [2]
Спасибо! Помогло! Ещё раз спасибо!