Si no muestra
        nada, es que el proceso es rápido. ¿Por que fuerzas a que tu
        proceso  tarde mas con un FOR ln = 1 TO
      10000000000000000000?
      
      Yo utilizo una clase derivada de Pageframe y la muestro antes de
      iniciar un proceso y la oculto al terminar. El código de la clase
      es el sig:
      
      **************************************************
      *-- Class:        _espera (x:\_class\gral\gral.vcx)
      *-- ParentClass:  pageframe
      *-- BaseClass:    pageframe
      *-- Time Stamp:   02/19/10 03:38:01 PM
      *
      DEFINE CLASS _espera AS pageframe
          ErasePage = .T.
          PageCount = 1
          BorderWidth = 1
          Width = 300
          Height = 100
          Tabs = .F.
          Visible = .F.
          Themes = .T.
          Name = "_espera"
          Page1.Caption = "Page1"
          Page1.BackStyle = 1
          Page1.BackColor = RGB(200,222,255)
          Page1.Name = "Page1"
      
          ADD OBJECT _espera.page1.label1 AS label WITH ;
              AutoSize = .T., ;
              FontBold = .T., ;
              FontName = "Trebuchet MS", ;
              FontSize = 12, ;
              BackStyle = 0, ;
              Caption = "Espere un momento por favor ...", ;
              Height = 24, ;
              Left = 22, ;
              Top = 36, ;
              Width = 251, ;
              Style = 3, ;
              Name = "Label1"
      
          PROCEDURE visible_assign
              LPARAMETERS vNewVal
              THIS.ZORDER(0)
              IF m.vNewVal
                THIS.TOP = (THISFORM.HEIGHT - THIS.HEIGHT) / 2
                THIS.LEFT = (THISFORM.WIDTH - THIS.WIDTH ) / 2
              ELSE
                THIS.TOP = THISFORM.HEIGHT
                THIS.LEFT = THISFORM.WIDTH
              ENDIF
              THIS.VISIBLE = m.vNewVal
          ENDPROC
      
          PROCEDURE Init
              THIS.TOP = THISFORM.HEIGHT
              THIS.LEFT = THISFORM.WIDTH
          ENDPROC
      
      ENDDEFINE
      *
      *-- EndDefine: _espera
      **************************************************
      
      Lo tengo en una librería de clases visuales y tiro el objeto
      _espera en el formulario y lo utilizo de la sig. manera
      
      ThisForm._espera.Visible = .T.
      *...
      *Proceso
      *...
      ThisForm._espera.Visible = .F.
      
      
      
      También a veces utilizo una función de  Wait Windows centrado que
      lo tengo en mi librería de procedimientos:
      
      *------------------------------------------------------
      * FUNCTION WaitWindowsCentrado(tcTexto, tcOpc, tnTimeout)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - -
      * Muestra la ventana de WAIT WINDOWS centrada
      * PARAMETROS:
      *   tcTexto   = Texto a mostrar. Puede contener saltos de línea
      CHR(13)
      *   tcOpc     = Opciones NOCLEAR y NOWAIT del WAIT WINDOWS nativo
      *   tnTimeOut = Segundos de espera para terminar el WAIT
      * USO: WaitWindowsCentrado(tcTexto, tcOpc, tnTimeOut)
      * EJEMPLO: WaitWindowsCentrado("Espere un momento...", "NOWAIT",
      0)
      * RETORNA: Caracter
      * AUTOR: LMG - 20090824
      *------------------------------------------------------
       FUNCTION WaitWindowsCentrado(tcTexto, tcOpc, tnTimeOut)
      
        LOCAL lnMaxLen, lnNroLin, lnRelFil, lnRelCol, ;
          lnRows_VFP, lnFil, lnCol, lcRet, lcCmd, ln, la(1)
      
        *-- Texto del mensaje
        IF EMPTY(m.tcTexto)
          m.tcTexto = "Presione una tecla para continuar..."
        ENDIF
      
        *-- Linea mas larga de tcTexto (si es multilinea)
        m.lnMaxLen = 0
        m.lnNroLin = ALINES(la, m.tcTexto)
        FOR m.ln = 1 TO m.lnNroLin
          m.lnMaxLen = MAX(m.lnMaxLen,LEN(
m.la(m.ln)))
        ENDFOR
      
        *-- Filas de ventana completa _VFP, distinto a
      WROWS(_
SCREEN.NAME)
        m.lnRows_VFP = _VFP.HEIGHT /
      FONTMETRIC(1,_SCREEN.FONTNAME,_SCREEN.FONTSIZE)
      
        *-- Relación entre el tamaño de las
        *-- fuentes de WAIT WINDOWS y _SCREEN
        m.lnRelFil = FONTMETRIC(1,'Arial',9) /
      FONTMETRIC(1,_SCREEN.FONTNAME,_SCREEN.FONTSIZE)
        m.lnRelCol = FONTMETRIC(6,'Arial',9) /
      FONTMETRIC(6,_SCREEN.FONTNAME,_SCREEN.FONTSIZE)
        m.lnFil = WLROW(_
SCREEN.NAME) + (m.lnRows_VFP - m.lnNroLin *
      m.lnRelFil) / 2
        m.lnCol = WLCOL(_
SCREEN.NAME) + (WCOLS(_
SCREEN.NAME) -
      m.lnMaxLen * m.lnRelCol) / 2
      
        *-- Comando
        m.lcCmd = [WAIT WINDOWS tcTexto TO lcRet AT lnFil,lnCol]
      
        *-- Clausulas NOWAIT y NOCLEAR
        IF NOT EMPTY(m.tcOpc) AND VARTYPE(m.tcOpc) = "C"
          IF "NOWA" $ UPPER(m.tcOpc)
            m.lcCmd = m.lcCmd + [ NOWAIT]
          ENDIF
          IF "NOCL" $ UPPER(m.tcOpc)
            m.lcCmd = m.lcCmd + [ NOCLEAR]
          ENDIF
        ENDIF
      
        *-- Clausula TIMEOUT
        IF NOT EMPTY(m.tnTimeOut) AND VARTYPE(m.tnTimeOut) = "N"
          m.lcCmd = m.lcCmd + [ TIMEOUT tnTimeOut]
        ENDIF
      
        *-- Ejecuto el comando
        &lcCmd
        RETURN m.lcRet
      ENDFUNC
      
      *------------------------------------------------------
      
      Para usarlo hago:
      
      WaitWindowsCentrado("Espere un momento ..." + CHR(13) + "Generando
      el gráfico ...", "NOWAIT")
      *...
      * Proceso
      *...
      WAIT CLEAR 
      
      
      
      
        
              Luis María Guayán
              Tucumán, Argentina
              _________________________
              http://www.PortalFox.com
              Nada corre como un zorro
              _________________________