DOCUMENT:Q121630  10-NOV-1994  [FOXPRO]
TITLE   :PRB: Clicking Object with Mouse Terminates READ
PRODUCT :Microsoft FoxPro
PROD/VER:2.5x 2.60 2.60a | 2.00 2.50x 2.60 2.60a | 2.5x 2.60a
OPER/SYS:WINDOWS         | MS-DOS                | MACINTOSH
KEYWORDS:kbprg kbprb kbcode kbtshoot

--------------------------------------------------------------------
The information in this article applies to:

 - Microsoft FoxPro for Windows, versions 2.5x, 2.6, 2.6a
 - Microsoft FoxPro for MS-DOS, versions 2.0, 2.5x, 2.6, 2.6a
 - Microsoft FoxPro for Macintosh, versions 2.5x, 2.6a
--------------------------------------------------------------------

SYMPTOMS
========

If the mouse is used to activate an object that is disabled by the VALID
clause of the previously active object, the current READ is terminated.

NOTE: If the keyboard is used instead of the mouse to activate the object,
the READ is not terminated.

CAUSE
=====

The mouse click invokes the VALID clause of the previous object, which
attempts to disable the object that has already been clicked. FoxPro
handles this condition by terminating the READ.

RESOLUTION
==========

Issue the READ from within a DO WHILE loop, as in the code example below:

   SET READBORDER ON
   DEFINE WINDOW test FROM 1,1 to 10,30 DOUBLE SHADOW
   ACTIVATE WINDOW test
   MOVE WINDOW test CENTER
   m.choice1 = SPACE(10)
   m.choice2 = SPACE(10)
   m.choice3 = SPACE(10)
   llLeave = .F.
   lnObject = 0

   @ 0, 10 GET m.choice1 VALID valclause() WHEN wheclause()
   @ 2, 10 GET m.choice2
   @ 4,10 GET m.choice3 PICTURE "@* OK" VALID termrd()

   DO WHILE !llLeave
     READ CYCLE SAVE OBJECT lnObject
   ENDDO

   CLEAR GETS
   RELEASE WINDOW test

   FUNCTION valClause
   SHOW GET m.choice2 DISABLE

   FUNCTION wheclause
   lnObject = _CUROBJ

   FUNCTION termrd
   llLeave = .T.
   CLEAR READ

STATUS
======

This behavior is by design. Microsoft is researching this behavior and will
post new information here in the Microsoft Knowledge Base as it becomes
available.

MORE INFORMATION
================

Steps to Reproduce Behavior
---------------------------

1. Run the following program:

      DEFINE WINDOW test FROM 1,1 to 10,30 DOUBLE SHADOW
      ACTIVATE WINDOW test
      MOVE WINDOW test CENTER
      m.choice1 = SPACE(10)
      m.choice2 = SPACE(10)
      m.choice3 = SPACE(10)

      @ 0,10 GET m.choice1 VALID valclause()
      @ 2,10 GET m.choice2
      @ 4,10 GET m.choice3

      READ CYCLE
      RELEASE WINDOW test

      FUNCTION valClause
      SHOW GET m.choice2 DISABLE

2. Type 123 in the first GET object.

3. Using the mouse, click the second GET object.

Note that the READ is terminated, returning you to the Command window.

REFERENCES
===========

Code example and resolution provided by Menachem Bazian (FLASH) on
CompuServe.

Explanation of behavior provided by Mike Beane on CompuServe.

Additional reference words: FoxMac FoxDos FoxWin 2.50 2.50a 2.50b 2.50c
2.60 2.60a
KBCategory: kbprg kbprb kbcode kbtshoot
KBSubcategory:

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.  MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.  SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1994.