Colour in GUI apps is a complex subject. There is no one-answer-fits-all reply to your questions, since details often depend on your OS and hardware.
OS widgets are drawn by the OS, and their colour may or may not be easily programmable. For instance, on Windows whatever you value you give Button1.Color it will keep its Windows theme colour.
For opaque controls that provide a canvas and a virtual Paint method (or an OnPaint event) you can paint custom backgrounds with the Canvas.Brush using FillRect() or copying a bitmap or other image to the Canvas.
Some OSs forbid painting outside the Paint procedure, so for cross-platform reasons you should avoid painting elsewhere, even if (as Windows allows) it is possible.
Setting the colour property of a control is the simplest place to start, and resort to custom painting only if the provided properties do not achieve the effect you want. TPanel is not an OS widget, so gives you more flexibility in altering its appearance in a cross-platform way.
Custom-drawn controls (such as the BGRAControls) can provide striking effects, even if they lack the look-and-feel of a 'standard' GUI interface.