Вниз
Скачать: CL | DM;

Что вызывается первее - DefineProperties или published ?   Найти похожие ветки 

← →
GuAV ©   (2005-10-07 23:33) [0]



← →
Anatoly Podgoretsky ©   (2005-10-07 23:51) [1]

Непонял


← →
jack128 ©   (2005-10-08 00:06) [2]

procedure TWriter.WriteProperties(Instance: TPersistent);
var
 I, Count: Integer;
 PropInfo: PPropInfo;
 PropList: PPropList;
begin
 Count := GetTypeData(Instance.ClassInfo)^.PropCount;
 if Count > 0 then
 begin
   GetMem(PropList, Count * SizeOf(Pointer));
   try
     GetPropInfos(Instance.ClassInfo, PropList);
     for I := 0 to Count - 1 do
     begin
       PropInfo := PropList^[I];
       if PropInfo = nil then
         Break;
       if IsStoredProp(Instance, PropInfo) then
         WriteProperty(Instance, PropInfo);
     end;
   finally
     FreeMem(PropList, Count * SizeOf(Pointer));
   end;
 end;
 Instance.DefineProperties(Self);
end;


← →
GuAV ©   (2005-10-08 00:09) [3]

При чтении из потока и записи в поток наследника TPeristent автоматически читаются/записываются все published свойства; также вызывается DefineProperties для записи/чтения свойств "вручную".
Известен ли порядок этих двух действий при чтении, и если да, то в каком порядке они происходят ?


← →
GuAV ©   (2005-10-08 00:12) [4]

jack128 ©   (08.10.05 0:06) [2]

Понял. Спасибо.

Чего-то вылетело из головы, что можно посмотреть исходники :-(


← →
GuAV ©   (2005-10-08 00:34) [5]

Всё, разобрался/вспомнил. Прочитано будет в том же порядке что и записано, записано, как видно из [2], сначала в порядке следования в typeinfo published-свойства (в порядке от предка к наследнику), затем свойсва из defineproperties. И лучше не полагаться на этот порядок.


← →
jack128 ©   (2005-10-08 01:46) [6]

GuAV ©   (08.10.05 0:34) [5]
И лучше не полагаться на этот порядок.

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



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

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.976 c
14-1128870277
LordOfRock
2005-10-09 19:04
2005.10.30
Kaspersky AVP Personal


14-1129034852
NewWonder
2005-10-11 16:47
2005.10.30
Проблема с принтером HP 1000


14-1128777312
SSSQQQ
2005-10-08 17:15
2005.10.30
Как в Delphi можно работать одновременно с двумя проектами


5-1107877683
Elast
2005-02-08 18:48
2005.10.30
Уничтожение ListBox


8-1112943093
vidiv
2005-04-08 10:51
2005.10.30
Драйвер виртуальной звуковой карты




   Наверх