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

Вниз

Можно ли в качастве переменной использовать компонент?   Найти похожие ветки 

 
grusty ©   (2003-04-01 16:24) [0]

Можно ли в качастве переменной использовать компонент (например Table) и чтобы эта переменная унаследовала все свойства соответствующего компонента?
Заранее благодарен!


 
Соловьев ©   (2003-04-01 16:26) [1]

create


 
Skier ©   (2003-04-01 16:30) [2]

Давай подробнее : цель какая ?


 
han_malign ©   (2003-04-01 16:37) [3]

Table1:=Table2;
(pointer(Table1)=pointer(Table2)) - true

class - это тот же object + RTTI, и все лишнее спрятано в compiler magic
если утрировано - пишем My: TMyClass, подразумеваем pMy: PMyObject (если это о чем то говорит)

procedure ProcessTable(aTable: TTable);
begin
aTable. .....
end;

ProcessTable(Table1);//aTable=Table1
ProcessTable(Table2);//aTable=Table2


 
grusty ©   (2003-04-01 16:40) [4]

Ситуация такая:
Существует 2 таблицы и в зависимости от определенной ситуации необходимо использовать либо первую таблицу, либо вторую. И дабы не писать в каждой ситуации одни и те же процедуры над разными таблицами, то хотелось бы вместо таблиц использовать переменную.


 
Skier ©   (2003-04-01 16:42) [5]

Тогда смотри procedure ProcessTable(aTable: TTable);
от han_malign © (01.04.03 16:37)


 
han_malign ©   (2003-04-01 16:44) [6]

WARNING:
- только не надо использовать, в качестве переменной, компонент положенный на форму в design time, надо просто объявить поле компонентного типа, в любой секции кроме published, либо описать локальную переменную метода.
private
FTempTable: TTable;

procedure .....
var tempTable: TTable;

З.Ы. И следи что-бы не сделать лишний раз Free, т.к. эта переменная будет второй ссылкой на один и тот-же экземпляр...


 
grusty ©   (2003-04-01 16:46) [7]

Хорошо, а если компоненты разные (например TTable и TMemoryTable)?


 
grusty ©   (2003-04-01 16:47) [8]

--> han_malign

И мне необходимо использовать компоненты, которые расположены на форме...


 
Skier ©   (2003-04-01 16:50) [9]

Примерно так :


ProcessTable(ADataSet: TDBDataSet);
begin
if Assigned(ADataSet) then begin
if ADataSet is TTable then begin
//...process ADataSet as TTable...
end //if
else if ADataSet is TMemoryTable then begin
//...process ADataSet as TMemoryTable ...
end //if
else begin
ShowMessage("Работать отказываюсь !");
end; //else
end; //if
end;


 
han_malign ©   (2003-04-01 16:57) [10]

> И мне необходимо использовать компоненты, которые расположены на форме...
только не надо использовать, в качестве переменной
- а вот в качестве значения этой переменной, очень даже, надо...

> а если компоненты разные
- а тогда надо почитать про полиморфизм и базовые(абстрактные) интерфейсы...


 
grusty ©   (2003-04-01 17:28) [11]

А нельзя использовать что-то типа:

...
procedure Form.Show(Sender: TObject);
var
tbl: TComponent:
begin
...
if i=0 then tbl:=Table1 as TComponent else tbl:=Table2 as TComponent;
...
end


 
grusty ©   (2003-04-01 17:30) [12]

А нельзя использовать что-то вроде:

...
procedure Form.Show(Sender: TObject);
var
tbl: TComponent:
begin
...
if i=0 then tbl:=Table1 as TComponent else tbl:=Table2 as TComponent;
...
end



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
14-44375
Officeman
2003-03-26 23:08
2003.04.14
сабж Вот и я тоже невыдержал и побежал потрепаться =)ХА)


3-44005
maxon
2003-03-25 12:10
2003.04.14
по SQL


3-44082
val_123
2003-03-26 20:08
2003.04.14
TQuery


3-43990
denary
2003-03-18 01:41
2003.04.14
анализировать код нажатой клавиши


1-44271
Маришка
2003-04-02 16:19
2003.04.14
приложение дельфи для интернета