Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
3-63579
Senator
2003-02-04 10:48
2003.02.20
Запуск программы


3-63482
mate
2003-02-02 12:46
2003.02.20
Выделение записи


3-63567
kok
2003-02-03 17:20
2003.02.20
IB транзакции


3-63544
SasaR
2003-02-03 14:54
2003.02.20
FibDataSet - две транзакции


4-63891
slpro
2003-01-09 14:50
2003.02.20
DrawItem ,а в Edit e ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский