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