Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

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

 
novice_man ©   (2006-11-20 10:44) [0]

Как определить количество элементов в структуре типа TMyStructure = (msElement1, msElement2, ..., msElementN); запись типа SizeOf(TMyStructure) возвращает размер 1 байт.


 
StriderMan ©   (2006-11-20 10:51) [1]


> Как определить количество элементов в структуре типа TMyStructure
> = (msElement1, msElement2, ..., msElementN);

правильнее это называть перечислением.
а кол-во элементов можно определить так

Size := ord(high(TMyStructure))


 
novice_man ©   (2006-11-20 10:52) [2]

StriderMan ©   (20.11.06 10:51) [1]
Сапсибо.


 
Anatoly Podgoretsky ©   (2006-11-20 13:19) [3]

> StriderMan  (20.11.2006 10:51:01)  [1]

High(TMyStructure) - Low(TMyStructure) + 1


 
RASkov   (2006-11-20 14:07) [4]

> [3] Anatoly Podgoretsky ©   (20.11.06 13:19)

Low(TMyStructure) так это всегда 0 вернет. Перечисляемый тип, это вроде как поименованные константы типа Word.
Хотя по логике оно так и надо узнавать количество - от максимального отнимать минимальное значение.


 
KilkennyCat ©   (2006-11-20 14:09) [5]

> Low(TMyStructure) так это всегда 0 вернет

не всегда.


 
Джо ©   (2006-11-20 14:17) [6]

> [4] RASkov   (20.11.06 14:07)
> > [3] Anatoly Podgoretsky ©   (20.11.06 13:19)
>
> Low(TMyStructure) так это всегда 0 вернет

TMyStructure = (msElement1=2, msElement2=4)


 
Джо ©   (2006-11-20 14:20) [7]

Впрочем с таким перечислением как [6] и [3] работать не будет.


 
Anatoly Podgoretsky ©   (2006-11-20 14:29) [8]

> RASkov  (20.11.2006 14:07:04)  [4]

> Low(TMyStructure) так это всегда 0 вернет.

Не говори ерунды


 
Anatoly Podgoretsky ©   (2006-11-20 14:30) [9]

> Джо  (20.11.2006 14:20:07)  [7]

> Впрочем с таким перечислением как [6] и [3] работать не будет.
[3] будет


 
Джо ©   (2006-11-20 14:42) [10]

> [9] Anatoly Podgoretsky ©   (20.11.06 14:30)
> [3] будет

type
 TMyStructure = (msElement1=10, msElement2=100);
begin
 ShowMessage (IntToStr(
   Ord( Ord(High(TMyStructure)) - Ord(Low(TMyStructure)) + 1)
 )); // Выводит "91".
end;


 
StriderMan ©   (2006-11-20 14:49) [11]


> Anatoly Podgoretsky ©   (20.11.06 13:19) [3]
> High(TMyStructure) - Low(TMyStructure) + 1

тогда уж
ord(High(TMyStructure)) - ord(Low(TMyStructure)) + 1.
иначе компилятор заругаеццо.

В общем случае [3] это конечно правильнее, но от
TMyStructure = (msElement1=3, msElement2=11)не спасет.


 
Anatoly Podgoretsky ©   (2006-11-20 14:55) [12]

> Джо  (20.11.2006 14:42:10)  [10]

Все правильно, данное перечисление состоит из 91 члена, два явных и 89 анонимных.
Есть вопросы?

x := TMyStructure(11);


 
Anatoly Podgoretsky ©   (2006-11-20 14:56) [13]

> StriderMan  (20.11.2006 14:49:11)  [11]

Читаем отцов основателей, в справке все расписано.


 
Anatoly Podgoretsky ©   (2006-11-20 14:59) [14]

> Anatoly Podgoretsky  (20.11.2006 14:55:12)  [12]

for x := Low(TMyStructure) to High(TMyStructure) do ShowMessage(


 
StriderMan ©   (2006-11-20 14:59) [15]


> Anatoly Podgoretsky ©

как всегда на коне :)

я думаю такая экзотика как неявные члены перечислений автору не понадобится. так что ord(high(TMyStructure)) + 1 хватит за глаза.

ЗЫ: в [1] я забыл +1.


 
Джо ©   (2006-11-20 15:10) [16]

> [12] Anatoly Podgoretsky ©   (20.11.06 14:55)
> Есть вопросы?

Вопросов нет, Вы правы.



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

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
2-1164370211
koha
2006-11-24 15:10
2006.12.10
Как правильно удалить Строку в StringGrid?


15-1163875662
КаПиБаРа
2006-11-18 21:47
2006.12.10
Вот смотрю я телевизор и возникает у меня


2-1164282397
Jimmy
2006-11-23 14:46
2006.12.10
Ошибка при уничтожении формы.


15-1163872173
POP
2006-11-18 20:49
2006.12.10
Типы данных, cardinal


2-1164360980
KyRo
2006-11-24 12:36
2006.12.10
Как узнать создана ли нить