Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Видимость св-ва для 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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо