m
Move page script moved page API Frame StartMoving to WoW:API Frame StartMoving without leaving a redirect
(Updated with new information (behavior of StartMoving(),StopMovingOrSizing() on frames with a non-UIParent anchor frame)) |
m (Move page script moved page API Frame StartMoving to WoW:API Frame StartMoving without leaving a redirect) |
||
| (3 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
{{widgetmethod}} | {{widgetmethod}} | ||
Moves the frame-based object in relation to where the mouse is being moved. | Moves the frame-based object in relation to where the mouse is being moved. | ||
frame:StartMoving() | |||
== Details == | |||
* Use this with the {{api|Frame:RegisterForDrag|t=w}}() function and the <OnDragStart>...</OnDragStart> event to allow your frame-based object to be moved by the user. | |||
* Use the {{api|Frame:StopMovingOrSizing|t=w}}() function inside the <OnDragStop>...</OnDragStop> XML section to stop the moving process. | |||
* Moving a frame using this function sets the user placed flag for the frame, making the client save its position and reposition the frame on reload. To avoid this behavior, you can call frame:[[API Frame SetUserPlaced|SetUserPlaced]](false) immediately after StopMovingOrSizing(). | |||
*Use this with the | |||
*Use the | |||
*For pixel-precise movements, you should instead use [[API EnableMouse|EnableMouse()]] and the <OnMouseDown>...</OnMouseDown> and <OnMouseUp>...</OnMouseUp> events (and probably also the <OnHide>...</OnHide> event). | *For pixel-precise movements, you should instead use [[API EnableMouse|EnableMouse()]] and the <OnMouseDown>...</OnMouseDown> and <OnMouseUp>...</OnMouseUp> events (and probably also the <OnHide>...</OnHide> event). | ||
*If the frame becomes stuck by any cause (see [[API SetClampedToScreen|SetClampedToScreen()]]), the mouse and the frame will go out-of-sync. | *If the frame becomes stuck by any cause (see [[API SetClampedToScreen|SetClampedToScreen()]]), the mouse and the frame will go out-of-sync. | ||
*If you use the StartDrag/StopDrag events to initiate the dragging, be sure not to :Hide() the dragged frames during the process. A hidden frame will NOT receive its StopDrag event. | |||
*This function together with [[API StopMovingOrSizing|StopMovingOrSizing()]] exhibit some "special" behavior that can cause problems when used with frames that are not anchored to UIParent (or some other full-screen frame). | *This function together with [[API StopMovingOrSizing|StopMovingOrSizing()]] exhibit some "special" behavior that can cause problems when used with frames that are not anchored to UIParent (or some other full-screen frame). | ||
**Immediately upon calling StartMoving(), the frame will be de-anchored from any other frame it was previously anchored to, and instead anchored to the screen. For example, if MyFrame's TOPLEFT is anchored to MyParent's TOPLEFT at (5,-5), and MyParent's TOPLEFT is anchored to UIParent's TOPLEFT at (100,-100), then MyFrame:StartMoving() immediately re-anchors MyFrame's TOPLEFT to the screen's (nil anchor) TOPLEFT at (105,-105). The original anchor frame (MyParent) and offset will not be restored by [[API StopMovingOrSizing|StopMovingOrSizing()]]. | **Immediately upon calling StartMoving(), the frame will be de-anchored from any other frame it was previously anchored to, and instead anchored to the screen. For example, if MyFrame's TOPLEFT is anchored to MyParent's TOPLEFT at (5,-5), and MyParent's TOPLEFT is anchored to UIParent's TOPLEFT at (100,-100), then MyFrame:StartMoving() immediately re-anchors MyFrame's TOPLEFT to the screen's (nil anchor) TOPLEFT at (105,-105). The original anchor frame (MyParent) and offset will not be restored by [[API StopMovingOrSizing|StopMovingOrSizing()]]. | ||