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

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

Количество элементов ....


novice_man ©   (2006-11-20 10:44:00) 

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


Джо   (2006-11-20 15:10:00) [1]

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

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


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

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

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


StriderMan   (2006-11-20 14:59:00) [3]


> Anatoly Podgoretsky ©

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

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

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


Anatoly Podgoretsky   (2006-11-20 14:56:00) [4]

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

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


Anatoly Podgoretsky   (2006-11-20 14:55:00) [5]

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

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

x := TMyStructure(11);


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


> 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)не спасет.


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

> [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;


Anatoly Podgoretsky   (2006-11-20 14:30:00) [8]

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

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


Anatoly Podgoretsky   (2006-11-20 14:29:00) [9]

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

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

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


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

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


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

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

TMyStructure = (msElement1=2, msElement2=4)


KilkennyCat   (2006-11-20 14:09:00) [12]

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

не всегда.


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

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

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


Anatoly Podgoretsky   (2006-11-20 13:19:00) [14]

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

High(TMyStructure) - Low(TMyStructure) + 1


novice_man   (2006-11-20 10:52:00) [15]

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


StriderMan   (2006-11-20 10:51:00) [16]


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

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

Size := ord(high(TMyStructure))


Наверх

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