One thing is confusing with the component: If I press the left mouse button down and move the mouse by a few pixels (as it can easily happen) then the ColorPick event does not fire. This is because in "MouseUp" there is a check against the original mouse-down position. This seems to be necessary because the picked color is calculated in "MouseDown", and it would be confusing if the user moves the mouse into a neighboring square and does not get the color underneath the mouse at mouse-up.
To me personally, this behavior is a bit confusing. The component would feel more practical if the ColorPick would occur at "MouseDown"; in MouseMove, there could be code to track the PickedColor.
To keep the old behavior I could add a new enumerated property, something like "PickEvent": TPickEvent = (peMouseDown, peMouseMove, peMouseUp). The current behavior corresponds to peMouseDown which should be the default to avoid breaking existing projects. peMousedown would allow dragging the mouse across the palette - the color box in your demo would immediately respond while dragging. peMouseUp picks the color from the position where the mouse button is released.
Polpero, since you seem to be the only person working with the TColorPalette, what is your opinion?