-
DevilDevil (15.12.07 16:53) [0]В теме сабжа смысла передать не удалось, попробую объяснить в описании.
У меня есть класс-потомокTDataModule
. Я хочу, чтобы на нём можно было размещать компоненты только типаTMyComponent
.
Что я делаю...
Переопределяю методNotification
, еслиAComponent
не того класса, я вызываюException
.
На практике чужой компонент не добавляется и вызывает Exception, однако при дальнейшей компиляции вызываются какие-то внутренние ошибки.
Вопрос... как корректно запрещать добавлять "ненужные" компоненты?
Заранее спасибо. -
Покажи код.
А зачем эксепшн? Сообщение нельзя? -
Джо © (15.12.07 18:13) [2]Что-то я, видно, не совсем сабдж понял? Или что-то в таком роде:type
TDataModule2 = class(TDataModule)
protected
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
public
end;
...
procedure TDataModule2.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (AComponent <> Self) and (Operation = opInsert) then
begin
if not (AComponent is TXXX) then
raise Exception.Create('Only TXXX can be placed here');
end;
end;
? -
DevilDevil (15.12.07 20:06) [3]> Kolan © (15.12.07 16:54) [1]
сообщение - не выход; нужно чтобы компонент не добавлялся.
> Джо © (15.12.07 18:13) [2]
ооо! спасибо, помогло!
главное отличие этого кода от моего состоит в том, чтоinherited
я вызывал только в удачном случае. Ещё раз спасибо! тема закрыта. -
Юрий Зотов © (16.12.07 13:32) [4]Зачем перекрывать Notification, если специально для сабжа существует ValidateInsert? Его и надо перекрывать.
-
> Переопределяю метод Notification, если AComponent не того
> класса, я вызываю Exception.
> procedure TDataModule2.Notification(AComponent: TComponent;
>
> Operation: TOperation);
> begin
> inherited;
>
> if (AComponent <> Self) and (Operation = opInsert) then
> begin
> if not (AComponent is TXXX) then
> raise Exception.Create('Only TXXX can be placed here')
> ;
> end;
> end;
> ооо! спасибо, помогло!
Не пойму где отличие сабжа от кода Джо, по моему просто 1 к 1 написано сос слов, в чем проблемма была? -
{RASkov} © (17.12.07 17:18) [6]> [5] Kolan © (17.12.07 14:44)
В [3] же он "нарисовал" в чем была его ошибка :) inherited - "не в то время и не в том месте")