Here is a demo (encrypted) of a scrollable canvas control
It includes ability to scroll over large images
the ability to zoom in or out
the ability to auto fit the image to the viewport space
picture data is stored independent of the source, allowing it to be drawn on etc
all exposed MouseEvents use actual coordinates regardless of zoom level, so external code doesn’t have to normalize things
This demo is 100% functional.
It has a watermark indicating when the demo will expire, which should give anyone plenty of time to decide if it is worthwhile for them
Of course, any suggestions, comments or fixes required are welcome
MouseWheel scrolling is an external event.
I left it that way, because some wish to scroll using the Wheel, others might what to control the Zoom.
For example… MY mouse only has a vertical wheel… while others like the Magic Mouse have a “track wheel”
But that being said… I’m not sure I allowed a way to set the scroll positon externally
Give me a few hours and I’ll address that and post a new version… It won’t be hard to implement
Ok… Control has been updated, and a new demo version posted
This has the GDI fix the Eugene suggested for Windows
And added support for MouseWheel.
Contrary to what I said above, the MouseWheel events are now INTERNAL (but the developer can override)
Added the following properties
wheelMode : can be wheelIGNORE, wheelSCROLL or wheelZOOM, developer still gets the MouseWheel event back, wheelIgnore skips all internal processing and its up to the developer to do ANY manipulations based on the wheel
ScrollX - set/get the current horizontal scroll value… input is clamped to the current scrollbar min/max values
ScrollY - set/get the current vertical scroll value … same clamping rules
fixed a minor bug that didn’t immediatiely refresh the display when you loaded a new image
As an anti-celebration of April Fools day… Any one that wants a copy of the source code can get it from me for a 50% discount until 6am (Pacific Time) on Monday April 4th. That is Friday, Sat, Sun.
Just post a donation of $37.50 (or more ) at www.rdS.com/donate.html and I will email you a copy of the demo code with the encryption removed.
With all respect but isn’t scrolling/zooming an image on a canvas pretty much a one-line DrawPicture function? Can you explain a bit why your control is easier or better than g.DrawPicture?
I think I’m missing something.
It IS a drawpicture function… but the issue is… integrating the scrollbars, keeping track of where everything is, managing all the events so that the right information gets to the at the right time, in the right format. This control consists of 6 custom methods (5 of which are private to the control), 8 event handlers, and 10 Computed Properties each which contain code in their Setters.
This control is NOT just a “canvas” object. It is a container control with a canvas, 2 scrollbars, and a few hundred lines of code.
So yes, can you scroll and zoom an image using nothing more than DrawPicture, depends on your point of view… No matter what, something has to figure out what those eight parameters to drawpicture need to be. Something needs to manage the scrollbars. Something needs to be an interface between the real and normalized coordinate systems (which are the same when zoom factor is 1.0, but change radically as the zoom factor changes)
If this control as I offer it has no interest to you, I’m fine with that…
[quote=257003:@Marco Hof]I think it was a valid and respectful question. I just don’t understand and thought I was missing the point.
But I apologize if I offended you.[/quote]
I am sorry if you felt the tone or content of my response was inappropriate, I was just attempting to explain what it was/did
Yes, there is piDog, and it actually does a few things more, and is much more expensive…
Thank you to those who have made a donation, and/or pointed out improvements (all of which so far have been implemented)
If anyone was still interested in the class, there is another evaluation copy available that expires 31-Dec-2015
I have been asked if this works on Web projects, and the answer is , I don’t know as I have never set up the resources to play with Xojo Webapps…
[quote=279018:@Paul Sondervan]What is the use of working with a class that’s already expired?
I assume you meant 31-Dec-2016.[/quote]
not sure what you are saying… the expire is 31-Dec-2016…