Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подменить объект на свой. / 5 сообщений из 5, страница 1 из 1
04.09.2017, 14:31:19
    #39515108
Подменить объект на свой.
Имеется класс, со свойством-объектом на чтение:

Код: pascal
1.
2.
3.
4.
5.
6.
TcxDBDataProvider = class(TcxCustomDataProvider)
  private
    FDataLink: TcxDBDataLink;
  protected
    property DataLink: TcxDBDataLink read FDataLink;
  end;



Я хочу подменить в TcxDBDataProviderEx поле DataLink на своё (чтоб было типа TcxDBDataLinkEx).

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
TcxDBDataLinkEx = class(TcxDBDataLink)
  protected
    procedure ActiveChanged; override;
    procedure DataEvent(Event: TDataEvent; Info: TdxNativeInt); override;
  end;

  TcxDBDataProviderEx = class(TcxDBDataProvider)
  private
    procedure ReplaceDataLink;
  protected
    procedure ActiveChanged(AActive: Boolean); override;
  public
    constructor Create(ADataController: TcxCustomDataController); override;
  end;


implementation


constructor TcxDBDataProviderEx.Create(ADataController: TcxCustomDataController);
begin
  inherited Create(ADataController);
  // DataLink пока не чему не прицеплен. Можно подменить
  ReplaceDataLink;
end;

procedure TcxDBDataProviderEx.ReplaceDataLink;
type
  PObject = ^TObject;
var
  P: PObject;
begin
  P := @DataLink;
  P^.Free;
  P^ := TcxDBDataLinkEx.Create(Self); // новым типом
  if not(DataLink is TcxDBDataLinkEx) then
    raise Exception.Create('not(DataLink is TcxDBDataLinkEx)');
end;


Вызывает вопрос процедура ReplaceDataLink. Она работает. Но хотелось бы уточнить. Так можно?
...
Рейтинг: 0 / 0
04.09.2017, 14:59:46
    #39515132
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подменить объект на свой.
Алексей Кл.Так можно?Можно. Но можно поиметь грабли при модификации исходного класса. Посмотрите, может Ваш DataLink создается каким-нибудь виртуальным методом?
...
Рейтинг: 0 / 0
04.09.2017, 15:07:27
    #39515140
Подменить объект на свой.
_Vasilisk_,
Уже нашел. Называется хак свойства на чтение. Если оно без сеттера.
Нет DataLink создается жестко.
...
Рейтинг: 0 / 0
04.09.2017, 15:44:59
    #39515171
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подменить объект на свой.
Алексей Кл.Если оно без сеттера.И читается напрямую из поля
...
Рейтинг: 0 / 0
04.09.2017, 16:13:01
    #39515190
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подменить объект на свой.
Алексей Кл.Вызывает вопрос процедура ReplaceDataLink. Она работает. Но хотелось бы уточнить. Так можно?Только если уверен, что не отломишь что-нить в логике в связанных DevExpress компонентах, существующих и будущих
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подменить объект на свой. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]