Colour gradient menuitem

Hello,

I have a menu with 12 menuitem - “”, “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”

So when I select a menuitem from 1 to 10 I would like the appropriate shade for the Textfield

  [code]      Dim MyColor() As Color
  dim g as Graphics
  dim startcolor as color
  dim endcolor as color
  
  startcolor = &cFCBAB9
  endcolor = &cFF0000
  
  Dim xx As Integer
  For xx = 1 to 10
    MyColor(xx) = rgb( endcolor.red - (endcolor.red-startcolor.red) *xx/10, _
    endcolor.green - (endcolor.green-startcolor.green) *xx/10, _
    endcolor.blue - (endcolor.blue-startcolor.blue) *xx/10)
  next
  
  
  If hitItem.Text = "" then
    Me.BackColor = &cFFD5A5   'Amber
  elseIf hitItem.Text = "" then
    Me.BackColor = &c69CC49   'Green
  else
    Me.BackColor = MyColor(Val(hitItem.Text))
  end if
  
end if[/code]

I am getting “An exception of class OutOfBoundsException was not handled. The application must shut down.”

How can I fix that?

Thanks.

lennox

you are doing it wrong
you cannot say

MyColor(xx) = rgb( endcolor.red - (endcolor.red-startcolor.red) *xx/10, _

because mycolor(xx) does not exist!
the correct way is

MyColor.append rgb( endcolor.red - (endcolor.red-startcolor.red) *xx/10, _

but realize they will be numbered from ZERO to NINE, not ONE to TEN

either that or

DIM myCOLOR(10) as color

plus this is redundant

  If hitItem.Text = "" then
        Me.BackColor = &cFFD5A5   'Amber
      elseIf hitItem.Text = "" then
        Me.BackColor = &c69CC49   'Green

you are checking for “” TWICE and expecting different results

also may myCOLOR a global array, and populate it ONCE in a module, not every time you call this routine

Thanks Dave,
Great.
Lennox

Thanks Dave,

If hitItem.Text = “” then
Me.BackColor = &cFFD5A5 'Amber
elseIf hitItem.Text = “” then
Me.BackColor = &c69CC49 'Green
That was an oversight

This is the corrected code…

[code] Dim MyColor() As Color
dim g as Graphics
dim startcolor as color
dim endcolor as color

startcolor = &cFF0000
endcolor = &cFCBAB9

Dim xx As Integer
For xx = 1 to 10
  MyColor.append rgb( endcolor.red - (endcolor.red-startcolor.red) *xx/10, endcolor.green - (endcolor.green-startcolor.green) *xx/10, endcolor.blue - (endcolor.blue-startcolor.blue) *xx/10)
next

// Now display the menu
dim hitItem as MenuItem
hitItem = base.PopUp
if hitItem <> nil then
  Me.Text = hitItem.Text
  
  If hitItem.Text = "" then
    Me.BackColor = &cFFD5A5   'Amber
  elseIf hitItem.Text = "0" then
    Me.BackColor = &c69CC49   'Green
  else
    Me.BackColor = MyColor(Val(hitItem.Text) - 1)
  end if

[/code]

Lennox