Looking again with fresh eyes this morning I decided that the offset was because this line:
display.setCursor(16,16 +cnt*fontSize);// sets the height of the submenu text
was in the first for loop
So I moved it to the second for loop where the __FlashString helper is, like this:
for(int i = 0; i < 4; i++){
display.setCursor(16,16 +cnt*fontSize);// sets the height of the submenu text
display.println((__FlashStringHelper*)menu_table[i]);
}
This helps the layout and the screen options now scroll with the encoder position, with each click removing one line from the top, moving the menu up.
The problem is that the 4 options appear to be printed over each other, so you can't read the text. So I have 4 options, but each option is over printed by the other three options.
Hope that helps
Thanks