vložil Radek Červinka
19. dubna 2012 18:40
Je třeba to zveřejnit jako odstrašující případ (kód je trochu upraven)
const
ciTabBarInterval = 0;
ciTabBarDay = 1;
ciTabBarWeek = 2;
var
bIsInterval: Boolean;
…
bIsInterval:= not TabBar.SelectedTab.Index in [ciTabBarDay, ciTabBarWeek];
Problém byl, když byl TabBar.SelectedTab.Index = 0. Takto samostatně je to evidentní že?
Problém je samozřejmě s prioritou. Operátor not má větší prioritu než in. Index je typu Integer, takže se provede not Index (pro hodnotu 0 je binární not ve výsledku samé binární 1, tj. -1). Pro začátečníky připomínám, že nejvyšší bit u typu integer určuje znaménko - proto ta -1.
No a -1 samozřejmě v tom intervalu není.
Pro správné řešení stačí samozřejmě jen doplnit závorky:
bIsInterval:= not (TabBar.SelectedTab.Index in [ciTabBarDay, ciTabBarWeek]);