![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Количество элементов ....
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))