Or, how about one that, after you've picked the first point, shows you the Text you'll get as you move the cursor around, until you pick the second point and lock it in?
(defun C:DeltaYText (/ elistbase p1 done txt)
(setq elistbase
(list '(0 . "TEXT") '(10 0.0 0.0 0.0) (cons 40 (getvar 'textsize)) '(72 . 1) '(73 . 2))
); setq
(setq p1 (getpoint "\nFirst point: "))
(prompt "\nSecond point: ")
(while (and (not done) (setq cur (grread T 12 0)))
(cond
((= (car cur) 5); moved cursor
(if txt (entdel txt))
(setq p2 (cadr cur)); cursor location
(redraw)
(grdraw p1 p2 40 1)
(setq txt
(entmakex
(append
elistbase
(list
(cons 11 (mapcar '/ (mapcar '+ p1 p2) '(2 2 2))); insertion
(cons 1 (rtos (abs (cadr (mapcar '- p1 p2))))); content
); list
); append
); entmakex
); setq
); 5 condition
((= (car cur) 3) (setq done T)); picked point - leave drawn Text, end (while) loop
); cond
); while
(prin1)
)
It puts the Text midway between the two points. It could follow up with letting you re-position it, as in my other suggestion. [Unfortunately, while it honors Object Snap for the first point, it doesn't for the second. I think there may be something around that can make that possible, but don't remember the topic.]
Another suggestion: Define a DIMENSION Style with both extension lines and both dimension lines suppressed, and simply use the DIMVERTICAL command. You'll be left with the text content as the Y difference between the definition points you give, with all the options about text position and rotation and style and so on that Dimension Styles offer.
EDIT: Adjusted to add rubber-banding between points:

Kent Cooper, AIA