![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в рантайме заменить один комп. на другой с таким же именем? [D6, D7]
vasilly © (2003-02-11 19:48:00)т.е. объявлено A: TType1... а некоторый момент времени сделать A.Free; после чего A:= TType2.Create()...
Такое взможно??
y-soft (2003-02-11 22:04:00) [1]>vasilly © (11.02.03 21:48)
Только не забудьте методы интерфейса в классах-потомках реализовать :)
vasilly (2003-02-11 21:48:00) [2]
> 1. Объявить интерфейс и написать компоненты-потомки искомых
> с поддержкой этого интерфейса. Потом объявить переменную
> типа этого интерфейса и делать с ней все, что угодно (внутренняя
> реализация COM)
Спасибо огромное, это наверное то что нужно:)) что то я про это и не подумал..
y-soft (2003-02-11 21:36:00) [3]Есть еще варианты
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. Использовать инкапсуляцию. Написать базовый класс-оболочку, а в его потомках уже обеспечивать работу с нужными классами. Использовать переменную типа этого базового класса для динамической смены инкапсулированных классов
Vit@ly (2003-02-11 21:11:00) [4]Аккуратней со словом комп. На существующем сленге это то-ли компьютер, то-ли компонент, что ближе к обсуждениям на форуме. Мне кажется, что не стоит экономить на всякого рода сокращениях
Романов Р.В. (2003-02-11 21:00:00) [5]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;
vasilly (2003-02-11 20:41:00) [6]
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 20:25:00) [7]
> Точнее вопрос как изменить compiler-generated runtime type
> information
Что то ты все усложняешь. Для чего это?
vasilly (2003-02-11 20:22:00) [8]общий наследник у них есть, базовый клас сделать уже не возможно...
немогу же я переписать VCL.. :)
vasilly (2003-02-11 20:20:00) [9]Точнее вопрос как изменить compiler-generated runtime type information ? Получить то ее можно, а вот как сказать что она совсем другая уже?
Романов Р.В. (2003-02-11 20:19:00) [10]
> Мне необходимо в одном случае пользовать один клас...а в
> другом совершенно другой
А почему бы не сделать на них отдельные указатели.
> именоо что они не наследники одного класса
По крайней мере они должны быть наследниками TObject
Anatoly Podgoretsky (2003-02-11 20:19:00) [11]Наследние есть всегда, как минимум от TObject, кроме того никто не мешает сделать базовый класс с абстрактными методами.
vasilly (2003-02-11 20:13:00) [12]такое возможно?...именоо что они не наследники одного класса
vasilly (2003-02-11 20:12:00) [13]Проблема в том что эти два класса имеют только несколько методов с общими названиями.... наследника общего нет. Мне необходимо в одном случае пользовать один клас...а в другом совершенно другой :) ну например, если сравнить бде и адо компоненты.. то сначала через бде, затем обращаясь к тому же (якобы компоненту) через адо
Anatoly Podgoretsky (2003-02-11 20:10:00) [14]Так как ты написал, типы TType1 и TType2 должны быть совместимыми, то есть один должет быть наследником.
vasilly (2003-02-11 20:06:00) [15]? кто еще знает :)
vasilly (2003-02-11 19:53:00) [16]Как?? если не секрет.. я только что попробывал у мен не вышло :(
Anatoly Podgoretsky (2003-02-11 19:51:00) [17]Возможно