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

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

Access violation at address 00356273 in module 'designide60.bpl'. [D6, XP]


DROWSY ©   (2010-06-16 10:00:00) 

Сделал робкую попытку создать простой компонент :
unit fb_DataSet;

interface

uses
 Windows, Messages, SysUtils, Classes, DB, IBCustomDataSet;

type
 TfbDataSet = class(TIBDataSet)
 private
   FMastData: TDataSet;
   procedure SetMastData(const Value: TDataSet);
 protected
 published
   property MastData : TDataSet read FMastData write SetMastData;
 public
 end;

procedure Register;

implementation

{ TfbDataSet }

procedure TfbDataSet.SetMastData(const Value: TDataSet);
begin
 FMastData := Value;
end;

procedure Register;
begin
 RegisterComponents('few_DataSet', [TfbDataSet]);
end;

end.

Установил его на панель инструментов.

И расположил на датамодуле рядом с обычным компонентом TIBDataSet;

type
 TdmLayOut = class(TDataModule)
   ibLayOut   : TIBDataSet;
   fbDataSet : TfbDataSet;
.......
.......

После этого, при попытке в дизайне редактировать свойства
и
   ibLayOut
и
   fbDataSet
выдаётся ошибка :
Access violation at address 00356273 in module 'designide60.bpl'.

Если разместить их на разных датамодулях, то всё нормально.
В чём причина?


DROWSY   (2010-06-16 13:08:00) [1]


> icWasya ©   (16.06.10 12:24) [3]

Спасибо!


icWasya   (2010-06-16 12:24:00) [2]

в интерфейсе

procedure Notification(AComponent: TComponent; Operation: TOperation);override

и в реализации
procedure TfbDataSet .SetMastData(const Value: TDataSet);
begin
 if FMastData = Value then Exit;

 if Assigned(FMastData ) then RemoveFreeNotification(FMastData );
 FMastData := Value;
 if Assigned(FMastData ) then  FreeNotification(FMastData );

end;

procedure TfbDataSet .Notification(AComponent: TComponent; Operation: TOperation);
begin
 if Operation = opRemove then begin
   if (AComponent = FMastData ) then
     FMastData := Nil;
 end;
 inherited;

end;


DROWSY   (2010-06-16 12:21:00) [3]


> Ega23 ©   (16.06.10 11:59) [1]
> ЕМНИП, это что-то связанное с поведением компонента в design-
> time. Тебе 2 пакета надо, один для runtime, другой для designtime.
>  У Тейксейры это очень хорошо было расписано. Ну или на
> крайняк погугли 'designide60.bpl', тоже много нароешь.


Спасибо, EGA23!
Будет время, обязательно посмотрю Текстейру.

> Тебе 2 пакета надо, один для runtime, другой для designtime.

У меня, кажется не такой сложный случай.
Почему - не знаю, но выяснилось, что если после добавления нового
свойства в  TfbDataSet = class(TIBDataSet), и компиляции пакета,
если выйти и снова загрузить Дельфи, то новый компонент ведёт себя
нормально.


Ega23   (2010-06-16 11:59:00) [4]

ЕМНИП, это что-то связанное с поведением компонента в design-time. Тебе 2 пакета надо, один для runtime, другой для designtime. У Тейксейры это очень хорошо было расписано. Ну или на крайняк погугли 'designide60.bpl', тоже много нароешь.


Наверх

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