Question

dragging a container object at run time

Asked by: IainMacb

I've got a container object on one of my forms that I'd like to be able to drag at run time.

But I can't see how you do this.

I've read the FoxPro help topics, which aren't very clear on this. They're mostly talking about dragging data from one control to another, but that's not what I want to do.

I've tried searching EE, but can't get anything in the way of useful hits.

I've tried resetting the DragMode and OLEDragMode propertoes but without success.

Any suggestions about how I shoudl proceed - or for further reading that might help be understand how to do this?

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-08-05 at 22:08:59ID24630375
Tags

visual foxpro

,

drag

Topic

FoxPro Database

Participating Experts
4
Points
300
Comments
12

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Drag and Drop in Foxpro 2.6
    What I can use the drag and drop technical in Foxpro 2.6 ?
  2. Need some help...mostly for fun - Making a DLL
    OK, I have tried in vain and I keep getting a bunch of stupid errors and I'm not sure where to go. Mostly for fun (although if it works - I may use it in my work), I am trying to create a DLL in FoxPro and then call it from Excel. Because I have wasted so much time on tryin...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: tusharkanvindePosted on 2009-08-05 at 22:20:50ID: 25030284

You can make the drag mode automatic. That will allow the user to move the container around. This also fires the OLEStartDrag of the container.

When the user drops the container, the object on which it is dropped fires its dragdrop event. so you have to code in that object and not in the object that is being dragged.

 

by: IainMacbPosted on 2009-08-05 at 22:37:25ID: 25030330

Thanks for that (and for being so quick!)

I've set the DragMode property to be automatic - and I can now drag the container.

But ... I'm merely moving it around within the FORM, not to another object. When I release it, it goes back to its original position.

What's the difference between DragMode and OLEDragMode? The help topics give me the impression that I need to use OLEDragMode if I want to drag data to another application, but that it makes no difference if, as here, I'm just working within FoxPro. If I set OLEDragMode to 'automatic' and try dragging, then it doesn't work. The cursor changes to a circle with a diagonal bar, which I take to mean "don't even try it".

 

by: Olaf_DoschkePosted on 2009-08-05 at 22:55:56ID: 25030420

setting these modes is insufficient. As tushar already ooutlined you need code in the (ole)dragdrop method of the target. In your case, if you want to object to change it's position, that code must change top and left position of the container.

Remember that OLE drag& drop is not only meant for moving objects, it mostly is used only to move data, or files, and have a visual feedback when doing so.

Take a look at the samples (Task Pane, 4th button) and search for "drag", there you'll get two samples about VFP drag&drop and ole drag&drop. It doesn't matter much, what you take in VFP.

But reagarding the target, that is not just "the form": If you have many containers on your form, then all these containers would need a dragdrop code to handle the dragged container, the form's dragdrop method will only run, when you drop the moving container to an area where there is no other container on the form. If you have pageframes, then the pages need that code. That's what makes it a little complicated, even if you just want one or some containers movable you need code in all objects the moved object could be moved to.

You can of course simplyfy this a bit, and simply disallow objects as drop target, where you don't want the moved container, you could also call the form's dragdrop method from other containers dragdrop method to make the form handle the drop instead of each container/page of a pageframe or other control, but you'd at least need the call of thisform.dragdrop in each valid drop target.

That's the reason you see this feature more seldom, than you would expect it perhaps. It's not just setting some property to "automatic" and you're done.

Bye, Olaf.

 

by: CaptainCyrilPosted on 2009-08-06 at 00:23:53ID: 25030845

If you have problem moving the OLE, why not create another object that represents the OLE and you drag the OLE once you drag that object. It could be a Shape with a label, or called Drag Me, ...

 

by: tusharkanvindePosted on 2009-08-07 at 00:08:23ID: 25040421

In the OLEStartDrag , you could create a transparent shape that covers the complete form. Set its zorder so it is at the top. Then that shape would capture all the drops and you would only have to code the dragdrop event of this shape

 

by: IainMacbPosted on 2009-08-07 at 02:50:19ID: 25041169

OK, I've managed some progress.

But let me give you some more background first. What I'm trying to do is to display some geographic data. Doesn't need to be as detailed as a full-scale GIS would give me, but I'd like to be able to display a series of places (perhaps 200-300) in their right geographic location relative to one another.

What I'd started with is a bit like tusharkanvinde's suggestion. I've got a rectangular area of  a FORM (it's actually the bottom 95% or so, with some command buttons above it) defined as a shape, named shpMAP.

I've defined a 'place' class which has position and name properties. The .INIT() code for the form includes a loop that goes through the list of places and creates one of these objects within .shpMAP for each place.

Then I've set up a .RIGHTCLICK() method for .shpMAP so that I can zoom in or out.

All of this works nicely. Looks good and works quickly.

What I then wanted to do was to be able to drag the contents of .shpMAP so as to pan north/south/east/west as necessary.

I've looked at Olaf's 'further reading' suggestion. I may be looking at a slightly different set of samples. In my 'Program Files\Visual Foxpro' folder, I've got a 'Samples\solution' folder, where thers a SOLUTION.APP. Running this I can get a 'Fun with Drag and Drop' display. That's got a nice example of a [Drag Me] command button, which has some similarities to what I'd like to do.

Spent some time exploring this. Tried to apply it to my case, but there's a problem. The [Drag Me] example works nicely, because you're trying to move the button to some other part of the FORM. In my case, I'm trying to "nudge" the display by a small amount relative to the size of the shape. And it won't work, because the dragging needs to have moved out of the original shape in order to trigger what happens next. Indeed, if I try nudging the [Drag Me] button so as to move it to a place within the original button, then it doesn't move.

So I've ended up tackling the problem in a different way. I've surrounded .shpMAP with four long thin rectangle shapes. If you click on the topmost one, the map pans north (and so on). Works fine, though probably not as elegant as dragging.

I think that I'm still going to have fun when I come to drag the places (some of them may be in the 'wrong' place and so need to be moved).

I suspect that one or more of you will say "why don't you use such-and-such a GIS". I'm slightly leery of using another program alongside my FoxPro data, beacuse I need to be able to move the data both ways, from Fox to GIS and back again. Keeping everything within the Fox side makes that simpler. And I don't need all the bells and whistles that I'd get with a full-blown GIS!

 

by: ramromPosted on 2009-08-07 at 14:25:02ID: 25047080

How about using the mousemove event to track & respond to movement while the mouse button is down?

 

by: IainMacbPosted on 2009-08-07 at 15:35:55ID: 25047427

One thing that I have tried is to save the start-of-drag coordinates from a .MOUSEDOWN event, and the end-of-drag ones frrom the matching .MOUSEUP event. I can then use the difference between these to reposition the map according to how far I've dragged the map.

That works, in that the map does get repositioned. But it doesn't move during the drag itself, which looks weird!

 

by: ramromPosted on 2009-08-07 at 15:56:40ID: 25047485

That is why I suggest forgetting the drag-drop mechanism, and just following mouse movement.

 

by: tusharkanvindePosted on 2009-08-07 at 19:12:51ID: 25048026

If you use that method, you will also need to code in the mousemove event.

 

by: IainMacbPosted on 2009-08-25 at 01:48:13ID: 25175550

OK, I'm making (some) progress here.

I've given up (for the moment) on being able to drag the whole set of objects so as to pan north/south/east/west. As I said above, I've surrounded .shpMAP with four long thin rectangle shapes. If you click on the topmost one, the map pans north (and so on). Works fine, though probably not as elegant as dragging. I might go back to trying the drag when I understand more about the various methods/events.

Meanwhile, I have been trying to drag individual objects into their 'proper' position. As Olaf says, darg-and-drop isn't really menat for the moving of objects, just for moving data or files and getting a visual representation thereof.

Which probably explains why I don't find the logic terribly easy. But what does work is as follows:

(1) within the object that is to be moved, the .MouseDown() event starts the dragging process. Within this, the code calls .Drag().

(2) the confusing bit is about what happens when you take your finger off the mouse, because here you need to put some code into the .DragDrop() event of the object that's "underneath" - the one onto which you're doing the dropping.

I end up with some complications about x/y coordinates within both objects (the one that's dragged and the one onto which it is dropped) so as to get the dragged one repositioned "properly" - but I ought to be able to sort those on my own.

So, thanks to all of you - you've all suggested things and pointed me in the right direction. Accordingly, I've split the points between all of you.

 

by: CaptainCyrilPosted on 2009-08-25 at 02:01:59ID: 25175605

When you drag and drop, you have to keep track from where you started dragging and what you are dragging. Always use the form's coordinates.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...