FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Combobox con marca visual de obligatoriedad
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 10:26 AM
Hola,

Quisiera que en un Combobox, cuando no tenga nada seleccionado, se pinte un triangulito significando "obligatorio seleccionar"
Le estaba metiendo mano a la clase Combobox pero no hay manera.


Esta caracteristica ya la tengo en Get y se ve asi:


Alguna idea ? Gracias
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 11:57 AM

Paco,

Es un combobox editable ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 12:52 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 02:16 PM
Antonio Linares wrote: Paco,

Es un combobox editable ?
Antonio,

No es editable.

[ACTUALIZADO] Ya parece que me van saliendo cositas. Ahora despues informo mejor
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 02:32 PM

Paquito, se me ocurren varias posibilidades

La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )

Dime qué te parece

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: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 03:19 PM
cnavarro wrote: Paquito, se me ocurren varias posibilidades
La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece
Gracias Cristóbal. Acabo de ver tu comentario. 17:19.
Ya me pinta el triangulito. Creo que con unos pocos ajustes tengo el temo. voy a ver. Ahora despues informaré
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 03:54 PM
Paco, como lo has hecho ?

Aqui tienes una primera prueba pero funciona a medias:
#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "Item 1"

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "Item 1", "Item 2", "Item 3" }

    __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ;

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL

static function Display()    

   local Self := QSelf() 

   FillRect( ::GetDC(), { 0, 0, 23, 23 }, TBrush():New( , CLR_RED ):hBrush )
   ::ReleaseDC()

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 08:44 AM
Finalmente no he podido/ sabido. Por el camino me he dado cuenta que es algo que me supera y ya desisto.
Unicamente conseguí mostrar el triangulito fuera del combobox

Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 11:15 AM
Refinalmente el chapu del siglo. Metido como un item con un bitmap triangulito. Aparte hay que dar soporte al VALID para no soportar este item extra como seleccion no valida. Ademas supone obligatoriedad fija, es decir, no puede estar en un codeblock.



Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 02:20 PM
Paquito, al hilo de lo que ha hecho Antonio, mira este codigo ( en lugar del box, puedes pintar el bitmap o lo que consideres )
Quedo a tu disposicion si necesitas mas ayuda
#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

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: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 04:07 PM
cnavarro wrote: Paquito, al hilo de lo que ha hecho Antonio, mira este codigo ( en lugar del box, puedes pintar el bitmap o lo que consideres )
Quedo a tu disposicion si necesitas mas ayuda
#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil
Gracias Cristobal, pero me temo que no vale. Se trataría de pintar dentro del combobox que es lo complicado. Fuera ya pude pintar el triangulo. Más arriba puse un ejemplo.
Esto es lo que me pinta con tu ejemplo:
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 04:27 PM
Vale Cristóbal, no había entendido tu solución. Disculpa

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 04:56 PM
paquitohm wrote: Vale Cristóbal, no había entendido tu solución. Disculpa

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D
Si, esa era mi intencion con la solucion que te propuse, pero cuando tenga un rato miro de poner el bitmap dentro del combo, ya como tema de I+D
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: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 05:10 PM
Cristóbal,

Recién veo que se me confunde un poco con la marca de focus del Get que consiste tambien en un recuadro rojo alrededor del get.

Pero de momento lo dejo asi. Quiza será cuestion de que busque otra marca o de que cambie el rojo de focus del get por un azul, pongamos por caso.


Gracias
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Combobox con marca visual de obligatoriedad
Posted: Fri Apr 25, 2025 06:33 PM
De momento lo dejo asi, con un poco de naranja y sin recuadro cuando tenga contenido