FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Dialogos no modales y modales
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Dialogos no modales y modales
Posted: Tue Aug 09, 2016 03: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 (fw): Select all Collapse
#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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Dialogos no modales y modales
Posted: Tue Aug 09, 2016 04:25 PM
Algo asi?

Code (fw): Select all Collapse
#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
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: Dialogos no modales y modales
Posted: Tue Aug 09, 2016 05: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

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Dialogos no modales y modales
Posted: Tue Aug 09, 2016 05: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
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: Dialogos no modales y modales
Posted: Tue Aug 09, 2016 07: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 (fw): Select all Collapse
#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

Continue the discussion