Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: -0.985 c
7-44464
galak
2003-02-18 03:00
2003.04.14
ещё одна клавиатура


1-44250
maxi
2003-04-02 10:29
2003.04.14
Глючит MultiSelect в TListBox. Как исправить ?


14-44439
Анонимщик
2003-03-18 15:55
2003.04.14
G.711, G.721, G.723 - где взять?


14-44371
Yegor Derevenets
2003-03-26 20:31
2003.04.14
Последние N строк файла


3-44060
guest123
2003-03-25 14:11
2003.04.14
подстановка




   Наверх