Jump to content
Fivewin Brasil

janela modal


Recommended Posts

Estou tentando usar janela modal mas sem sucesso.

Na documentação há o uso de NOMODAL, o que sugere que o default seria modal.

Tudo como WINDOW fica tudo livre.

Tudo como DIALOG não aparece nada.

Deixando somente a primeira janela como WINDOW, a próxima como DIALOG dá erro.

 

   Error description: Error FiveWin/3  Cannot create Dialog Box: 

Stack Calls
===========
   Called from: .\source\classes\DIALOG.PRG => CREATEDLGERROR( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 0 )
   Called from: .\source\classes\FOLDER.PRG => TFOLDER:ADDITEM( 0 )
   Called from: lib.prg => GUI_TABPAGEBEGIN( 299 )
   Called from: frm_edit.prg => FRM_EDIT( 80 )
   Called from: frm_class.prg => (b)FRM_CLASS( 40 )
   Called from: frm_class.prg => FRM_CLASS:CREATECONTROLS( 0 )
   Called from: frm_dialog.prg => FRM_DIALOG( 52 )
   Called from: frm_class.prg => (b)FRM_CLASS( 48 )
   Called from: frm_class.prg => FRM_CLASS:EXECUTE( 0 )
   Called from: frm_main.prg => FRM_MAIN( 34 )
   Called from: lib.prg => (b)GUI_DLGMENU( 27 )
   Called from: .\source\classes\MENU.PRG => TMENU:COMMAND( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:COMMAND( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 0 )
   Called from: .\source\classes\WINDOW.PRG => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 0 )
   Called from: lib.prg => GUI_DIALOGACTIVATE( 180 )
   Called from: lib.prg => GUI_DLGMENU( 42 )
   Called from: test_dlgmenu.prg => TEST_DLGMENU( 25 )
   Called from: test.prg => MAIN( 162 )
 

É outra LIB, mas me baseei na HWGUI onde existe WINDOW e DIALOG mas são a mesma coisa, tanto faz usar uma coisa ou outra.

 

1) Como mostrar uma janela MODAL, que bloqueia a anterior

2) Tem como fazer o "fonte" aguardar o término da janela ?

 

José M. C. Quintas

 

Link to comment
Share on other sites

É aquele projeto, que compila com hwgui, hmg 3, hmg extended, oohg, gtwvg, e agora também fivewin.

https://github.com/JoseQuintas/dlgauto/blob/main/source/lib_fivewin.prg

Esse fonte contém todos os comandos fivewin que estão sendo usados.

Acho que vai olhar gui_CreateDialog() e gui_ActivateDialog(), sobre a parte do MODAL.

O erro que mencionei provavelmente é porque em fivewin dialog é uma coisa e window é outra, igual acontece em minigui, diferente de hwgui que pode usar qualquer um pra qualquer coisa.

Se quiser olhar, mas acho que não resolve, gui_DlgMenu() é uma das primeiras.

Recapitulando:

tudo DEFINE WINDOW: tudo funciona, mas não é modal

tudo DEFINE DIALOG: nada acontece

primeira DEFINE WINDOW, e próxima DEFINE DIALOG, a primeira abre, mas a com dialog dá o erro mencionado.

 

José M. C. Quintas

Link to comment
Share on other sites

1000 perdões, não vou perder tempo com isso, essa "coisa" não tem nada que ver com FIVEWIN the best. É uma mistureba de não sei o que, com sei lá o que. Se vai usar FIVEWIN, use PURO. Não misture com SEGUNDA LINHA NUNCA!

Tks.

Regards, saludos.

Link to comment
Share on other sites

MDI é a inferface de abrir várias janelas, não tem nada a ver com modal.

Encontrei um exemplo de dialog modal.... tem que colocar NÃO MODAL pra dizer que é MODAL.

Mas não resolve, porque o conteúdo de uma dialog não pode ser igual de uma window, e gera o erro que já foi descrito aqui.

Não é possível que você não tenha pelo menos uma janela MODAL no seu aplicativo, aquela que abre e bloqueia a janela anterior.

Como digitar produtos em um pedido, se a janela do pedido não ficar bloqueada ? como consultar cadastro se a tela atual não ficar bloqueada ?

Talvez só funcione com dialog em resource, o que não me interessa.

 

 

Ou talvez eu tenha que modificar a pergunta:

Como usar a janela MODAL, que no fivewin chama de NOMODAL ? (talvez dependa da versão de fivewin também)

 

José M. C. Quintas

 

Link to comment
Share on other sites

Mister Quitas, Mira se és esto:

// C:\FWH\SAMPLES\ENRIQUE.PRG

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oWnd

   DEFINE WINDOW oWnd

   ACTIVATE WINDOW oWnd ON INIT NonModal()

RETURN NIL

FUNCTION NonModal()

   LOCAL oDlg, oRad, nValue := 1, cTitle, oFont

   cTitle := "DIALOGO NO MODAL by Jose Quintas"

   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg TITLE cTitle FONT oFont TRANSPARENT

   oDlg:lHelpIcon := .F.

   @ 1, 1 RADIO oRad VAR nValue ;
      ITEMS "&One", "&Two", "T&hree" OF oDlg SIZE 80, 12 ;

   @ 3, 10 BUTTON "Ok" OF oDlg ACTION MsgInfo( "ok" ) CANCEL

   ACTIVATE DIALOG oDlg NOMODAL CENTER

   oFont:End()

RETURN NIL

// FIN / END

Regards, saludos.

 

Link to comment
Share on other sites

// C:\FWH\SAMPLES\ENRIQUE2.PRG - FiveWin e o bicho. kkkkkkkkkkkk

#include "FiveWin.ch"

STATIC oWnd

FUNCTION Main()

   LOCAL oIco, oBar, oBmp

   hb_gcAll( .F. )

   DEFINE ICON oIco FILE "..\icons\fax.ico"

   DEFINE WINDOW oWnd FROM 1, 1 TO 22, 75 TITLE "FiveWin sample" ;
      MENU  BuildMenu() COLOR "B/W" ICON oIco

   DEFINE BUTTONBAR oBar _3D SIZE 26, 27 OF oWnd 2007

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\new.bmp" FLAT ;
      ACTION( Dlg_Modal() )                                       ;
      TOOLTIP "Creates a new document"

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\open.bmp" FLAT ;
      ACTION MsgInfo( cGetFile( "*.*", "Select a document to open" ) ) ;
      TOOLTIP "Opens a document" WHEN .F.

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\floppy.bmp" FLAT ;
      ACTION MsgInfo( Time() ) TOOLTIP "Saves this document"

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\printer.bmp" FLAT ;
      ACTION MsgInfo( "Prints this document" ) TOOLTIP "Print this document" ;
      GROUP

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\prop.bmp" FLAT ;
      ACTION PrinterSetup() TOOLTIP "Setup the printer"

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\HelpInd.bmp" FLAT ;
      ACTION MsgInfo( Version() ) TOOLTIP "A multiple lines" + ;
      Chr( 13 ) + Chr( 10 ) + "tooltip!" GROUP

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\Help.bmp" FLAT ;
      ACTION MsgInfo( "fivewin power!" ) TOOLTIP "fivewin power!"

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\Exit.bmp" FLAT ;
      ACTION( oWnd:End(), LIBERA_TUDO() ) TOOLTIP "Exit this app" GROUP

   DEFINE MESSAGE OF oWnd ;
      PROMPT FWVERSION + " " + FWCOPYRIGHT ;
      NOINSET CENTERED KEYBOARD DATE CLOCK 2007

   DEFINE BITMAP oBmp FILENAME "..\bitmaps\sea.bmp"

   oWnd:bPainted = {| hDC | BmpTiled( hDC, oWnd, oBmp ) }

   ACTIVATE WINDOW oWnd CENTERED // MAXIMIZED

RETURN NIL

FUNCTION Dlg_Modal()

   LOCAL oDlg, oRad, nValue := 1, cTitle, oFont

   cTitle := "DIALOGO MODAL by Jose Quintas"

   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg TITLE cTitle FONT oFont TRANSPARENT

   oDlg:lHelpIcon := .F.

   @ 1, 1 RADIO oRad VAR nValue ;
      ITEMS "&One", "&Two", "T&hree" OF oDlg SIZE 80, 12 ;

      @ 3, 10 BUTTON "Ok" OF oDlg ACTION MsgInfo( "ok" ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

RETURN NIL

FUNCTION BuildMenu()

   LOCAL oMenu

   MENU oMenu 2007
   MENUITEM "Information"
   MENU
   MENUITEM "&About..." ;
      ACTION MsgInfo( FWDESCRIPTION ) ;
      FILENAME "..\bitmaps\16x16\info.bmp"
   SEPARATOR
   MENUITEM "&End..."  ;
      ACTION( oWnd:End(), LIBERA_TUDO() ) ;
      FILENAME "..\bitmaps\16x16\exit.bmp"

   ENDMENU

   MENUITEM "&Clients"
   MENU
   MENUITEM "&New..." ;
      ACTION ( MsgStop( "New Clients" ), ;
      oWnd:Say( 5, 5, "New Clients...", "GR+/G" ) ) ;
      FILENAME "..\bitmaps\16x16\faces.bmp"

   MENUITEM "&Modify..."  ACTION MsgInfo( "Modif. Clients" ) ;
      FILENAME "..\bitmaps\edit.bmp"

   MENUITEM "&Delete..."  ACTION MsgAlert( "Del Clients" ) ;
      FILENAME "..\bitmaps\16x16\delete.bmp"

   SEPARATOR

   MENUITEM "&Browse..."  ACTION MsgInfo( "Browse Clients" ) ;
      FILENAME "..\bitmaps\16x16\browse.bmp"

   ENDMENU

   MENUITEM "&Utilities"
      MENU
         MENUITEM "&Calculator..." ACTION WinExec( "Calc" ) ;
            FILENAME "..\bitmaps\16x16\calc.bmp"

      MENUITEM "&Internet..." ;
         ACTION WinExec( "start iexplore www.fivetech.com", 0 ) ;
         FILENAME "..\bitmaps\16x16\explorer.bmp"
      ENDMENU

   ENDMENU

RETURN( oMenu )

// --Fecha o Programa Definitivamente e Libera a Memoria RAM.

FUNCTION LIBERA_TUDO()

   IF File( "ENRIQUE2.LOG" )
      DELETEFILE( "ENRIQUE2.LOG" )
   ENDIF

   dbCommitAll()
   dbUnlockAll()
   dbCloseAll()
   FreeResources()
   RELEASE ALL
   SysRefresh()

   hb_gcAll( .T. )

   CLEAR MEMORY

   PostQuitMessage( 0 )

   QUIT

RETURN NIL

STATIC FUNCTION BmpTiled( hDC, oWnd, oBmp )

   LOCAL nWidth := oWnd:nWidth(), nHeight := oWnd:nHeight()
   LOCAL nRow := 0, nCol := 0, n
   LOCAL nBmpWidth  := oBmp:nWidth(),  nBmpHeight := oBmp:nHeight()

   IF oBmp:hBitmap == 0
      RETURN NIL
   ENDIF

   WHILE nRow < nHeight
      nCol = 0
      WHILE nCol < nWidth
         PalBmpDraw( hDC, nRow, nCol, oBmp:hBitmap )
         nCol += nBmpWidth
      END
      nRow += nBmpHeight
   END

RETURN NIL

// FIN / END

 

Link to comment
Share on other sites

Mister Quintas, mais um exemplo para o senhor brincar e me desafiar. kkkkk Tenta a sorte... 

// C:\FWH\SAMPLES\RADHORIZ.PRG

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oDlg, oRad, nValue := 1, oGet1, oFont, lSave := .F., cTestGet

   IF .NOT. File( "test1.dbf" )

      createfilea()

   ENDIF

   IF ( Select( "test1" ) == 0 )

      USE test1 NEW

      INDEX ON FIELD->msg1 TO temp

   ELSE

      SELECT Select( "test1" )

   ENDIF

   APPEND BLANK

   onerror( "APPEND" )

   REPLACE FIELD->msg1 WITH "This is Radio 1"
   REPLACE FIELD->msg2 WITH "This is Radio 2"
   REPLACE FIELD->msg3 WITH "This is Radio 3"

   IF nValue = 1

      ctestget = FIELD->msg1

   ELSEIF nValue = 2

      ctestget = FIELD->msg2

   ELSE

      ctestget = FIELD->msg3

   ENDIF

   DEFINE FONT oFont  NAME "Ms Sans Serif"  SIZE 00, -14 BOLD

   DEFINE DIALOG oDlg FROM 0, 0 TO 26, 79 FONT oFont                    ;
      TITLE "Test radio horizontal:->  " + Version()

   oDlg:lHelpIcon := .F.

   @ 0.5,  2 RADIO oRad VAR nValue ITEMS "Radio 1" OF oDlg SIZE 50, 12  ;
      ON CHANGE {|| radiobtntest( oRad:nOption, oGet1, @ctestget ) }    ;
      UPDATE

   @ 0.5,  17 RADIOITEM "Radio 2" RADIOMENU oRad OF oDlg SIZE 50, 12    ;
      UPDATE

   @ 0.5, 32 RADIOITEM "Radio 3" RADIOMENU oRad OF oDlg SIZE 50, 12     ;
      UPDATE

   @ 6, 1 GET oGet1 VAR cTestGet SIZE 100, 12 OF oDlg UPDATE            ;
     COLORS METRO_PINK, CLR_WHITE FONT oFont

   @ 11.70, 001  SAY "kapiabafwh@gmail.com" SIZE 085, 12 OF oDlg UPDATE ;
     COLORS METRO_COBALT, CLR_WHITE FONT oFont

   @ 9.95, 18.7 BUTTON "&Gravar" OF oDlg ACTION ( lSave := .T. )        ;
      SIZE 40, 12

   @ 9.95, 25.7 BUTTON "&Saida" OF oDlg ACTION ( oDlg:End() )           ;
      SIZE 40, 12 CANCEL

   ACTIVATE DIALOG oDlg CENTERED ON INIT( CTRLS_COLORS( oDlg ) )

   oFont:End()

   IF lSave

      SELECT test1

      onerror( "RLOCK" )

      IF nValue = 1

         REPLACE FIELD->msg1 WITH ctestget

      ELSEIF nValue = 2

         REPLACE FIELD->msg2 WITH ctestget

      ELSE

         REPLACE FIELD->msg3 WITH ctestget

      ENDIF

   ENDIF

   dbCloseAll() // CLOSE DATABASES

RETURN NIL

FUNCTION NAO_VOLTA_SETA_ACIMA()

   IF GETASYNCKEY( VK_UP )
      RETURN( .F. )
   ENDIF

RETURN( .T. )

FUNCTION radiobtntest( nValue, oGet1, ctestget )

   IF nValue = 1

      ctestget = FIELD->msg1

   ELSEIF nValue = 2

      ctestget = FIELD->msg2

   ELSE

      ctestget = FIELD->msg3

   ENDIF

   oGet1:ReFresh()

RETURN NIL

FUNCTION createfilea()

   // "File : test1.dbf"
   LOCAL tmpdbf := {}

   AAdd( tmpdbf, { "msg1", "c", 50, 0 } )
   AAdd( tmpdbf, { "msg2", "c", 50, 0 } )
   AAdd( tmpdbf, { "msg3", "c", 50, 0 } )

   dbCreate( "test1.dbf", tmpdbf )

   CLOSE

RETURN NIL

FUNCTION ONERROR()

   PARAMETERS errortype

   errortype := Upper( errortype )

   DO CASE
   CASE errortype == "RLOCK"

      IF ( RLock() )

         RETURN( .T. )

      ENDIF

      DO WHILE ( .NOT. RLock() )

         Inkey( 3 )

      ENDDO

   CASE errortype == "APPEND"

      IF ( .NOT. NetErr() )

         onerror( "RLOCK" )

         RETURN( .T. )

      ENDIF

      DO WHILE ( NetErr() )

         Inkey( 3 )

         APPEND BLANK

      ENDDO

      onerror( "RLOCK" )

   ENDCASE

RETURN( .T. )
// By Giovanny Vecchi - TESTRAD.PRG aqui na minha pasta.
FUNCTION CTRLS_COLORS( f_oDlgContainer )

   LOCAL lc_aCtrls := {}, lc_iFor := 0
   LOCAL lc_aItemsRadio := {}

   lc_aCtrls := f_oDlgContainer:aControls

   FOR lc_iFor := 1 TO Len( lc_aCtrls )

      IF ValType( lc_aCtrls[lc_iFor] ) == "O"

         IF lc_aCtrls[lc_iFor]:ClassName() == "TRADIO"

            aEval( lc_aCtrls[lc_iFor]:oRadMenu:aItems,                 ;
                   {|_oRadId|{ SetWindowTheme( _oRadId:hWnd, "", "" ), ;
                   _oRadId:SetColor( CLR_CYAN, CLR_WHITE ) } } )
					
         ELSEIF lc_aCtrls[lc_iFor]:ClassName() == "TCHECKBOX"

            SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

            // C:\FWH\INCLUDE\COLORS.CH
            lc_aCtrls[lc_iFor]:SetColor( METRO_ORANGE, METRO_ORANGE )

         ENDIF

      ENDIF

   NEXT

RETURN NIL

// FIN / END - kapiabafwh@gmail.com

Regards, saludos.

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...