# Generating Random RGB Colors

I have a function for generating RGB colors in VB6.0, and it is working properly. Please suggest improvements for this, if any.

Public Function RandomRGBColor() As Long
RandomRGBColor = RGB( _
Int(Rnd() * 256), _
Int(Rnd() * 256), _
Int(Rnd() * 256))
End Function

-

You need to change/add just one little thing. You need to call the Randomize () method before using the Rnd () method. You should only call it once, so it would be good, to call the Randomize() method inside of the constructor of your class like:

Private Sub Class_Initialize()
Randomize
End Sub


If you don't do this you will get for each iteration the same "random" number. Don't get me wrong, this doesn't mean that all numbers will be the same but assume you start your application. For example you will get the RGB numbers 11, 54, 142 for the first call of your method. If you restart your application you will again get these same numbers on the first call.

To prevent this, you need to 'seed' the Rnd () method to get random values each time.

-
While you are correct to call Randomize() it shouldn't be in this function but somewhere in the start-up of your project. It's a minor waste of resources and performance to call this every time. – chillworld Aug 5 '14 at 6:06
@chillworld, I stated You need to call the Randomize () method before using the Rnd () method. which can be misunderstood (like you did). It hadn't be meant to call it inside of the RandomRGBColor() method. I will edit my answer. – Heslacher Aug 5 '14 at 6:29
Sorry for the misunderstaning, great you edit the answer. You have then a upvote from me – chillworld Aug 5 '14 at 6:34

Your code is small, clean and readable and in my eyes it is well optimised code.

If you are in need of different upper and lower bounds for your random numbers I suggest you implement the following :

Private Function RandomInteger(Lowerbound As Integer, Upperbound As Integer) As Integer
RandomInteger = Int((Upperbound - Lowerbound + 1) * Rnd + Lowerbound)
End Function


It adds a little more code and slightly decreases performance, but you could use it in other parts of your project and it's more readable.

-