PDA

Ver la Versión Completa : Color de Label de cada Item en un CheckListBox


LIA_GUILLERMO
14-06-2018, 22:58:03
Buenas tardes, tengo un programa en el cual utilizó un CheckListBox, pero necesito que en tiempo de ejecución el usuario pueda elegir el color del texto de cada ítem del CheckListBox, ya que con ello permitirá a su vez modificar el color de una curva de un componente TChart.

Mi duda, es que propiedad o procedimiento puedo realizar para lograr mi objetivo.


Un cordial saludo y gracias por sus comentarios.:)

Casimiro Notevi
14-06-2018, 23:02:01
A ver si sirve esto (https://clubdelphi.com/foros/showthread.php?t=80473).

ecfisa
15-06-2018, 06:42:06
Hola.

Un ejemplo que te permite seleccionar el color del texto de cada item de un TCheckListBox:

...

type
TForm1 = class(TForm)
CheckListBox1: TCheckListBox;
ColorDialog1: TColorDialog;
btnChangeColor: TButton;
procedure FormCreate(Sender: TObject);
procedure CheckListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure btnChangeColorClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation {$R *.dfm}

// Ajustes iniciales
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Agregamos unos datos al combo ...
for i := 1 to 5 do
CheckListBox1.Items.AddObject('TEXTO ' + IntToStr(i), TObject(clBlack)); // Color font: negro
// Dibujamos ajustados a ItemHeight
CheckListBox1.Style := lbOwnerDrawFixed;
end;

// Dibujamos con el color de font correspondiente
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
clb: TCheckListBox;
begin
clb := CheckListbox1;
clb.Canvas.FillRect(Rect);
clb.Canvas.Font.Color := TColor(clb.Items.Objects[Index]);
clb.Canvas.TextOut(Rect.Left, Rect.Top, clb.Items[Index]);
end;

// Le damos el color de font al item actual
procedure TForm1.btnChangeColorClick(Sender: TObject);
var
clb: TCheckListBox;
begin
clb := CheckListBox1;
if (clb.ItemIndex <> -1) and ColorDialog1.Execute then
begin
clb.Items.Objects[clb.itemIndex] := TObject(ColorDialog1.Color); // asignamos el color
clb.Invalidate;
end;
end;
end.


Resultado:
https://s15.postimg.cc/cpjjofrq3/lia_guillermo.png

Saludos :)