Combobox con marca visual de obligatoriedad
Posted: Thu Apr 24, 2025 10:26 am
www.FiveTechSoft.com
https://fivetechsupport.com/forums/
Antonio,
Gracias Cristóbal. Acabo de ver tu comentario. 17:19.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
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
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.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 ayudaCode: 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
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+Dpaquitohm 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 !![]()