Unfortunately, colored buttons have to be drawn using bitmap images in DCX. You can either specify a button bitmap or just use an image control. The windows API allows you to change the background color of a button object, but DCX does not support the property of BackColor yet, as far as i know.
Looking at the documentation, I have never messed with hgradient or vgradient. I do not know how to use them.
On the note of reducing code, if using v6.35 or higher, you can use:
$regsubex($str(.,4),/./g,$r(a,z) $+ $r(A,Z))
rather than
$rand(a,z) $+ $rand(A,Z) $+ $rand(a,z) $+ $rand(A,Z) $+ $rand(a,z) $+ $rand(A,Z) $+ $rand(a,z) $+ $rand(A,Z)
to trim a bit