Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TNotifyEvent и AccessViolation [D7]


Страницы:   1 2

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]

Спасибо! Помогло! Ещё раз спасибо!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо