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

Вниз

Видимость св-ва для GetTypeData   Найти похожие ветки 

 
Riply ©   (2006-10-21 08:36) [0]

При таком объявлении типа GetTypeData его не находит ( TypeData^.PropCount = 0 )
type
PSizeData = ^TSizeData;
TSizeData = packed record
 pData: Pointer;
 cbSize: DWord;
end;

type
TSizeDataCl = class(TPersistent)
 private
  FData: TSizeData;
 public
 published
  property Data: TSizeData read FData write FData;
end;

procedure Ob_ListProp(Obj: TObject; List: TStrings);
var
PropNum: DWord;
TypeInf: PTypeInfo;
TypeData: PTypeData;
begin
TypeInf:=Obj.ClassInfo;
if TypeInf = nil then Exit;
TypeData:=GetTypeData(TypeInf);
ShowMessage(IntToStr(TypeData^.PropCount));
end;

Если же его изменить на такой, то все в порядке
type
PSizeData = ^TSizeData;
TSizeData = packed record
 pData: string;
 cbSize: DWord;
end;

Как бы сделать так, чтобы он перечислялся и с pData: Pointer ?


 
guav ©   (2006-10-21 10:15) [1]

Не думаю, что это - единственная проблема при попытке опубликовать свойство-запись, скорее всего, с опубликованной таким образом TSizeData со stringом будут другие проблемы.

"Published properties are restricted to certain data types. Ordinal, string, class, interface, variant, and method-pointer types can be published." © F1

Самому хотелось бы записи публиковать, много лишних свойств пришлось завести из-за невозможности этого.


 
Riply ©   (2006-10-21 11:18) [2]

>будут другие проблемы
Мне главное, чтобы record был виден среди св-в объекта, а уж
обработчик я ему напишу персональный. Очень не хочется ради видимости
добавлять string :(


 
guav ©   (2006-10-21 12:06) [3]

Можно классом сделать.
Свойства - записи всё-таки не могут быть опубликованы - по крайней мере согласно справке.
Если это требуется для стандартной сериализации, то DefineProperties может заменить публикацию.

Если таки найдёшь способ, напиши, я тоже хотел бы избавится от сотни строк мусора вида

   property GeoX: Double read GetGeoX write SetGeoX;
...
function TMapPoint.GetGeoX: Double;
begin
 Result := Geo.X;
end;
...
procedure TMapPoint.SetGeoX(const Value: Double);
begin
 Geo := MakeCoord(Value, Geo.Y);
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.045 c
2-1161196336
Sco
2006-10-18 22:32
2006.11.05
Удаление панели из события одного из её дочерних компонентов


15-1160931021
atruhin
2006-10-15 20:50
2006.11.05
Компонент меняющий свойство Font у всех компонентов на форме


2-1161443898
rds_home
2006-10-21 19:18
2006.11.05
Объем памяти занимаемый приложением


2-1161156631
Kray
2006-10-18 11:30
2006.11.05
onShow не работает


2-1161450020
90210
2006-10-21 21:00
2006.11.05
inline