Please go here for
Flex 4 Spark Resizable Controls.
I previous posted a blog on a
Resizable Movable Panel control which was an extension of the
TitleWindow class which let the user drag the panel titlebar to move it around the screen, and drag a small resize handle in the bottom right corner to resize the panel.
I've made some updates to this class, and further extended it to support not just
Panel/
TitleWindow containers, but also
Box (
VBox/
HBox),
Canvas, and
TextArea (similar to what Google Chrome does).
The main class that does all the work is called
ResizeManager. It adds a small resize component in the bottom right corner of the container that when dragged resizes the container.
Here is an example (right click to view source). Let me know what you think!
Important: the resize containers do not resize properly if you set the
resizeEffect property.
For a similar project that is devoted to movable windows, check out the MDI project which is now part of the FlexLib project.
November 30th 2009 Update: I've updated the
MoveManager adding two new fields. Setting the
MoveManager.constrainToParentBounds to true will cause the component's movement to be restricted to the parent's bounds. You can also set your own custom bound's constraint by setting the
constrainToBounds property to a Rectangle. The way this works is by passing that bounding Rectangle into the move component's
startDrag(false, bounds) function.
December 23rd 2009 Update: I've updated the MoveManager and ResizeWindow classes to fix a problem that occurred when movable="true" and resizable="true" and no dragComponent was set. Now the move and resize should work properly.
January 5th 2010 Update:


I've updated the
MoveManagerand
ResizeManagerclasses to use custom cursors for moving and resizing. You can also set the
MoveManager.moveIcon and
ResizeManager.resizeIcon properties to use your own custom icons, or just edit those classes directly and change the
[Embed(source="...")] metadata tags.
The move cursor is only shown when the mouse is down. The resize cursor is shown when the mouse is over the resize handle and when the resize is happening. There might be some problems with the resize cursor getting stuck always on, but hopefully it's a good starting point.
March 4th 2010 Update: I've separated the move/drag and resize handles into separate stand-alone components:
DragHandle and
ResizeHandle. The colors of the handles can be customized using styles. You can also control how many rows and columns of dots are shown in the handles. Alternatively you can explicitly set a width and height for the drag/resize handles and the number of dots will be calculated automatically to fill the space. The size of the dots is configurable too.
I also added a new properties to the resize components -
bringToFrontOnResize, and
bringToFrontOnMove (ResizableWindow only). These properties determine whether the components should be brought to the front to be on top of the other siblings. By default these properties are false. It only makes sense to set these values to true if the parent container is using an absolute layout.
I've put up a blog post about the
DragHandle and ResizeHandle if you're interested.
September 15th 2010 Update: I added a new component -
ResizableButton. There were a few things that had to be changed to make it resizable and movable since it is not a Container. The main difference is that the Button class by default has the
mouseChildren property set to false, which prevents the move and resize handles from getting mouse events.