Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.20;
Скачать: CL | DM;

Вниз

Как в рантайме заменить один комп. на другой с таким же именем?   Найти похожие ветки 

 
vasilly ©   (2003-02-11 19:48) [0]

т.е. объявлено A: TType1... а некоторый момент времени сделать A.Free; после чего A:= TType2.Create()...
Такое взможно??


 
Anatoly Podgoretsky ©   (2003-02-11 19:51) [1]

Возможно


 
vasilly ©   (2003-02-11 19:53) [2]

Как?? если не секрет.. я только что попробывал у мен не вышло :(


 
vasilly ©   (2003-02-11 20:06) [3]

? кто еще знает :)


 
Anatoly Podgoretsky ©   (2003-02-11 20:10) [4]

Так как ты написал, типы TType1 и TType2 должны быть совместимыми, то есть один должет быть наследником.


 
vasilly ©   (2003-02-11 20:12) [5]

Проблема в том что эти два класса имеют только несколько методов с общими названиями.... наследника общего нет. Мне необходимо в одном случае пользовать один клас...а в другом совершенно другой :) ну например, если сравнить бде и адо компоненты.. то сначала через бде, затем обращаясь к тому же (якобы компоненту) через адо


 
vasilly ©   (2003-02-11 20:13) [6]

такое возможно?...именоо что они не наследники одного класса


 
Anatoly Podgoretsky ©   (2003-02-11 20:19) [7]

Наследние есть всегда, как минимум от TObject, кроме того никто не мешает сделать базовый класс с абстрактными методами.


 
Романов Р.В. ©   (2003-02-11 20:19) [8]


> Мне необходимо в одном случае пользовать один клас...а в
> другом совершенно другой

А почему бы не сделать на них отдельные указатели.


> именоо что они не наследники одного класса

По крайней мере они должны быть наследниками TObject


 
vasilly ©   (2003-02-11 20:20) [9]

Точнее вопрос как изменить compiler-generated runtime type information ? Получить то ее можно, а вот как сказать что она совсем другая уже?


 
vasilly ©   (2003-02-11 20:22) [10]

общий наследник у них есть, базовый клас сделать уже не возможно...
немогу же я переписать VCL.. :)


 
Романов Р.В. ©   (2003-02-11 20:25) [11]


> Точнее вопрос как изменить compiler-generated runtime type
> information

Что то ты все усложняешь. Для чего это?


 
vasilly ©   (2003-02-11 20:41) [12]

var
Query: TQuery;
begin
Query:= TQuery.Create( Self);
CompName:= Components[i].Name;
Components[i].Free;
Query.Name:= CompName;
end

Components[i] - TADOQuery


 
Романов Р.В. ©   (2003-02-11 21:00) [13]

var
Query: TDataSet;
begin
// Работаем с БДЕ
Query := TQuery.Create( Self);
TQuery(Query).SQL.Add(...
Query.Open;
Query.Free;
// Работаем с АДО
Query = Components[i] // Components[i] - TADOQuery
TADOQuery(Query).SQL.Add(...
Query.Open;
Query.Free;
end;


 
Vit@ly ©   (2003-02-11 21:11) [14]

Аккуратней со словом комп. На существующем сленге это то-ли компьютер, то-ли компонент, что ближе к обсуждениям на форуме. Мне кажется, что не стоит экономить на всякого рода сокращениях


 
y-soft ©   (2003-02-11 21:36) [15]

Есть еще варианты

1. Объявить интерфейс и написать компоненты-потомки искомых с поддержкой этого интерфейса. Потом объявить переменную типа этого интерфейса и делать с ней все, что угодно (внутренняя реализация COM)

type
IQuery = interface
procedure Open;
procedure Close;
.....................
end;

TInterfacedQuery = class(TQuery, IQuery)
........................................

TInterfacedADOQuery = class(TADOQuery, IQuery)
.........................................

var
InterfacedQuery : IQuery;
Query : TQuery;
ADOQuery : TADOQuery;

Query := TQuery.Create(Self);
ADOQuery := TADOQuery.Create(Self);

InterfacedQiery := Query as IQuery;
with InterfacedQuery do
begin
Open;
............
Close;
end;

InterfacedQiery := ADOQuery as IQuery;
with InterfacedQuery do
begin
Open;
............
Close;
end;
................................

2. Использовать инкапсуляцию. Написать базовый класс-оболочку, а в его потомках уже обеспечивать работу с нужными классами. Использовать переменную типа этого базового класса для динамической смены инкапсулированных классов


 
vasilly ©   (2003-02-11 21:48) [16]


> 1. Объявить интерфейс и написать компоненты-потомки искомых
> с поддержкой этого интерфейса. Потом объявить переменную
> типа этого интерфейса и делать с ней все, что угодно (внутренняя
> реализация COM)

Спасибо огромное, это наверное то что нужно:)) что то я про это и не подумал..


 
y-soft ©   (2003-02-11 22:04) [17]

>vasilly © (11.02.03 21:48)

Только не забудьте методы интерфейса в классах-потомках реализовать :)



Страницы: 1 вся ветка

Текущий архив: 2003.02.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
1-63641
rtooo
2003-02-11 19:31
2003.02.20
Кнопка Tab


3-63507
mate
2003-02-02 16:47
2003.02.20
Создание отчётов QReport


4-63920
Senator
2003-01-09 11:51
2003.02.20
TerminateProcess


1-63669
Z-man7777
2003-02-12 08:29
2003.02.20
Динамическое создание MenuItem-ов в PopupMenu


7-63880
Supreme
2002-12-19 20:25
2003.02.20
Как работать с пультом для TV-тюнера?