Скорее всего, всё дело в randomize().
Дело в том, что randomize, скорее всего, реализована примерно так, как у меня в BDS 2006:
Код:
inline void _RTLENTRY randomize(void)
{
srand((unsigned) time(NULL));
}
Т.е. последовательность "случайных" значений, возвращаемых функцией random(), будет полностью определяться тем, что вернёт функция time() в момент вызова randomize(), а time() возвращает разные значения не чаще, чем раз в секунду

Соответственно, Ваши графики исправно рисуются 100 или там 1000 раз в секунду (зависит от того, насколько шустра видеокарта), но в течение секунды выводят одно и то же. Если убрать из конструктора
Код:
Form1->DoubleBuffered = true;
, то это должно стать хорошо заметно.
Мораль: нет никакой необходимости вызывать функцию randomize() чаще, чем один раз за всё время работы приложения (т.е. в самом начале программы).
Уберите randomize() из рисующей функции и поставьте её в конструктор формы (например). Всё должно заработать на ура.