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

[0] Índice de Mensajes

Ir a la versión completa