Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.031 c
15-1165320757
Gero
2006-12-05 15:12
2006.12.24
Были раньше времена…


6-1154444611
Gerb
2006-08-01 19:03
2006.12.24
Возможно ли редактирование файла по фтп без закачки?


4-1155821441
apic
2006-08-17 17:30
2006.12.24
Короткий путь


6-1153807004
verybadbug
2006-07-25 09:56
2006.12.24
работа с IIS


1-1163277189
PHPDeveloper
2006-11-11 23:33
2006.12.24
выделение области изображения