JoséQuintas Posted April 29 Report Share Posted April 29 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 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 29 Report Share Posted April 29 Mostre este .PRG Called from: test_dlgmenu.prg => TEST_DLGMENU( 25 ) e o arquivo.rc que o senhor está usando, pls. Tks. Regards, saludos. Quote Link to comment Share on other sites More sharing options...
JoséQuintas Posted April 30 Author Report Share Posted April 30 É 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 Quote Link to comment Share on other sites More sharing options...
JoséQuintas Posted April 30 Author Report Share Posted April 30 É meu programa de testes, ele cria tudo a partir da estrutura dos DBFs. NÃO TEM nada em resource, a não ser ícones, bitmaps, e o manifest. José M. C. Quintas Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 30 Report Share Posted April 30 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. Quote Link to comment Share on other sites More sharing options...
JoséQuintas Posted April 30 Author Report Share Posted April 30 Não é mistureba. Tá aqui enxugado: DEFINE WINDOW xDlg FROM nRow, nCol TO nRow + nHeight, nCol + nWidth PIXEL TITLE cTitle ICON "ICOWINDOW" ACTIVATE WINDOW xDlg CENTERED Como fazer isso funcionar como MODAL José M. C. Quintas Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 30 Report Share Posted April 30 C:\FWH..\SAMPLES\TESTMDI*.PRG tudo o que o senhor precisa, tem no \samples. Regards, saludos. Quote Link to comment Share on other sites More sharing options...
JoséQuintas Posted April 30 Author Report Share Posted April 30 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 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 30 Report Share Posted April 30 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. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 30 Report Share Posted April 30 // 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 Quote Link to comment Share on other sites More sharing options...
mkyx Posted April 30 Report Share Posted April 30 Bom dia, o comando DEFINE WINDOW - ACTIVATE WINDOW, não tem a opções MODAL ou NO MODAL Só o comando DEFINE DIALOG - ACTIVATE DIALOG, disponibiliza a opção MODAL ou NO MODAL Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 1 Report Share Posted May 1 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.