You can use the SETATREF, SETATREFEVAL, SETATREFEXPR functions to do weird things.
1. Formulas with these functions don't get overwritten.
2. SETATREFEXPR holds the actual input value from a UI element, such as Width, Height or Control handle. You can multiply by 0 to ignore it, which is cool.
3. SETATREF can push this value to another cell.
So, check this out: draw a rectangle with one control handle a few user cells.
The control handle will snap to the left or right side of the shape. There are no SETF or "trigger" cells.
Controls.Row_1.X = SETATREF( User.ui, SETATREFEXPR(Width*0.35) )*0+User.uiBoxed
The "Width*0.35" will change as the control handle is dragged. This is the "input from the user", so to speak.
The first half of the formula is multiplied by zero, so the user input is essentially ignored, and replaced by User.uiBoxed.
SETATREF pushes the value to User.ui, which then also changes while the handle is dragged:
User.ui = (Width*0.35)
User.uiBoxed then does the logic of snapping to the left or right side of the shape:
User.uiBoxed = IF(User.ui<Width*0.5,0,Width)
Note, after all this, User.ui will settle to Width*0 or Width*1, so there seems to be a bit of circularity, although Visio doesn't report any circular references when you set the formulae.
It is weird, but it works very nicely!