Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.013 c
8-97751
CrowD
2003-03-19 12:10
2003.06.30
Проблема с выводом спрайтов?!


14-97863
MrMister
2003-06-12 23:07
2003.06.30
Где найти компонент для создания отчетов


14-97800
Levan Varshanidze
2003-06-11 17:01
2003.06.30
Подкиньте ссилку на описание и применение процедурных типов


1-97705
MakNik
2003-06-18 10:27
2003.06.30
SaveDialog


3-97475
Goga
2003-06-04 14:14
2003.06.30
Событие WillChangeField





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский