Главная страница
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.023 c
1-44273
Serega
2003-04-02 16:16
2003.04.14
Извлечь avi-шку из res-файла, включенного в exe-шник.


6-44311
mc Antoha
2003-02-21 20:28
2003.04.14
ClientSocket


14-44356
Alexandr
2003-03-28 14:29
2003.04.14
программа нужна


3-43999
Dimitry
2003-03-25 10:25
2003.04.14
запись изображения в таблицу paradox


14-44397
SV
2003-03-25 21:03
2003.04.14
NET Project