PDA

Ver la Versión Completa : Sombreado Columna ListView


Igna
05-11-2004, 12:46:29
Hola.

Estoy intentando hacer un ListView que cambie de color la columna que clickeo.

el código es más o menos así:


procedure TMLListView.SetLVColumnShading(ColIdx: Integer);
var
indice:integer;
begin
if IndiceCampo=PosCamPrin then
indice:=0
else
if IndiceCampo<=PosCamPrin then
indice:=(IndiceCampo-PosCamPrin)*(-1)
else
indice:=IndiceCampo;
if indice = ColIdx then
Canvas.Brush.Color :=ColorFondo
else
Canvas.Brush.Color := ColorToRGB(Color);
end;

procedure TMLListView.MLCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
SetLVColumnShading(0);
end;

procedure TMLListView.MLCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
if subitem>0 then
SetLVColumnShading(subitem);
end;



IndiceCampo es un entero donde guardo la posición (no el index) de la columna clickeada. PosCamPrin es la posición (de nuevo no tiene por que coincidir con el index) de la columna del campo principal (el que tiene los items).

Este trozo de código lo que hace es sacar el index de la columna con posición=IndiceCampo:


if IndiceCampo=PosCamPrin then
indice:=0
else
if IndiceCampo<=PosCamPrin then
indice:=(IndiceCampo-PosCamPrin)*(-1)
else
indice:=IndiceCampo;


El problema es que cuando yo cambio de posición una columna, no se modifica su column.index, por lo que tengo que hacer la conversión de arriba.

El caso es que si la columna principal, está en la posición 0, me funciona sin problemas, pero si está en otra posición se me desajusta todo. Para cargar las columnas las leo de un .ini, por lo que puede que la columna principal no esté en la posición 0.

Bueno, espero haber explicado más o menos bien mi problema.

Un saludo, y gracias.