Diálogo NOMODAL y variable PRIVATE

Post Reply
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Diálogo NOMODAL y variable PRIVATE

Post 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)}
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

MEMVAR cKey
PRIVATE cKey

cKey := ""

Repita en las otras funciones, si usas la variable en las otras funciones.
João Santos - São Paulo - Brasil
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post 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
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post 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. )
João Santos - São Paulo - Brasil
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post by Manuel Aranda »

Así si funciona, pero si haces el diálogo NOMODAL es cuando se produce el error

ACTIVATE DIALOG oDlg CENTERED NOMODAL
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post 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???
João Santos - São Paulo - Brasil
User avatar
jacgsoft
Posts: 96
Joined: Fri Nov 24, 2006 9:03 pm
Location: Lima - Peru

Post by jacgsoft »

pues declara como Publica y listo

Public cKey
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post 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
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post 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
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post 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
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post 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
User avatar
wilsongamboa
Posts: 439
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Post 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
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply