Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

Количество элементов Set свойства   Найти похожие ветки 

 
ancot   (2005-05-20 21:12) [0]

Добрый вечер мастера.Подскажите как узнать количество элементов в свойстве типа множество(например Anchors). С помощью TypInfo удалось получить только строковое представление значения свойства и Integer значение, т.е. биты есть, а сколько битов задействовано неизвестно. (Неоходимо для создания инспектора объектов)


 
begin...end ©   (2005-05-20 21:22) [1]

var
 S: TAnchors;
 Num: Integer;
 I: TAnchorKind;
begin
 Num := 0;
 for I := Low(I) to High(I) do
   if I in S then
     Inc(Num)
end.


 
ancot   (2005-05-20 21:38) [2]

Это понятно.Но тип свойства заранее не известен, известно только что это множество.


 
begin...end ©   (2005-05-20 21:43) [3]

> ancot   (20.05.05 21:38) [2]

А размер этого множества в байтах известен?


 
ancot   (2005-05-20 21:48) [4]

В байтах известен. Тот-же Anchors имеет четыре элемента [akLeft,akTop,akRight,akBottom] а размер в байтах = 1 т.е. 8 элементов...


 
begin...end ©   (2005-05-20 21:56) [5]

> ancot   (20.05.05 21:48) [4]

var
 I, Num: Integer;
 S: множество;
begin
 Num := 0;
 for I := 0 to 8 * SizeOf(S) - 1 do
   if PByte(Longword(@S) + I div 8)^ and (1 shl (I mod 8)) <> 0 then
     Inc(Num)
end.


 
Anatoly Podgoretsky ©   (2005-05-20 22:12) [6]

ancot   (20.05.05 21:38) [2]
Это как?


 
ancot   (2005-05-20 22:25) [7]


> Anatoly Podgoretsky ©   (20.05.05 22:12) [6]


после нажатия "+" в инспекторе объектов необходимо развернуть свойство типа множество и отобразить его(свойства) элементы.
Например тот же Anchors акLeft   = True
                       akTop    = False
                       akRight  = False
                       akBottom = True.
Получить значения элементов не представляет труда: (GetOrdProp(Obj, APropInfo)) получаем число в котором включеные биты указывают на элементы со значением True. Но как узнать количество этих элементов ?. Не отображать же в инспекторе все доступные для Set свойств 32 бита.


 
ancot   (2005-05-20 23:55) [8]

Неужели нет вариантов ?...


 
Anatoly Podgoretsky ©   (2005-05-21 01:09) [9]

Тут 4 элемента и это заранее известно.


 
jack128 ©   (2005-05-21 01:29) [10]

begin...end ©   (20.05.05 21:56) [5]
Ты даешь гарантию, что в незадействованых битах не будет мусора?? Но помоему ты не тот вопрос отвечаешь.
Мне показалось, что нужно определить количество элементов базовом типе множества. Тогда примерно так:

type
 tEnum = (em1, em2, em3);
 TSet = set of tEnum;

procedure TForm1.Button1Click(Sender: TObject);
var
 ti: PTypeInfo;
begin
 ti := TypeInfo(tSet);
 ti := GetTypeData(ti).CompType^;
 with GetTypeData(ti)^ do
   Caption := IntToStr(MaxValue - MinValue + 1);
end;


 
jack128 ©   (2005-05-21 01:30) [11]

jack128 ©   (21.05.05 1:29) [10]
количество элементов B базовом типе множества


 
begin...end ©   (2005-05-21 08:34) [12]

> jack128 ©   (21.05.05 1:29) [10]

> Ты даешь гарантию, что в незадействованых битах не
> будет мусора??

Гарантий я, конечно, дать не могу, но в D7 мне не удалось воспроизвести ситуацию с наличием мусора.

> Но помоему ты не тот вопрос отвечаешь.

Не знаю. Я подумал именно про количество включённых элементов.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
9-1110432604
Xeno
2005-03-10 08:30
2005.06.06
Редактирование MD2 модели средствами GLScene


1-1116485300
Polenov
2005-05-19 10:48
2005.06.06
Выделить строчку айтема в листбоксе


14-1116348987
___Nikolay
2005-05-17 20:56
2005.06.06
Для тех, кто разрабатывает сайты


4-1113465065
axx
2005-04-14 11:51
2005.06.06
Помогите с hook ом клавиатуры.


4-1113558922
Serr
2005-04-15 13:55
2005.06.06
связь





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