Delphi Gallery Component – Lightweight Animated Coverflow / Masonry Viewer (Beta) v0.995
Skia alpha Version here: https://github.com/LaMitaOne/skia-flowmotion
If you want to tip me a coffee.. :)
https://www.youtube.com/watch?v=38Dcwo1VNqQ
A fast, lightweight, Coverflow-style gallery component for Delphi — fully animated without any 3D engine or dlls needed.
Pure Delphi 7 compatible code, no special components.
Low CPU usage, easy to integrate, and smooth visual effects even with large image sets.
-
Pinterest-like masonry layout
-
freefloat Layout with save/load positions
-
Animated appearance (slide-in, “falling” effects, breathing)
-
Select / move or zoom it into a target rect
-
HotTrack & HotZoom hover effects
-
Dragging selected or all free floating
-
Threaded Animation
-
Paging with falling animation
-
ActivationZone -> move selected to defined areas and trigger event
-
Smooth transitions, similar in spirit to TMS GUIMotions but much lighter
-
Works on Delphi 7 and Delphi 11.3 here, so probably on any Delphi
Compiled exe included, play some with it :) you will like it
On my Asus Zenbook ux305ca (dual-core toy):
- Flowmotion: Fullscreen, 80 pics → 25 % CPU usage(on big pc around 3-5%), even at > 1000 pics still perfectly smooth :)
(since threading of animation its smooth like its running in some 3d engine)
That was around 830 pictures...2560x1440 screen resolution...no problem... 7% cpu usage(ryzen 7 5800x)...
Not bad for "old delphi" and only canvas and a thread :D
Now around 1500 still ok since caching of sized imgs...
At first I just wanted a little picture gallery… but it grew a bit :D
So I thought maybe some of you will like it too :)
Some things are not perfect yet, some not fully implemented,
but it’s already basically stable and looks really nice!
v 0.995
- NEW: Implemented a cache mechanism (FBitmapSnapshot) for TImageItem.
Images are now resized to their grid target size during page load (ShowPage)
and stored. The Paint method uses these cached thumbnails for static items,
significantly reducing CPU load and memory bandwidth when rendering large grids. - Only original bitmaps are used during HotTrack/Zoom animations to maintain quality.
v 0.994
- some small bugfixes i found while porting it to skia4delphi
- added property ShowSmallPicOnlyOnHover
v 0.993
- NEW: Added SmallPic / Image Overlay support.
- NEW: Added 'SmallPicImageList' property (TImageList) for efficient icon management.
- NEW: Added 'SmallPicIndex' to TImageItem to assign icons from the ImageList.
- NEW: Added 'SmallPicPosition' (TopLeft, TopRight, BottomLeft, BottomRight) to TImageItem.
- NEW: Added 'SmallPicVisible' global property to toggle overlays on/off.
- FIX: Added master list 'FAllSmallPicIndices' to persist icon assignments during Paging.
- IMPROVED: All loading methods (AddImage, AddImages, Async, etc.) now accept SmallPicIndex parameters.
- NEW: Added 'AllImageItems' property for global access to items (Caption, Hint, SmallPicIndex).
Syntax: Flowmotion1.AllImageItems[5].Caption := '...';
Works across all pages (updates master lists and visible screen instantly).
v 0.992
- new Paging property AutoScrollPageForNewAdded
- Paging now everywhere implemented
- added new events: TImageLoadFailedEvent, FOnImageMouseLeave, FOnImageMouseEnter
v 0.991
- more improvements for Paging, basically working now when u load list of pics with Addimages
v 0.990
- Added hints for each Imageitem (in AddImage, Addimages...)
v 0.989
- improved caption rendering
- some small bugfixes
v 0.988
- LoadPositionsFromFile bug fixed(wasnt working after new exe start)
- MoveImage bug fixed when there was duplicate picpaths
- New Captions with semi-transparent background
CaptionOnHoverOnly, ShowCaptions, CaptionFont, CaptionColor, CaptionBackground,
CaptionAlpha, CaptionOffsetY propertys - OnCaptionClick event added
v 0.987
- New flFreeFloat Layout added, no zoomselected to center and all pictures free draggable (like a nonstatic grid)
- New SavePositionsToFile() / LoadPositionsFromFile() for persisting free float layouts
- AddImagesWithPositions() allows precise image placement with saved coordinates
- Automatic position validation ensures layouts work across different screen resolutions
- Sample project demonstrates save/load functionality
- added new KeepfreeAreaRect (not working fully now)
v 0.986
- Added new ActivationZones for the selected image if
SelectedMovableis True - New
AddActivationZone(const AName: string; const ARect: TRect)andClearActivationZonesmethods
allow defining named rectangular areas on the component. - A new
OnSelectedImageEnterZoneevent is fired when the dragged selected image
enters one of these zones. The event provides the image item and the name of the zone. - Added those functions to Sample project
v 0.985
- Improved Z-ordering for animated and static images.
The paint routine now sorts items by a combination of their hot-zoom factor
and actual on-screen area. This ensures that actively zooming images are
always drawn on top, preventing visual glitches during layout changes. - Introduced CPU thread affinity for better performance on multi-core systems.
- Added basic dragging functionality for the selected image.
WhenSelectedMovableis True, the centered selected image can be
dragged around to reveal images underneath. - Moveimage now working
- added more functions into Sample project
v 0.984
- higher hotzoomed get painted above lower hotzoomed
(think that way almost perfect z-order... for now) - fixed z-order of new animated incoming single images from Addimage
- fixed z-order of prev selected animating back from selectnext or prev pic function
- fixed that last flicker sometimes of just hotzoomed down, in line,
that moment before it gets static pic again. Now all...perfect smooth,
no flicker, looks really awesome) - pause animationthread each cycle 16ms to workdown messages, no problems with animations like smarteffects that way
- new HotTrackWidth property
- new incoming pics now start tiny sized -> START_SCALE
- AddImagesAsync & AddImageAsync now working
v 0.983
- Animations now Threaded, massive performance gain like 20 times faster and smoother
v 0.982
- Paint routine optimized
- fixed some wrong Z-orders of prevsel or prevhot back zooming pictures getting painted below static pics
v 0.981
- combined HottrackTimer into TimerAnimation (looks way better, and a LOT faster)
- optimized TimerAnimation for less useless paints when nothing changed
v 0.98
- New
TImageEntryStyle→ flexible entry/fly-in styles for new images:
iesFromTop,iesFromLeft,iesFromRight, etc. and new:
iesFromCenter– pop-in from image center
iesFromPoint– move to any target rect
→ different styles for normal/falling images and selected images possible - Clear & remove now also support
TImageEntryStyleandFallingTargetPos - Sample project updated to demonstrate these effects
- Hotzoomed now ...always ^^ animate back to min...mostly :D
- prev selected if hot sometimes dissapears while move to old pos - fixed
- simplified animated clear cycle
- some bugfixes
v 0.97
- HotZoom now zooms in faster, zooms out slower
- Selected image has a subtle “breathing” effect on mouse-over
ZoomSelectedtoCenteris now optional (more grid-style possible)- Images zoom down slightly on mouse-down
- Various bugfixes
