Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.047 c
15-1161167667
Juice
2006-10-18 14:34
2006.11.05
Quantum Grid, обычная таблица


2-1161336375
dest81
2006-10-20 13:26
2006.11.05
Fbird & sqlserver


2-1161674453
dera
2006-10-24 11:20
2006.11.05
Как убрать пароль на открытие любой БД в MS Access?


2-1161329954
yel
2006-10-20 11:39
2006.11.05
Отправить сообщение всем компьютерам в сети (TcpClient)


15-1160656122
Slava812
2006-10-12 16:28
2006.11.05
Вкладка безопасность





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский