Programación General > Delphi
Listbox Degradado
(1/1)
Deiv:
Hola,
Participo por primera vez en el Foro, espero conocer mucha gente por aca y valorar vuestra experiencia en Delphi.
No hace mucho me preguntaba como obtener un color diferente de selección en un ListBox o ComboBox independientemente de aquel que viene por defecto en Windows-Apariencia, pero creo que debería de empezar a preguntar ¿Como puedo crear un rectángulo pequeño CON UN COLOR DEGRADADO y sin borde?, ya que obteniendo esta respuesta quizá lo pueda acomodar a la investigación de modificar la selección que presentan los componentes ListBox o ComboBox y convertirlo en degradado , no se si me estoy liando, pero la finalidad es obtener un ListBox, ComboBox o un Componente Menú tipo del Programa Super Utilities 6.0 con selecciones degradadas al mover el mouse.
Alguna sugerencia?
Un saludo.
Enko:
Primero habría que hacer una funcion que permita hacer degradados de colores sobre un Canvas ya uqe delphi solo tiene para pegar colores Solidos (Creo).
Y lo segundo, bastante más complicado, sería modificar el repintado de alguno de los componentes y crear uno nuevo tipo TDegradadoListBox.
Recien revise el codigo fuente de TListBox......
Este es el procedimiento uqe lo dibuja:
--- Código: Text --- procedure PaintListBox; var DrawItemMsg: TWMDrawItem; MeasureItemMsg: TWMMeasureItem; DrawItemStruct: TDrawItemStruct; MeasureItemStruct: TMeasureItemStruct; R: TRect; Y, I, H, W: Integer; begin { Initialize drawing records } DrawItemMsg.Msg := CN_DRAWITEM; DrawItemMsg.DrawItemStruct := @DrawItemStruct; DrawItemMsg.Ctl := Handle; DrawItemStruct.CtlType := ODT_LISTBOX; DrawItemStruct.itemAction := ODA_DRAWENTIRE; DrawItemStruct.itemState := 0; DrawItemStruct.hDC := Message.DC; DrawItemStruct.CtlID := Handle; DrawItemStruct.hwndItem := Handle; { Intialize measure records } MeasureItemMsg.Msg := CN_MEASUREITEM; MeasureItemMsg.IDCtl := Handle; MeasureItemMsg.MeasureItemStruct := @MeasureItemStruct; MeasureItemStruct.CtlType := ODT_LISTBOX; MeasureItemStruct.CtlID := Handle; { Draw the listbox } Y := 0; I := TopIndex; GetClipBox(Message.DC, R); H := Height; W := Width; while Y < H do begin MeasureItemStruct.itemID := I; if I < Items.Count then MeasureItemStruct.itemData := Longint(Pointer(Items.Objects[I])); MeasureItemStruct.itemWidth := W; MeasureItemStruct.itemHeight := FItemHeight; DrawItemStruct.itemData := MeasureItemStruct.itemData; DrawItemStruct.itemID := I; Dispatch(MeasureItemMsg); DrawItemStruct.rcItem := Rect(0, Y, MeasureItemStruct.itemWidth, Y + Integer(MeasureItemStruct.itemHeight)); Dispatch(DrawItemMsg); Inc(Y, MeasureItemStruct.itemHeight); Inc(I); if I >= Items.Count then break; end; end;
Bienvenido al Foro :hola:
Navegación
Ir a la versión completa