Dialogos no modales y modales

Dialogos no modales y modales

Postby Marcelo Via Giglio » Tue Aug 09, 2016 3:46 pm

Buenos días,

tengo la siguiente necesidad, al abrir un dialogo no modal (NOWAIT), todos los dialog a partir de allí tienen el mismo comportamiento, lo que necesito es que al abrir un dialogo modal desde uno no modal no me permita hacer nada hasta que este último se cierre.

Dejo código de ejemplo que muestra el comportamiento. Al seleccionar la "Opción 1", se despliega un dialogo "OPCION 1" (NO MODAL) con un botón que puede desplegar la opción 3 (modal), lo que deseo es que si se selecciona la opción 3, no se pueda seleccionar nada mas hasta que esta se cierre. Espero ser claro

Code: Select all  Expand view

#include "fivewin.ch"

function mail()
local odlg, b1, b2

   define dialog oDlg from 10,10 to 30,80 title "PRINCIPAL"
      @ 1, 5 button b1 prompt "Opción 1" of oDlg ACTION opcion1()
      @ 1,16 button b2 prompt "Opción 2" of oDlg ACTION opcion2()
   ACTIVATE DIALOG oDlg
return nil

function opcion1()
local odlg, b1

   define dialog oDlg from 20,20 to 40,40 title "OPCION 1"
      @ 1, 5 button b1 prompt "Opción 3" of oDlg ACTION opcion3()
   ACTIVATE DIALOG oDlg  NOWAIT
return nil

function opcion2()
local odlg, b1

   define dialog oDlg from 30,30 to 50,50  title "OPCION 2"
      @ 1, 5 button b1 prompt "Opción 3" of oDlg ACTION opcion3()
   ACTIVATE DIALOG oDlg
return nil

function opcion3()
local odlg, b1

   define dialog oDlg from 15,75 to 20,95 title "OPCION 3"
   ACTIVATE DIALOG oDlg

return nil
 


Alguna idea?

saludos
Marcelo
Last edited by Marcelo Via Giglio on Tue Aug 09, 2016 7:24 pm, edited 2 times in total.
Marcelo Via Giglio
 
Posts: 1051
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Dialogos no modales y modales

Postby cnavarro » Tue Aug 09, 2016 4:25 pm

Algo asi?

Code: Select all  Expand view


#include "fivewin.ch"

function mail()
local odlg, b1, b2

   define dialog oDlg from 10,10 to 30,80 title "PRINCIPAL"
      @ 1, 5 button b1 prompt "Opción 1" of oDlg ACTION opcion1()
      @ 1,16 button b2 prompt "Opción 2" of oDlg ACTION opcion2()
   ACTIVATE DIALOG oDlg
return nil

function opcion1()
local odlg, b1

   define dialog oDlg from 20,20 to 40,40 title "OPCION 1"
      @ 1, 5 button b1 prompt "Opción 3" of oDlg ACTION opcion3()
   ACTIVATE DIALOG oDlg  NOWAIT
return nil

function opcion2()
local odlg, b1

   define dialog oDlg from 30,30 to 50,50  title "OPCION 2"
      @ 1, 5 button b1 prompt "Opción 3" of oDlg ACTION opcion3()
   ACTIVATE DIALOG oDlg
return nil

function opcion3()
   
   local odlg, b1
   local lSw   := .F.
   
   define dialog oDlg from 15,75 to 20,95 title "OPCION 3"
   oDlg:bLostFocus  := { || if( !lSw, oDlg:SetFocus(), ) }
   ACTIVATE DIALOG oDlg VALID ( lSw := .T., .T. )

return nil
 
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6504
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Dialogos no modales y modales

Postby Marcelo Via Giglio » Tue Aug 09, 2016 5:24 pm

Cristobal,

funciona, gracias, no pense que oDlg:blostfocus funcionará, alguna vez probe y no funcionaba, por otra parte este comportamiento de modal y no modal es correcto de esta forma?

Muchas gracias

Saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1051
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Dialogos no modales y modales

Postby cnavarro » Tue Aug 09, 2016 5:53 pm

Marcelo
Hasta donde yo puedo saber en este momento, la claúsula IN PARENT, no tendría nada que ver con el tema de ser el diálogo MODAL o no
Lo que está claro es que al existir un diálogo NOMODAL los demás diálogos han de permitir poder acceder a él ( es lógico, no?, no es que se conviertan en NOMODAL )
El código que he puesto es una forma de "simular/obligar" a que no puedas salir de un diálogo a no ser que lo cierres, pero puede venir bien para este tema

Por favor, modifica el titulo del primer post y añade "Solucionado", si es así, claro, ya que nos vendrá mejor en futuras consultas
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6504
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Dialogos no modales y modales

Postby Marcelo Via Giglio » Tue Aug 09, 2016 7:27 pm

Cristobal,

encontre un problema, si bien para el ejemplo simple esto está bien, pero no tiene el mismo comportamiento si el dialogo final (opción 3) tuviera otros controles. Simplemente aumentando un botón todo funciona diferente.

Code: Select all  Expand view
#include "fivewin.ch"

function mail()
local odlg, b1, b2

   define dialog oDlg from 10,10 to 30,80 title "PRINCIPAL"
      @ 1, 5 button b1 prompt "Opción 1" of oDlg ACTION opcion1()
      @ 1,16 button b2 prompt "Opción 2" of oDlg ACTION opcion2()
   ACTIVATE DIALOG oDlg
return nil

function opcion1()
local odlg, b1

   define dialog oDlg from 20,20 to 40,40 title "OPCION 1"
      @ 1, 5 button b1 prompt "Opción 3" of oDlg ACTION opcion3()
   ACTIVATE DIALOG oDlg  NOWAIT
return nil

function opcion2()
local odlg, b1

   define dialog oDlg from 30,30 to 50,50  title "OPCION 2"
      @ 1, 5 button b1 prompt "Opción 3" of oDlg ACTION opcion3()
   ACTIVATE DIALOG oDlg
return nil

function opcion3()
local odlg, b1
local lSw   := .F.

   define dialog oDlg from 15,75 to 20,95 title "OPCION 3"
      @ 1, 5 button b1 prompt "Opción 3" of oDlg ACTION oDlg:end()
    oDlg:bLostFocus  := { || if( !lSw, oDlg:SetFocus(), ) }  
   ACTIVATE DIALOG oDlg  VALID ( lSw := .T., .T. )

return nil
 


saludos y gracias por tu ayuda

Marcelo
Marcelo Via Giglio
 
Posts: 1051
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 32 guests