KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q155388: PRB: CLEAR RESOURCE Does Not Appear to Work

Article: Q155388
Product(s): Microsoft FoxPro
Version(s): WINDOWS:5.0,5.0a,6.0
Operating System(s): 
Keyword(s): kbvfp500 kbvfp600
Last Modified: 14-DEC-1999

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

- Microsoft Visual FoxPro for Windows, versions 5.0, 5.0a, 6.0 
-------------------------------------------------------------------------------

SYMPTOMS
========

The CLEAR RESOURCES command, a new command for Visual FoxPro 5.0, does not
appear to work. When Visual FoxPro displays a bitmap, picture, cursor, icon, or
font resource, Visual FoxPro caches the resource to optimize performance. If you
use a resource of the same name (for example, a different bitmap with the same
name as the one already cached), Visual FoxPro does not reload the resource.

Therefore, clearing a resource file is useful for removing a graphic image from
memory and forcing Visual FoxPro to reload an image of the same name from disk.
For example, a report might display graphic images from a database, all of which
are named TEMP; however, because they all have the same name, Visual FoxPro does
not reload each new graphic unless the existing one has been cleared from memory
using the CLEAR RESOURCES command.

CAUSE
=====

This scenario occurs when a resource is in use when you issue the CLEAR
RESOURCES command.

RESOLUTION
==========

The CLEAR RESOURCES command acts only on resources that are not currently in
use. In the following example, the "Toggle bitmap" button attempts to clear a
resource that is in use. The click code for the "Update form" button saves the
current value of the picture property, sets the picture property to "", clears
the resource (which is no longer in use), and resets the picture property back
to its original value. Note that the specific resource is cleared by name. Any
remaining resources are not cleared. The resources must be cleared because of
caching for performance reasons. You want to clear only the resource you want to
update so that any others will still be in the cache.

STATUS
======

This behavior is by design. CLEAR RESOURCES acts only on resources not currently
in use.

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

1. Run the following code from a .prg:

        PUBLIC oform
        oform=CREATEOBJECT('form1')
        oform.Show

        DEFINE Class form1 AS Form
          Top = 0
          Left = 0
          Height = 234
          Width = 207
          DoCreate = .T.
          Caption = "Clear Resource Demo"
          Name = "form1"
          changedbmp = .F.
          ADD OBJECT image1 AS Image WITH ;
            Stretch = 2, ;
            Height = 120, ;
            Left = 36, ;
            Top = 12, ;
            Width = 144, ;
            Name = "Image1"
          ADD OBJECT command1 AS CommandButton WITH ;
            Top = 156, ;
            Left = 60, ;
            Height = 27, ;
            Width = 96, ;
            Caption = "\<Toggle bitmap", ;
            Default = .T., ;
            Name = "Command1"
         ADD OBJECT command2 AS CommandButton WITH ;
            Top = 192, ;
            Left = 67, ;
            Height = 27, ;
            Width = 84, ;
            Caption = "\<Update form", ;
            Name = "Command2"

          PROCEDURE image1.Init
            Clear RESOURCES
            COPY FILE home()+'wizards\wizbmps\wzclose.bmp' TO 'bmptemp.bmp'
            THIS.Picture='bmptemp.bmp'
          ENDPROC

          PROCEDURE command1.Click
            IF THISFORM.changedbmp=.F.
              THISFORM.changedbmp=.T.
              COPY FILE home()+'wizards\wizbmps\wzedit.bmp' TO 'bmptemp.bmp'
            ELSE
              THISFORM.changedbmp=.F.
              COPY FILE home()+'wizards\wizbmps\wzclose.bmp' TO 'bmptemp.bmp'
            ENDIF
            CLEAR RESOURCES
            THISFORM.REFRESH
          ENDPROC

          PROCEDURE command2.Click
            LOCAL lcPictemp
            lcPictemp=thisform.image1.Picture
            THISFORM.image1.Picture=''
            CLEAR RESOURCES (lcPictemp)
            THISFORM.image1.Picture=lcPictemp
          ENDPROC
  ENDDEFINE

2. Press the "Toggle bitmap" button. Note how the button does not update the
  image even though it contains a CLEAR RESOURCES command in its click code.

3. Press the "Update form" button. Now the image is updated.

REFERENCES
==========

Visual FoxPro Help file.

Additional query words: kbdse Vfoxwin

======================================================================
Keywords          : kbvfp500 kbvfp600 
Technology        : kbVFPsearch kbAudDeveloper kbVFP500 kbVFP600 kbVFP500a
Version           : WINDOWS:5.0,5.0a,6.0

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

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 1986-2002.