FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Combobox (DropDown) no procesa correctamente el Valid
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Combobox (DropDown) no procesa correctamente el Valid
Posted: Mon Sep 17, 2018 09:30 AM
En este ejemplo, creando un COMBOBOX desde código fuente se procesa correctamente el Valid al salir del control, en cambio desde recursos no es así.

Esto funciona OK
Code (fw): Select all Collapse
#include "fivewin.ch"
Function Main()
local oDlg, cCombo := "2", cGet:=Space(10)
   local aItems := { "1", "2", "3" }
   DEFINE DIALOG oDlg FROM 2, 2 TO 18, 60 TITLE "Combo" STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )
   @ 1, 2 GET cGet
   @ 2, 2 COMBOBOX cCombo ITEMS aItems SIZE 200, 100 VALID (MsgInfo("Hola"),.t.)
   ACTIVATE DIALOG oDlg CENTERED
 Return (nil)


Este ejemplo (combos.prg del samples) no funciona correctamente

Code (fw): Select all Collapse
// Showing the use of different styles of ComboBoxes controls
#include "FiveWin.ch"
#include "Combos.ch"
//----------------------------------------------------------------------------//
function Main()
   local oDlg, oSay
   local oCbx1, oCbx2, oCbx3
   local cItem1, cItem2 := "One", cItem3, cItem4 := "None"
   SET _3DLOOK ON
   // SkinButtons()
   DEFINE DIALOG oDlg RESOURCE "Combos"
   REDEFINE COMBOBOX oCbx1 VAR cItem1 ITEMS { "Uno", "Dos", "Tres" } ;
      ID ID_SIMPLE OF oDlg ;
      ON CHANGE ( cItem4 := cItem1, oSay:Refresh() );
      VALID (MsgInfo("valid"), cItem4 := cItem1, oSay:Refresh(), .t. )
  
   REDEFINE COMBOBOX oCbx2 VAR cItem2 ITEMS { "One", "Two", "Three" } ;
      ID ID_DROPDOWN OF oDlg ;
      STYLE CBS_DROPDOWN ;
      ON CHANGE ( cItem4 := cItem2, oSay:Refresh() ) ;
      VALID ( If( ! oCbx2:Find( oCbx2:oGet:GetText() ),;
                  oCbx2:Add( oCbx2:oGet:GetText() ),), .t. )
                 
   oCbx2:oGet:bKeyDown = { | nKey | SearchItem( nKey, oCbx2 ) }
                 
   REDEFINE COMBOBOX oCbx3 VAR cItem3 ITEMS { "One", "Two", "Three" } ;
      ID ID_DROPDOWNLIST OF oDlg ;
      ON CHANGE ( cItem4 := cItem3, oSay:Refresh() ) ;
      VALID ( cItem4 := cItem3, oSay:Refresh(), .t. )
   REDEFINE SAY oSay PROMPT cItem4 ID ID_SELECTION OF oDlg COLOR "R+/W"
   ACTIVATE DIALOG oDlg CENTERED
return nil
//----------------------------------------------------------------------------//
function SearchItem( nKey, oCbx )
   local nAt
   if Len( AllTrim( oCbx:oGet:GetText() ) ) == 1
      if ( nAt := AScan( oCbx:aItems, { | c | Left( c, 1 ) == AllTrim( oCbx:oGet:GetText() ) } ) ) != 0
         oCbx:oGet:SetText( oCbx:aItems[ nAt ] )
         return 0
      endif
   endif
  
return nKey         
//----------------------------------------------------------------------------//
procedure AppSys
return
//----------------------------------------------------------------------------//


Lo que ocurre es que ejecuta el valid al recibir el foco y no al salir como debería ser.
¿Alguna pista?
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 555
Joined: Wed Jul 31, 2013 01:14 PM
Re: Combobox (DropDown) no procesa correctamente el Valid
Posted: Mon Sep 17, 2018 07:24 PM

Hola Angel, prueba así por favor.

cCombo:bValid:= {|| MsgInfo( "Hola") , .t.}
o
cCombo:bLostFocus := .......
Espero te funcione.
Saludos

Dario Fernandez

FWH 2501, Harbour, MVS2022 Community, MySql & MariaDB, Dbf/Cdx VSCode.

Maldonado - Uruguay
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Combobox (DropDown) no procesa correctamente el Valid
Posted: Mon Sep 17, 2018 09:27 PM
D.Fernandez wrote:Hola Angel, prueba así por favor.

cCombo:= {|| MsgInfo( "Hola") , .t.}
o
cCombo:bLostFocus := .......
Espero te funcione.
Saludos


Ya lo probé, pero sin éxito, gracias.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Combobox (DropDown) no procesa correctamente el Valid
Posted: Tue Sep 18, 2018 01:10 PM
Code (fw): Select all Collapse
   @ 2, 2 COMBOBOX cCombo ITEMS aItems SIZE 200, 100 ;
          STYLE CBS_DROPDOWN                         ;
          VALID (MsgInfo("Hola"),.t.)
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Combobox (DropDown) no procesa correctamente el Valid
Posted: Tue Sep 18, 2018 02:03 PM
karinha wrote:
Code (fw): Select all Collapse
   @ 2, 2 COMBOBOX cCombo ITEMS aItems SIZE 200, 100 ;
          STYLE CBS_DROPDOWN                         ;
          VALID (MsgInfo("Hola"),.t.)


Gracias Joao, cuando no funciona es con el REDEFINE que es como lo necesito :-) :-)
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Combobox (DropDown) no procesa correctamente el Valid
Posted: Tue Sep 18, 2018 02:35 PM
// SAMPLES\COMBOS.PRG - Modificado. 18/09/2018 - kapiabafwh@gmail.com

Code (fw): Select all Collapse
// Showing the use of different styles of ComboBoxes controls

#include "FiveWin.ch"
#include "Combos.ch"

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oSay
   local oCbx1, oCbx2, oCbx3
   local cItem1, cItem2 := "                  ", cItem3, cItem4 := "None"
   local aItems := { "D-3200 D3100",;
                     "D-3200W/18 D3100W",;
                     "D-7000W/18 D3200",;
                     "D-90 D-3200",;
                     "D3100 D-3200W/18",; 
                     "D3100W D5100",;
                     "D3200 D5200",; 
                     "D5100 D7000",;
                     "D5200 D7000W/18",; 
                     "D7000 D90",;
                     "D90 D-90" }

   SET _3DLOOK ON

   // SkinButtons()

   DEFINE DIALOG oDlg RESOURCE "Combos"

   REDEFINE COMBOBOX oCbx1 VAR cItem1 ITEMS { "One", "Two", "Three" } ;
      ID ID_SIMPLE OF oDlg ;
      ON CHANGE ( cItem4 := cItem1, oSay:Refresh(), oCbx1:Refresh() ) ;
      VALID ( cItem4 := cItem1, oSay:Refresh(), oCbx1:Refresh(), .t. )
      
   REDEFINE COMBOBOX oCbx2 VAR cItem2 ITEMS aItems ;
      ID ID_DROPDOWN OF oDlg ;
      STYLE CBS_DROPDOWN ;
      ON CHANGE ( cItem4 := cItem2, oSay:Refresh(), oCbx2:Refresh() ) ;
      VALID ( If( ! oCbx2:Find( oCbx2:oGet:GetText() ),;
                  oCbx2:Add( oCbx2:oGet:GetText() ),), oCbx2:Refresh(), .t. )
                  
   REDEFINE COMBOBOX oCbx3 VAR cItem3 ITEMS { "One", "Two", "Three" } ;
      ID ID_DROPDOWNLIST OF oDlg ;
      ON CHANGE ( cItem4 := cItem3, oSay:Refresh(), oCbx3:Refresh() ) ;
      VALID ( cItem4 := cItem3, oSay:Refresh(), oCbx3:Refresh(), .t. )

   REDEFINE SAY oSay PROMPT cItem4 ID ID_SELECTION OF oDlg COLOR "R+/W"

   ACTIVATE DIALOG oDlg CENTERED

return nil

//----------------------------------------------------------------------------//


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Combobox (DropDown) no procesa correctamente el Valid
Posted: Tue Sep 18, 2018 08:18 PM
Si pones un Msginfo en el Valid verás que salta cuando recibe el foco, no así cuando se sale del control que sería lo lógico.

Code (fw): Select all Collapse
REDEFINE COMBOBOX oCbx2 VAR cItem2 ITEMS aItems ;
      ID ID_DROPDOWN OF oDlg ;
      STYLE CBS_DROPDOWN ;
      ON CHANGE ( cItem4 := cItem2, oSay:Refresh(), oCbx2:Refresh() ) ;
      VALID ( If( ! oCbx2:Find( oCbx2:oGet:GetText() ),;
                  oCbx2:Add( oCbx2:oGet:GetText() ),), oCbx2:Refresh(), MSGINFO ('HOLA'), .t. )
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Combobox (DropDown) no procesa correctamente el Valid
Posted: Wed Sep 26, 2018 09:09 AM
Bueno, solucionado, cuando se trata de un CBS_DROPDOWN el valid hay que ponerlo en el GET del combo, así :

Code (fw): Select all Collapse
oCbx2:oGet:bValid:={|| Msginfo ('valid'), .T.}
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4

Continue the discussion