powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подменить объект на свой.
5 сообщений из 5, страница 1 из 1
Подменить объект на свой.
    #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
Подменить объект на свой.
    #39515132
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кл.Так можно?Можно. Но можно поиметь грабли при модификации исходного класса. Посмотрите, может Ваш DataLink создается каким-нибудь виртуальным методом?
...
Рейтинг: 0 / 0
Подменить объект на свой.
    #39515140
_Vasilisk_,
Уже нашел. Называется хак свойства на чтение. Если оно без сеттера.
Нет DataLink создается жестко.
...
Рейтинг: 0 / 0
Подменить объект на свой.
    #39515171
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кл.Если оно без сеттера.И читается напрямую из поля
...
Рейтинг: 0 / 0
Подменить объект на свой.
    #39515190
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кл.Вызывает вопрос процедура ReplaceDataLink. Она работает. Но хотелось бы уточнить. Так можно?Только если уверен, что не отломишь что-нить в логике в связанных DevExpress компонентах, существующих и будущих
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подменить объект на свой.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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