Главная страница
    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.045 c
15-1161072064
cyborg
2006-10-17 12:01
2006.11.05
Чего-то Яндекс совсем испортился


2-1161454335
Батя
2006-10-21 22:12
2006.11.05
как подсчитать весь трафик моей проги


15-1161243592
Плохиш
2006-10-19 11:39
2006.11.05
Растаможить новую машину в Украине стоит больше 6000 Евро?


2-1161342004
Alex_C
2006-10-20 15:00
2006.11.05
Как отключить реакцию на двойной клик мышью?


15-1160507911
Kerk
2006-10-10 23:18
2006.11.05
Имперский марш из Star Wars в mp3





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский