Page 1 of 1

Diálogo NOMODAL y variable PRIVATE

Posted: Fri Oct 19, 2007 4:50 pm
by Manuel Aranda
En un diálogo MODAL tengo un BROWSE que se va filtrando según voy tecleando letras; para ello uso una variable PRIVATE y todo va perfectamente. Al convertir el dialogo a NOMODAL me salta el error de que la variable cKey no existe. ¿Por qué?

Code: Select all

PRIVATE cKey
cKey=""
//
  DEFINE DIALOG oDlg RESOURCE "AGENDA" TITLE cTitulo FONT oFont1
   oDlg:lHelpIcon:=.F.

     REDEFINE LISTBOX oLbx ;
            FIELDS IIF(EMPTY(AGENDA->Ubicado)," ",aLevel[ 5 ] ),;
            +" "+AGENDA->Texto+" ";
            FIELDSIZES 16,300;
            HEADERS "A", "       Texto";
            ID 200;
            OF oDlg

     oLbx:bkeydown:={|nKey|DOKEYCHECK(nKey,oLbx,oDlg,oSay)}

Posted: Fri Oct 19, 2007 6:30 pm
by karinha
MEMVAR cKey
PRIVATE cKey

cKey := ""

Repita en las otras funciones, si usas la variable en las otras funciones.

Posted: Fri Oct 19, 2007 6:55 pm
by Manuel Aranda
Gracias karinha, pero persiste el error. La variable cKey se usa en la función DOKEYCHECK(nKey,oLbx,oDlg,oSay), y como ya dije, cuando el diálogo es MODAL no hay problema.

Un saludo,
Manuel

Posted: Fri Oct 19, 2007 7:12 pm
by karinha
#include "FiveWin.ch"

//----------------------------------------------------------------//

Code: Select all

function Main()

LOCAL oLbx, oDlg, oSay, nKey := VK_RETURN

MEMVAR  cKey
PRIVATE cKey

cKey := "teste de cKey, Manuel Aranda"

? ckey

  DEFINE DIALOG oDlg RESOURCE "AGENDA" TITLE cTitulo FONT oFont1 

   oDlg:lHelpIcon:=.F. 

  REDEFINE LISTBOX oLbx ;
           FIELDS IIF(EMPTY(AGENDA->Ubicado)," ",aLevel[ 5 ] ),;
           +" "+AGENDA->Texto+" ";
           FIELDSIZES 16,300;
           HEADERS "A", "       Texto";
           ID 200;
           OF oDlg

     oLbx:bkeydown:={|nKey|DOKEYCHECK(nKey,oLbx,oDlg,oSay)}

   ACTIVATE DIALOG oDlg CENTERED


    DOKEYCHECK(nKey,oLbx,oDlg,oSay)

RETURN NIL

STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oDlg,oSay)

    MEMVAR  cKey

    ? cKey

RETURN( .T. )

Posted: Fri Oct 19, 2007 7:23 pm
by Manuel Aranda
Así si funciona, pero si haces el diálogo NOMODAL es cuando se produce el error

ACTIVATE DIALOG oDlg CENTERED NOMODAL

Posted: Fri Oct 19, 2007 7:35 pm
by karinha
ACTIVATE DIALOG oDlg CENTERED NOMODAL

SI USAS RECURSOS, DESHABILITE EN EL RECURSO DEL WORKSHOP.EXE LA CLAUSULA MODAL FRAME SOLAMENTE.

CREO, QUE SEA APENAS ESTO.

Regards, saludos.

QUE INTENTAS HACER???

Posted: Fri Oct 19, 2007 8:49 pm
by jacgsoft
pues declara como Publica y listo

Public cKey

Posted: Sat Oct 20, 2007 10:24 am
by Manuel Aranda
karinha, sigue el mismo error independientemente de que la ventana sea modal o no modal en el recurso.

jacgsoft, gracias. Haciendo pública la variable ya funciona correctamente.
Pero me intriga saber por qué no funciona como private si hago el diálogo NOMODAL. En fín, como tantas otras cosas. Correremos un tupido velo y aplicaremos la máxima "si funciona no lo toques".

Un saludo,
Manuel

Posted: Sat Oct 20, 2007 6:20 pm
by Francisco Horta
Miguel, prueba a pasarla como referencia a ver si funciona DOKEYCHECK(nKey,oLbx,oDlg,oSay,@cKey)

STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oDlg,oSay,cKey)
salu2
Paco

Posted: Sat Oct 20, 2007 6:32 pm
by Manuel Aranda
Gracias Francisco, pero tampoco funciona así.

Un saludo,
Manuel
Francisco Horta wrote:Miguel, prueba a pasarla como referencia a ver si funciona DOKEYCHECK(nKey,oLbx,oDlg,oSay,@cKey)

STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oDlg,oSay,cKey)
salu2
Paco

Posted: Sun Oct 21, 2007 1:08 am
by Francisco Horta
Migeul, probaste a declararla STATIC y probaste tambien como LOCAL ? preba pasandola como refer aver si funciona. sino lo mas facil es declararla PUBLIC
salu2
paco

Posted: Sun Oct 21, 2007 1:34 am
by wilsongamboa
Manuel
me parece que cuando es nomodal el dialogo, la funcion donde declaras private a la variable ya termino de ejecutarse y solo queda activado el dialogo, porque la ejecucion del programa no se detiene, y por eso ya no existe esa variable, mejor la trabajas como local, porque igual si la declaras public el contenido de la misma variaria si acceden al mismo dialogo varias veces

bueno espero te ayude

Saludos

Posted: Sun Oct 21, 2007 9:36 am
by Manuel Aranda
Gracias a todos, especialmente a Francisco Horta. Pasándola como referencia funciona si se define como LOCAL o STATIC pero no como PRIVATE que es como la tenía cuando el diálogo era MODAL. De todas formas prefiero esta solución a declararla PUBLICA.

Un saludo,
Manuel

Posted: Sun Oct 21, 2007 9:42 am
by Antonio Linares
Manuel,

Como te indica Wilson, la ejecución no se detiene y entonces sales del ámbito en donde la variable private fué creada y la maquina virtual de Harbour la destruye