Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизВидимость св-ва для 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.046 c