Ver Mensaje Individual
  #1  
Antiguo 05-11-2004
Igna Igna is offline
Miembro
 
Registrado: jun 2003
Posts: 27
Reputación: 0
Igna Va por buen camino
Sombreado Columna ListView

Hola.

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

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

Código Delphi [-]
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:

Código Delphi [-]
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.
Responder Con Cita