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

Вниз

количество свойств в компоненте   Найти похожие ветки 

 
bpv   (2003-06-17 16:37) [0]

никто не знает как определить количество свойств в компоненте


 
bpv   (2003-06-17 16:37) [1]

конечно в рунтиме


 
Anatoly Podgoretsky ©   (2003-06-17 16:40) [2]

Интересно а зачем, для спортивного интереса.


 
bpv   (2003-06-17 16:45) [3]

хочется написать метод ассигн для потомка Query, при использовании TMemoryStream и
WriteComponent(Source);
MS.Seek(0,0);
MS.ReadComponent(Sender);
не получается копировать события, поля :-( и кроме того копируется UpdateObject, что совершенно не нужно


 
bpv   (2003-06-17 16:46) [4]

вот и думал переписать Assign который будет делать как мне нужно,
а в ручную присваивать все свойство на мой взгляд не правельно


 
MalkoLinge ©   (2003-06-17 16:51) [5]

Дело все в том, что если опубликованные свойства еще можно посчитать (изучи typInfo.pas) то вот все остальные, в том числе поля уже нет.


 
bpv   (2003-06-17 16:53) [6]

2 MalkoLinge мне достаточно опубликованные, typInfo.pas бегло смотрел вроде там нет, но могу еще поглядеть мне не трудно


 
bpv   (2003-06-17 16:58) [7]

2 MalkoLinge если ты имеешь в виду GetPropList, то не хотелось бы с ней возиться помоему ресурсоемкая очень


 
MalkoLinge ©   (2003-06-17 17:39) [8]


> 2 MalkoLinge если ты имеешь в виду GetPropList, то не хотелось
> бы с ней возиться помоему ресурсоемкая очень

Так сделай свою на олснове этой функции, чтобы была менее ресурсоемкой.

У тебя же все исходники под рукой !


 
AlexT1000 ©   (2003-06-17 17:40) [9]

в rxlib есть модуль обертка над GetPropList .посмотри .
я делал и так и так. ничего сложного


 
Юрий Зотов ©   (2003-06-17 18:39) [10]

Даже и обертка не нужна:
PropCount := GetPropList(TMyQuery.ClassInfo, tkAny, nil);
И все.

P.S.
Это вместе с событиями. Если надо без них, просто замените tkAny на tkProperties.


 
Forester ©   (2003-06-17 22:00) [11]

Работа со свойствами объекта (определениие количества, типа, присвоение и чтение значений) с использованием RTTI хорошо описано в книге: Стив Тейксейра, Ксавье Пачеко Delphi 6 руководство разработчика. Может быть есть и в книге по Delphi 5 тех же авторов.

Хотя для сохранения свойств компонента в поток эта информация не нужна.


 
Ученик ©   (2003-06-17 23:04) [12]

uses
TypInfo;

function IsClass (Class1, Class2 : TClass) : Boolean;
begin
Result := True;
while Class1 <> nil do begin
if Class1 = Class2 then
Exit
else
Class1 := Class1.ClassParent
end;
Result := False
end;

procedure CopyProperty(Source, Dest : TObject; const PropName : string;
TypeKind : TTypeKind = tkUnknown);
begin
if IsPublishedProp(Dest, PropName) then begin
if TypeKind = tkUnknown then
TypeKind := PropType(Source, PropName);
case TypeKind of
tkInteger, tkChar, tkWChar, tkEnumeration, tkSet,
tkFloat, tkString, tkLString, tkWString, tkVariant,
tkInt64, tkDynArray : SetPropValue(Dest, PropName, GetPropValue(Source, PropName));
tkClass : if IsClass(GetObjectPropClass(Dest, PropName), GetObjectPropClass(Source, PropName)) then
SetObjectProp(Dest, PropName, GetObjectProp(Source, PropName));
tkMethod : SetMethodProp(Dest, PropName, GetMethodProp(Source, PropName));
end
end
end;

procedure CopyProperties(const Source, Dest : TObject; aMethods : Boolean = False);
var
PropList: PPropList;
i, iPropCount : Integer;
begin
iPropCount := GetPropList(Source, PropList);
if iPropCount > 0 then try
for i := 0 to iPropCount - 1 do
with PropList^[i]^ do
if (PropType^^.Kind <> tkMethod) or aMethods then
CopyProperty(Source, Dest, Name, PropType^^.Kind)
finally
FreeMem(PropList)
end
end;


 
bpv   (2003-06-18 09:30) [13]

Большое всем спасибо
буду пробовать



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
14-97797
ГОСТ
2003-06-10 01:42
2003.06.30
Будут ли отменены госты


3-97494
Kadastr
2003-06-04 10:33
2003.06.30
Как назначить клавишу Enter для DBCtrlGrid чтобы ShowModal?


1-97659
LMD
2003-06-17 10:44
2003.06.30
Можно ли фон Memo или RichEdit сделать прозрачным?


6-97760
BoTToN!k
2003-04-24 14:06
2003.06.30
отправить мыло


3-97544
Term
2003-06-06 16:23
2003.06.30
Кто работал с Halcyon????Компонент для доступа к БД без БДЕ.....