Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Controlling design-time focus
Message
From
23/05/2005 13:12:58
 
 
To
All
General information
Forum:
Visual FoxPro
Category:
Forms & Form designer
Title:
Controlling design-time focus
Miscellaneous
Thread ID:
01016828
Message ID:
01016828
Views:
59
I'm working on a sort of a builder and having one problem I can't seem to resolve.

The builder form has a list of the controls on the target form. As the cursor moves through the list, I want the appropriate control selected on the target. For controls that have a SetFocus method, I can just call that, and it works. For controls with no SetFocus method, I've written code using the MOUSE command to click on the right control and then put the mouse back where I found it. This also works.

However, the two don't work very well together. In some cases, when a control has been selected using MOUSE, it won't give up the focus programmatically. That is, after MOUSE CLICK highlights a particular control, subsequent calls to SetFocus don't change the highlight.

I'm looking for any ideas on how to make this work. Here's the code I'm now using. oControl is an object reference to the control I want to be selected. ThisForm.oChangeForm is an object reference to the target form
IF PEMSTATUS(oControl, "SetFocus", 5) AND NOT (PEMSTATUS(oControl,"Enabled", 5) AND oControl.Enabled = .F.)
   oControl.SetFocus()
ELSE
   * Use brute force
   * First hold current mouse pos
   nMouseFound = AMOUSEOBJ(aMousePos, 1)
	
   IF PEMSTATUS(oControl, "Left", 5) 
      * Has position properties, so click it
      * First, get position on form, not in container
      nTop = OBJTOCLIENT(oControl, 1)
      nLeft = OBJTOCLIENT(oControl, 2)
      ACTIVATE WINDOW (ThisForm.oChangeform.Caption)
      MOUSE CLICK AT nTop + 5, nLeft + 5 PIXELS WINDOW (ThisForm.oChangeform.Caption)
      ACTIVATE WINDOW (This.Name)
      * Reactivate this form
      MOUSE CLICK AT This.Top + 5, This.Left + 5 PIXELS 
		
      IF nMouseFound = 4
         * Put mouse pointer back where it belongs.
         DO CASE 
         CASE WEXIST(aMousePos[2].Name)
            MOUSE AT aMousePos[4], aMousePos[3] PIXELS WINDOW (aMousePos[2].Name)
         CASE WEXIST(aMousePos[2].Caption)
            MOUSE AT aMousePos[4], aMousePos[3] PIXELS WINDOW (aMousePos[2].Caption)
         OTHERWISE
            * Can't do anything about it
         ENDCASE 
      ENDIF
   ENDIF

ENDIF
Thanks for any ideas.

Tamar
Next
Reply
Map
View

Click here to load this message in the networking platform