Combobox con marca visual de obligatoriedad

paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Combobox con marca visual de obligatoriedad

Post by paquitohm »

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:
Image

Alguna idea ? Gracias
Last edited by paquitohm on Thu Apr 24, 2025 2:17 pm, edited 1 time in total.
User avatar
Antonio Linares
Site Admin
Posts: 42808
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 122 times
Been thanked: 117 times
Contact:

Re: Combobox con marca visual de obligatoriedad

Post by Antonio Linares »

Paco,

Es un combobox editable ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
karinha
Posts: 8041
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 8 times
Contact:

Re: Combobox con marca visual de obligatoriedad

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

Antonio Linares wrote: Thu Apr 24, 2025 11:57 am Paco,

Es un combobox editable ?
Antonio,

No es editable.

[ACTUALIZADO] Ya parece que me van saliendo cositas. Ahora despues informo mejor
Last edited by paquitohm on Thu Apr 24, 2025 3:18 pm, edited 1 time in total.
User avatar
cnavarro
Posts: 6655
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 7 times
Been thanked: 10 times

Re: Combobox con marca visual de obligatoriedad

Post by cnavarro »

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
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

cnavarro wrote: Thu Apr 24, 2025 2: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
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é
User avatar
Antonio Linares
Site Admin
Posts: 42808
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 122 times
Been thanked: 117 times
Contact:

Re: Combobox con marca visual de obligatoriedad

Post by Antonio Linares »

Paco, como lo has hecho ?

Aqui tienes una primera prueba pero funciona a medias:

Code: Select all | Expand

#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
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

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

Image
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

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.



Image
User avatar
cnavarro
Posts: 6655
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 7 times
Been thanked: 10 times

Re: Combobox con marca visual de obligatoriedad

Post by cnavarro »

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

Code: Select all | Expand

#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
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

cnavarro wrote: Fri Apr 25, 2025 2: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

Code: Select all | Expand

#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:
Image
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

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
User avatar
cnavarro
Posts: 6655
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 7 times
Been thanked: 10 times

Re: Combobox con marca visual de obligatoriedad

Post by cnavarro »

paquitohm wrote: Fri Apr 25, 2025 4: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
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
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

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.
Image

Gracias
paquitohm
Posts: 304
Joined: Fri Jan 14, 2022 8:37 am
Been thanked: 2 times

Re: Combobox con marca visual de obligatoriedad

Post by paquitohm »

De momento lo dejo asi, con un poco de naranja y sin recuadro cuando tenga contenido

Image
Post Reply