Главная страница
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.066 c
2-1161268969
LBP
2006-10-19 18:42
2006.11.05
DBGRID и удаленные записи


15-1161095946
Игорь ЖАКО
2006-10-17 18:39
2006.11.05
Ehlib 3.6 требует запуска IDE


2-1161406425
Insane SPIRIT
2006-10-21 08:53
2006.11.05
Перенос по словам в TStringGrid


3-1157971259
без ника
2006-09-11 14:40
2006.11.05
Периодические события. Структура хранения.


15-1161131078
SerJaNT
2006-10-18 04:24
2006.11.05
Сравнение 2х цветов