ну, ZuBy у нас признанный эксперт по таким делам, возможно, лучше поступить как он советует
а у скролла - все просто:
у нас есть компоненты (проще всего TLayout, и все нужное в него покидать) с шириной и высотой, у нас есть размер окна
высчитываем сколько влазит компонентов в рядок и в цикле каждому Layout просто присваиваем Parent:=ScrollBox1, Position.X и Position.Y рассчитываем исходя их номера ряда и номера в ряду
scroll вроде сам соображает, в какую сторону он может двигаться...