Форум: "Основная";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
ВнизМожно ли в качастве переменной использовать компонент? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c