Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизTNotifyEvent и AccessViolation Найти похожие ветки
← →
mfender © (2006-12-06 14:16) [0]
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. Как можно избавиться от этой порчи?
← →
Palladin © (2006-12-06 14:32) [1]Не долбится головой об стенку, а проверить можно ли пройти.
← →
Рамиль © (2006-12-06 14:40) [2]Assigned + F1
← →
mfender © (2006-12-06 14:47) [3]
> Рамиль © (06.12.06 14:40) [2]
Спасибо! Помогло! Ещё раз спасибо!
← →
Anatoly Podgoretsky © (2006-12-06 14:48) [4]> mfender (06.12.2006 14:16:00) [0]
Странно написаный компонент.
Почему то этот переход делается без проверки на допустимость
Посмотри как VCL написан.
← →
Loginov Dmitry © (2006-12-06 15:43) [5]
constructor TmfCustomPicturePanel.Create(AOwner: TComponent);
begin
FbtnStretch.OnClick := StretchClick;
end;
Как такое вообще может работать?
← →
Palladin © (2006-12-06 15:45) [6]А почему оно не может работать?
← →
app © (2006-12-06 15:48) [7]
>
> Как такое вообще может работать?
Нет оснований для сомнений, процедура типа TNotifyEvent, а раз так то почему бы ей не работать.
← →
Loginov Dmitry © (2006-12-06 16:20) [8]> А почему оно не может работать?
Не вызваны родительские конструкторы. Это по вашему нормально?
← →
Loginov Dmitry © (2006-12-06 16:22) [9]Как я понял, в [0] приведен псевдокод.
← →
Anatoly Podgoretsky © (2006-12-06 16:25) [10]> Loginov Dmitry (06.12.2006 16:20:08) [8]
Какие еще конструкторы, при назначение свойства?
Ты о чем?
← →
Loginov Dmitry © (2006-12-06 16:43) [11]> Какие еще конструкторы, при назначение свойства?
Не знаю. Вам виднее. Только как вот это объясните:
constructor TmfCustomPicturePanel.Create(AOwner: TComponent);
begin
FbtnStretch.OnClick := StretchClick;
end;
Где создается FbtnStretch?
Где вызывается inherited?
Или счас так и нужно, и я отстал от жизни?
← →
Anatoly Podgoretsky © (2006-12-06 16:45) [12]> Loginov Dmitry (06.12.2006 16:43:11) [11]
> Где создается FbtnStretch?
Он уже создан, это поле класса
← →
Amoeba © (2006-12-06 16:45) [13]
> if FImage.Stretch then
> FImage.Stretch := False
> else
> FImage.Stretch := True;
Это замени наFImage.Stretch := not FImage.Stretch;
Так короче и понятней.
← →
Loginov Dmitry © (2006-12-06 16:47) [14]> Он уже создан, это поле класса
Откуда такая информация?
← →
Anatoly Podgoretsky © (2006-12-06 16:53) [15]> Loginov Dmitry (06.12.2006 16:47:14) [14]
Ой, ты что совсем Дельфи не знаешь?
← →
Loginov Dmitry © (2006-12-06 17:02) [16]> Ой, ты что совсем Дельфи не знаешь?
Что именно я не знаю?
Только пожалуйста, отвечайте максимально осмысленно.
← →
Anatoly Podgoretsky © (2006-12-06 17:03) [17]> Loginov Dmitry (06.12.2006 17:02:16) [16]
Например не знаешь как работают конструкторы, ознакомься самостоятельно по справке.
← →
Loginov Dmitry © (2006-12-06 17:10) [18]> [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 20:32) [19]> Loginov Dmitry (06.12.2006 17:10:18) [18]
Зря не слушаешься, сопротивляешься, почитай хотя бы справку, если уж не хочешь читать учебник для начинающих.
← →
Loginov Dmitry © (2006-12-06 20:55) [20]- 2 + 2 = 5 ?
- Неа!
- Тогда читай учебники, пока не поймешь, что 2 + 2 = 5!
← →
sniknik © (2006-12-06 21:53) [21]>> Как такое вообще может работать?
> Нет оснований для сомнений, процедура типа TNotifyEvent, а раз так то почему бы ей не работать.
...
> Какие еще конструкторы, при назначение свойства?
> Ты о чем?
о том, что у него в конструкторе вообще не связанному с TNotifyEvent, и главное не созданному обьекту FbtnStretch: TSpeedButton; свойство устанавливается FbtnStretch.OnClick := StretchClick;
т.е. если бы он там событие FOnStretchClick инициализировал начальным значением то вопроса бы не было. да и то inherited в конструкторе все одно бы не помешал.
← →
Anatoly Podgoretsky © (2006-12-07 00:41) [22]О черт, замылились глаза
FbtnStretch: TSpeedButton;
Я думал об
FOnStretchClick: TNotifyEvent;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.347 c