Breno Posted February 1 Report Share Posted February 1 Bom dia meus caros. Estou enfrentando um possivel bug na classe combobox. (ou na classe MENU) E uma dialog, costumo colocal menus ( ODLG:SETMENU(menu_nodialogo(odlg) ) . Quando faço isso, a clausula ON CHANGE em todos os controles COMBOBOX do dialog não funcionam. Se eu não coloco o menu no dialog, tudo funciona perfeitamente. Em versão antiga do fw, não acontece esse problema. Alguem já passou por isso ? Fwh 13.07 - xhb 1.2.3 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1 Report Share Posted February 1 Boa tarde, não entendi "bulhufas", sempre que possível, ponha um exemplo ou DEMO. veja se ajuda nestes exemplos: https://forums.fivetechsupport.com/viewtopic.php?f=6&t=40236 abs. Regards, saludos. Quote Link to comment Share on other sites More sharing options...
Breno Posted February 1 Author Report Share Posted February 1 Ola Kabiaba. Obrigado pela atenção. Certo, falhei . Segue abaixo um exemplo. Repare nas duas opções ACTIVATE do dialog. (estão comentadas) O problema é: Não consigo fazer o change do combobox funcionar, se monto o menu do dialog. Se quiser testar, coloque teste prg em algum programa seu . Testei aqui e repete o mal funcionamento (sem erro) TESTECOMBO.prg Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1 Report Share Posted February 1 Mesma lógica, vista por outro prisma. [code] // C:\FWH\SAMPLES\TESTCMB3.PRG #Include 'FiveWin.ch' #Include "Constant.ch" STATIC oBar FUNCTION Main() LOCAL oDlg, oDbf, oFont, oBold LOCAL cOrder := "", oCbx, cTitle LOCAL nBottom := 27.2 LOCAL nRight := 89 LOCAL nWd := Max( nRight * DLG_CHARPIX_W, 180 ) LOCAL nHt := nBottom * DLG_CHARPIX_H cTitle := "COMBOBOX by kapiabafwh@gmail.com" oFont := TFont():New( "Tahoma", 0, 14,, ) oBold := TFont():New( "Tahoma", 0, 14,, .T. ) // DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL TITLE cTitle DEFINE DIALOG oDlg SIZE 350, 400 PIXEL TRUEPIXEL FONT oFont ; COLOR CLR_BLACK, RGB( 245, 245, 235 ) TITLE cTitle ; STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ; WS_MINIMIZEBOX) oDlg:lHelpIcon := .F. @ 120, 50 COMBOBOX oCbx VAR cOrder SIZE 100, 400 PIXEL OF oDlg ; ITEMS { "item1", "item2", "item3" } ; ON CHANGE msgalert( "combobox mudou: " ) ; HEIGHTGET 20 STYLE CBS_DROPDOWN ACTIVATE DIALOG oDlg CENTER ; ON INIT ( Btnbar( oBar, oDlg ) ) oFont:End() oBold:End() RETURN NIL FUNCTION Btnbar( oBar, oDlg ) LOCAL aBtnBar aBtnBar := Array( 6 ) DEFINE BUTTONBAR oBar OF oDlg SIZE 50, 50 TOP NOBORDER 2007 DEFINE BUTTON aBtnBar[ 1 ] OF oBar PROMPT "New" ACTION MsgInfo() DEFINE BUTTON aBtnBar[ 2 ] OF oBar PROMPT "Modify" ACTION MsgInfo() DEFINE BUTTON aBtnBar[ 3 ] OF oBar PROMPT "Duplicate" ACTION MsgInfo() DEFINE BUTTON aBtnBar[ 4 ] OF oBar PROMPT "Del" ACTION MsgInfo() DEFINE BUTTON aBtnBar[ 5 ] OF oBar PROMPT "Print" ACTION MsgInfo() DEFINE BUTTON aBtnBar[ 6 ] OF oBar PROMPT "Exit" ACTION( oDlg:End() ) RETURN( oBar ) // FIN / END - kapiabafwg@gmail.com [/code] Regards, saludos. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1 Report Share Posted February 1 Seu COMBOBOX funcionando perfeito. // C:\FWH\SAMPLES\TESTECMB.PRG #Include "FiveWin.ch" FUNCTION TESTECOMBO() LOCAL oDlg, cOrder := "", oCbx, cTitle cTitle := "COMBOBOX MODIFICADO by kapiabafwh@gmail.com" DEFINE DIALOG oDlg SIZE 600, 400 TITLE cTitle oDlg:lHelpIcon := .F. @ 15, 20 COMBOBOX oCbx VAR cOrder SIZE 100, 400 PIXEL OF oDlg ; ITEMS { "item1", "item2", "item3" } ; ON CHANGE msgalert( "combobox mudou: " ) ; HEIGHTGET 20 STYLE CBS_DROPDOWNLIST ACTIVATE DIALOG oDlg CENTERED ; ON INIT( oDlg:SetMenu( Monta_Menu( oDlg ) ) ) RETURN NIL FUNCTION Monta_Menu( oDlg ) LOCAL oMenu // monta o menu no dialogo MENU oMenu MENUITEM " &INSERE AQUI" OF oMenu ; ACTION msgalert( "insere" ) MENUITEM " &APAGA AQUI " OF oMenu ; ACTION msgalert( "apaga" ) MENUITEM "&SAIDA AQUI " OF oMenu ; ACTION( oDlg:End() ) ENDMENU RETURN( oMenu ) // FIN / END - kapiabafwh@gmail.com Quote Link to comment Share on other sites More sharing options...
Rogerio Figueira Posted February 1 Report Share Posted February 1 Breno, se a sua versão do FW é a 13.07 provavelmente é bug da classe combobox, na época quando atualizei o meu FW (ainda estou no 14.02) tive que passar a usar a classe combobox anterior e até hoje continuo assim, infelizmente não deu ainda para atualizar o FW. Saludos. Quote Link to comment Share on other sites More sharing options...
Breno Posted February 1 Author Report Share Posted February 1 Beleza Garoto. Muito obrigado Seu primeiro exemplo (com buttonbar) funcionou legal. Mas o segundo (com menutem) não. Compilei diretamente seu exemplo. Nâo deu nenhum erro, mas não funcionou o change Acrecito que há alguma diferença de versão. ( O meu fivewin é o 13.07, e o seu ?) Se puder dispobinilizar seu fonte da classe combobox e da classe menu para eu compilar aqui e ´tentar matar a charada', eu agradeceria. Grato demais Abçs Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 2 Report Share Posted February 2 Não funciona com FWH1307, melhor é você atualizar sua versão junto ao Gilmer: gilmer@fivewin.com.br // DropDown ComboBoxes #include "FiveWin.ch" STATIC oDlg function Main() local oCbx local cText := " " DEFINE DIALOG oDlg FROM 10, 10 TO 20, 50 ; TITLE "DropDown ComboBox Test" // NAO FUNCIONA COM FWH1307 - MELHOR ATUALIZAR VERSÃO. @ 3.5, 1 COMBOBOX oCbx VAR cText STYLE CBS_DROPDOWN ; ITEMS { "One", "Two", "Three" } ; ON CHANGE oDlg:SetText( cText ) ACTIVATE DIALOG oDlg CENTERED ON INIT( _SetMenu() ) return nil function _SetMenu() local oMenu MENU oMenu MENUITEM "&One" ACTION MsgInfo( "One" ) MENUITEM "&Two" ACTION MsgInfo( "Two" ) ENDMENU oDlg:SetMenu( oMenu ) return nil procedure AppSys // Xbase++ requirement return Abs. Regards, saludos. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 2 Report Share Posted February 2 Mistério do kralho.... kkkkkkkkkkkkkkk O estranho, é que se eu parto de um botão, funciona em FWH1307 sem problemas. // C:\FWH\SAMPLES\TESTECMB.PRG #include "FiveWin.ch" #include "DbCombo.Ch" FUNCTION TESTECOMBO() LOCAL oDlg, cOrder := "", oCbx, cTitle, oButton cTitle := "COMBOBOX MODIFICADO by kapiabafwh@gmail.com" DEFINE DIALOG oDlg SIZE 600, 400 TITLE cTitle oDlg:lHelpIcon := .F. @ 15, 20 COMBOBOX oCbx VAR cOrder SIZE 100, 400 PIXEL OF oDlg ; ITEMS { "item1", "item2", "item3" } ; ON CHANGE msgalert( "combobox mudou: " ) ; STYLE CBS_DROPDOWN UPDATE @ 5, 5 BUTTON oButton PROMPT "Test Character type ItemCode DbCombo" ; ACTION Dialog2() ACTIVATE DIALOG oDlg CENTERED ; ON INIT( oDlg:SetMenu( Monta_Menu( oDlg ) ) ) RETURN NIL // Dialog2 is exaclly the same copy of the above, instead of Numeric Type data in aItems // character Type data is used in aItems FUNCTION Dialog2() LOCAL oDlg2, oCmbCommodity, oCmbItems, oSayCommodityCode, oSayItemCode LOCAL aLstOfCommodities := {}, aCodeOfCommodities := {} LOCAL aLstOfItems := {}, aCodeOfItems := {} LOCAL cCommodityCode, cItemCode // Character data type ItemCode aLstOfCommodities := { "Fruits", "Vegetables" } aCodeOfCommodities := { "25", "35" } // Character type aItem values cCommodityCode := "35" cItemCode := Space( 2 ) DEFINE DIALOG oDlg2 TITLE "Test DBCombo with Character type aItems" FROM 10, 30 TO 30, 100 @1, 25 SAY oSayCommodityCode PROMPT cCommodityCode OF oDLG2 @1, 1 DBCOMBO oCmbCommodity VAR cCommodityCode; ITEMS aCodeOfCommodities ; SIZE 120, 200 ; LIST aLstOfCommodities ; OF oDlg2; ON CHANGE ( SetDbCombo2( cCommodityCode, oCmbItems, @aLstOfItems, @aCodeOfItems, @cItemCode ), ; oSayCommodityCode:SetText( cCommodityCode ), ; oSayItemCode:SetText( cItemCode ) ) ; VALID ( SetDbCombo2( cCommodityCode, oCmbItems, @aLstOfItems, @aCodeOfItems, @cItemCode ), ; oSayCommodityCode:SetText( cCommodityCode ), ; oSayItemCode:SetText( cItemCode ), .T. ) ; UPDATE @3, 25 SAY oSayItemCode PROMPT cItemCode OF oDlg2 @3, 1 DBCOMBO oCmbItems VAR cItemCode; ITEMS aCodeOfItems ; SIZE 120, 200 ; LIST aLstOfItems; OF oDlg2; ON CHANGE( msgalert( "combobox mudou: " ) ) ; UPDATE // ON CHANGE ( oSayItemCode:SetText( cItemCode ) ) ; // UPDATE ACTIVATE DIALOG oDlg2 ; ON INIT Eval( oCmbCommodity:bChange ) RETURN NIL FUNCTION SetDbCombo2( cCommodityCode, oCmbItems, aLstOfItems, aCodeOfItems, cItemCode ) aLstOfItems := {};aCodeOfItems := {} IF cCommodityCode == "25" // Fruits aLstOfItems := { "Apple", "Grapes", "Mango" } aCodeOfItems := { "21", "31", "41" } // Character type aItem values ELSEIF cCommodityCode == "35" // Vegetables aLstOfItems := { "Cucumber", "Potato", "Tomato" } aCodeOfItems := { "51", "61", "71" } // Character type aItem values ENDIF // The sequence of commads are important here. ie The default ItemCode should be assigned only // after calling oCmbItems:SetItems() and then followed by a oCmbItems:refresh() oCmbItems:SetItems( aCodeOfItems, aLstOfItems ) IF cCommodityCode == "25" // Fruits cItemCode := "41" // 3rd Item ie Mango should be the default one on DbCombo ELSEIF cCommodityCode == "35" // Vegetables cItemCode := "61" // 2nd Item ie Potato should be the default one on DbCombo ENDIF oCmbItems:Refresh() RETURN NIL FUNCTION Monta_Menu( oDlg ) LOCAL oMenu // monta o menu no dialogo MENU oMenu MENUITEM " &INSERE AQUI" OF oMenu ; ACTION msgalert( "insere" ) MENUITEM " &APAGA AQUI " OF oMenu ; ACTION msgalert( "apaga" ) MENUITEM "&SAIDA AQUI " OF oMenu ; ACTION( oDlg:End() ) ENDMENU RETURN( oMenu ) // FIN / END - kapiabafwh@gmail.com Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 2 Report Share Posted February 2 A única forma que funciona corretamente, é usando BUTTONBAR com esta versão velha sem modificar a classe. #include "FiveWin.ch" // TIM.PRG modificado. FUNCTION Main() LOCAL oDlg, oFld LOCAL oGet, oCbx LOCAL nVar := 900 LOCAL cVar := "Three" DEFINE DIALOG oDlg SIZE 500, 300 // @ 2, 1 FOLDER oFld ITEMS "One", "Two", "Three" SIZE 240, 95 // @ 10,160 GET oGet VAR nVar PICTURE "999" SIZE 50,20 PIXEL RIGHT OF oBar ; // VALID ( MsgInfo( nVar ), .t. ) @ 30, 40 COMBOBOX oCbx VAR cVar ITEMS { "One", "Two", "Three" } ; SIZE 90, 200 PIXEL OF oDlg ; ON CHANGE( MsgInfo( cVar ), .T. ) UPDATE @ 7.3, 17 BUTTON "Ok" ACTION oDlg:End() ACTIVATE DIALOG oDlg CENTERED ; ON INIT ( BuildBar( oDlg ) ) // ON INIT ( BuildBar( oDlg ), AEval( oFld:aDialogs, { | oDlg | BuildBar( oDlg ) } ) ) RETURN NIL FUNCTION BuildBar( oDlg ) LOCAL oBar DEFINE BUTTONBAR oBar OF oDlg SIZE 40, 40 2007 DEFINE BUTTON OF oBar DEFINE BUTTON OF oBar DEFINE BUTTON OF oBar RETURN NIL Regards, saludos. Quote Link to comment Share on other sites More sharing options...
Breno Posted February 2 Author Report Share Posted February 2 1 hora atrás, kapiaba disse: A única forma que funciona corretamente, é usando BUTTONBAR com esta versão velha sem modificar a classe. #include "FiveWin.ch" // TIM.PRG modificado. FUNCTION Main() LOCAL oDlg, oFld LOCAL oGet, oCbx LOCAL nVar := 900 LOCAL cVar := "Three" DEFINE DIALOG oDlg SIZE 500, 300 // @ 2, 1 FOLDER oFld ITEMS "One", "Two", "Three" SIZE 240, 95 // @ 10,160 GET oGet VAR nVar PICTURE "999" SIZE 50,20 PIXEL RIGHT OF oBar ; // VALID ( MsgInfo( nVar ), .t. ) @ 30, 40 COMBOBOX oCbx VAR cVar ITEMS { "One", "Two", "Three" } ; SIZE 90, 200 PIXEL OF oDlg ; ON CHANGE( MsgInfo( cVar ), .T. ) UPDATE @ 7.3, 17 BUTTON "Ok" ACTION oDlg:End() ACTIVATE DIALOG oDlg CENTERED ; ON INIT ( BuildBar( oDlg ) ) // ON INIT ( BuildBar( oDlg ), AEval( oFld:aDialogs, { | oDlg | BuildBar( oDlg ) } ) ) RETURN NIL FUNCTION BuildBar( oDlg ) LOCAL oBar DEFINE BUTTONBAR oBar OF oDlg SIZE 40, 40 2007 DEFINE BUTTON OF oBar DEFINE BUTTON OF oBar DEFINE BUTTON OF oBar RETURN NIL Regards, saludos. 20 horas atrás, Rogerio Figueira disse: Breno, se a sua versão do FW é a 13.07 provavelmente é bug da classe combobox, na época quando atualizei o meu FW (ainda estou no 14.02) tive que passar a usar a classe combobox anterior e até hoje continuo assim, infelizmente não deu ainda para atualizar o FW. Saludos. Grato Rogério. Pedi pro Kabiaba as classes da versão dele para decifrar o mistério. Mas de qualquer forma já resolveu meu problema urgente com o primeiro exemplo dele ( Com buttonbar). Mas se vc puder me mandar essas duas classes que funcionaram com vc, agradeceria. Abçs Quote Link to comment Share on other sites More sharing options...
Breno Posted February 2 Author Report Share Posted February 2 Pois é Kabiaba...poem mistério nisso...kkk Não sei se o problema é na classe combobox ou na classe menu (que esculhemba a combobox ) da 13.07. Vc viu que se usar a combo numa dialog sem menu, funciona. E tem mais....outros métodos da classe combo tb não funcionam em dialogs com menu tipo menuitem. Vou tentar arranjar essas duas classes de outra versão para recompilar e ver se mato a charada. No momento vou aproveitar teu exemplo e usar o ButtomBar. É o jeito. Agradeço a valiosa ajuda. Quote Link to comment Share on other sites More sharing options...
Rogerio Figueira Posted February 3 Report Share Posted February 3 9 horas atrás, Breno disse: Grato Rogério. Pedi pro Kabiaba as classes da versão dele para decifrar o mistério. Mas de qualquer forma já resolveu meu problema urgente com o primeiro exemplo dele ( Com buttonbar). Mas se vc puder me mandar essas duas classes que funcionaram com vc, agradeceria. Abçs Breno, eu já não lembro mais qual era o bug da classe da versão em uso, mas teve comentários lá no fórum e eu passei a utilizar esta que funcionou e funciona até hoje. Tbm uso BUTTONBAR sem problemas. Segue a classe. COMBOBOX.PRG Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 3 Report Share Posted February 3 Rogério, eu acho que não vai funcionar. Quote Link to comment Share on other sites More sharing options...
Breno Posted February 5 Author Report Share Posted February 5 Rogerio. O Kabiaba está certo. Não funcionou. Na minha opinião, o bug não está na classe COMBOBOX e sim na classe menu. Pois quando a classe menu não é usada, o combobox funciona 100 %. Sei la ..!! 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.