Now, this isn't for everyone, but I once had occasion to try a different approach. It was a pain in the toches but it worked.
I had an unbound text box labeled "Hints" and left it blank in the form. BUT every control, when you tabbed or clicked into it, fired off a "GotFocus" routine to fill in the Hints textbox with a sentence or two describing the purpose, function, units, etc. for the selected control. There is such a thing as the FORM getting focus without giving focus to one of the controls, so there was a Form_GotFocus "hint" too, telling the user the overall purpose of the form.
Now, it was tedious, but my users LOVED it. And it was so easy to do. I also played games with the label associated with the fields on GotFocus and LostFocus events, changing the label color from black to something like bright purple, changing the background color for text boxes, stuff like that. The LostFocus event for each control tested whether the control's .VALUE and .OLDVALUE were the same and changed the color scheme of the controls if they were not. Pale pink backcolor and solid red forecolor, if I recall correctly. That way the users knew what they had changed. That, of course, required a Form_OnCurrent event to reset all forecolors and backcolors, but that was a trivial process.
Anyway, since I had the GotFocus and LostFocus routines to manage control colors, it was a no-brainer to add lines to maintain the hints area. While it wasn't quite a cut-n-paste enterprise, it went pretty fast to implement it.