PDA

Ver la Versión Completa : Establecer características de texto en cabecera de un TListView


Ictiandro
06-09-2005, 17:42:45
Hola chicos.
Tengo un problema. Estoy desarrollando una aplicación donde se utiliza un TListView. Este ListView se muestra con una cebecera, es decir ListView.ViewStyle=vsReport. Quisiera saber que es lo que debo hacer para que el texto de la cabecera del ListView tenga características diferentes del resto de las filas (no cabecera) del ListView. Para ser más puntual: El color del texto de la cabecera debe ser azul y tiene que estar en negrita, el resto de las filas deben tener texto color negro y sin negrita.
Gracias de antemano.

roman
06-09-2005, 18:56:17
Hola,

Te iba a remitir a este hilo (http://www.clubdelphi.com/foros/showthread.php?t=23368) pero ¿qué crees? ;)

En el código de ese hilo adapta el método WMNotify así:



procedure TListView.WMNotify(var Msg: TWMNotify);
var
Header: HWnd;
CustomDraw: PNMCustomDraw;
HeaderFont: TFont;

begin
// obtener el identificador del header
Header := Perform(LVM_GETHEADER, 0, 0);

if (Msg.NMHdr.code = NM_CUSTOMDRAW) and (Msg.NMHdr.hwndFrom = Header) then
begin
// estructura de datos con información para el pintado
CustomDraw := PNMCustomDraw(Msg.NMHdr);

case CustomDraw.dwDrawStage of
CDDS_PREPAINT:
// se le dice a Windows que queremos notificaciones para cada item
Msg.Result := CDRF_NOTIFYITEMDRAW;

CDDS_ITEMPREPAINT:
(*
dwItemSpec es el índice del item del encabezado (columna)
que queremos pintar- en este caso 1
*)

if CustomDraw.dwItemSpec = 1 then
begin
HeaderFont := TFont.Create;

try
HeaderFont.Style := [fsBold];
Windows.SelectObject(CustomDraw.hdc, HeaderFont.Handle);
Windows.SetTextColor(CustomDraw.hdc, clBlue);

//Windows.SetBkColor(CustomDraw.hdc, $00FF8080);
finally
HeaderFont.Free;
end;
end;
end;
end;
end;


// Saludos

dec
06-09-2005, 19:26:17
Hola,

:eek: :eek: :eek: :eek: Quiere decirse que yo me quedé con la boca abierta.

Probablemente otros también, por eso añadí más muñequitos . ;)

Ictiandro
06-09-2005, 19:56:28
Otra vez, Muchas gracias Roman. Me haces la vida mas facil :D , espero poder aprender las cosas que sabes para así también poder ayudar a otras personas... Bueno quizas con el tiempo y la practica...

roman
06-09-2005, 20:03:44
Bueno, muchas veces la ayuda no es por las cosas que sé, sino por las cosas que encuentro. Tal es el presente caso y el del mensaje citado. Te soprenderá la cantidad de información que puedes encontrar en sitios como los foros de Borland (http://www.tamaracka.com).

// Saludos

dec
06-09-2005, 20:29:20
Hola,

Bueno. No creo que se trate de hacer la rueda a nadie, así que voy a seguir. Lo que se necesita para encontrar es buscar, esto está claro. Pero uno puede buscar y darse de narices con lo que precisa y no verlo, sencillamente, por aquello que dicen de que el que no sabe es como el que no ve. Esto es tan viejo como el mundo.

¿Cómo va uno a buscar/encontrar algo sin tener ni idea de lo que es? Así pues, sea como fuere, en lo que a mí respecta el que encontraras algo (porque lo buscaste, lo comprendiste y lo supiste implementar) tal que diera la solución a la cuestión que se planteaba no es cosa de poco, no es desdeñable, no, pero todo lo contrario. ;)

¿Y a qué viene esto? ¿A qué decir lo que he dicho? Bueno, ¿y tú, que esto lees, nunca dijiste nada que acaso no viniera muy a cuento? ¿nunca quisiste incluso decir algo que no viniera a cuento en absoluto? ¡Pues no sabes lo que te pierdes! ¡Hay que dar rienda a lo que uno quiere decir! ¡La cosa húmeda no puede estarse quieta a las veces! Y ya he dicho que estudié mecanografía tres años y escribo como por inercia,... y basta.

Francisco Rguez
17-08-2006, 17:43:08
El código funciona perfectamente si los temas de XP no están activos. ¿Hay alguna forma de que funcione así?
Gracias, y propicios días.