![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Видимость св-ва для GetTypeData
Riply © (2006-10-21 08:36:00)При таком объявлении типа 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 12:06:00) [1]Можно классом сделать.
Свойства - записи всё-таки не могут быть опубликованы - по крайней мере согласно справке.
Если это требуется для стандартной сериализации, то 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;
Riply (2006-10-21 11:18:00) [2]>будут другие проблемы
Мне главное, чтобы record был виден среди св-в объекта, а уж
обработчик я ему напишу персональный. Очень не хочется ради видимости
добавлять string :(
guav (2006-10-21 10:15:00) [3]Не думаю, что это - единственная проблема при попытке опубликовать свойство-запись, скорее всего, с опубликованной таким образом TSizeData со stringом будут другие проблемы.
"Published properties are restricted to certain data types. Ordinal, string, class, interface, variant, and method-pointer types can be published." © F1
Самому хотелось бы записи публиковать, много лишних свойств пришлось завести из-за невозможности этого.