| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 09 Abr, 2007 1:56 pm Asunto: ListView: Problema de presentación |
|
|
Me está ocurriendo una cosa en las presentación de un ListView
Para que unas líneas se vean en negrilla o no he definido el tipo de letra del ListView como Arial Bold, y en el OnCustomDrawItem del elemento he puesto este código:
| Código: | void __fastcall TfSimula::TotalesCustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
pItem = Item;
Sender->Canvas->Font->Height = -11;
Sender->Canvas->Font->Name = "Arial";
if (pItem->SubItems->Strings[0].Pos("ACUMULADO") == 0 && pItem->SubItems->Strings[0].Pos("ESTIMADO") == 0)
Sender->Canvas->Font->Style = TFontStyles() >> fsBold;
} |
de forma que las dos últimas líneas se muestren en negrilla. Sin embargo, y a pesar de ello, como veis la penúltima no respeta la definición hasta que selecciono la línea y la abandono o minimizo el formulario y los restaura. Se admiten sugerencias _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 09 Abr, 2007 11:40 pm Asunto: |
|
|
Que tal Angel,
Supongo que puede ser porque sólo asignas valores de estilo cuando se cumple la condición. Así que he probado agregando el código necesario cuando no se cumple y el resultado es el esperado (al menos en mis pruebas).
| Código: | FontStyles EstiloNormal, EstiloTotales;
EstiloNormal = Sender->Canvas->Font->Style;
EstiloTotales <<fsBold;
if ( Item->Index == 1 || Item->Index == 2)
Sender->Canvas->Font->Style = EstiloTotales;
else
Sender->Canvas->Font->Style = EstiloNormal; |
En este ejemplo los valores en modo diseño del font del ListView son:
Fuente: Ms Sans Serif
Estilo: Normal
Tamaño: 8
... y según mi ejemplo sólo se pintaran en "negrita" los elementos cuyo índice sean 1 y 2, en caso contrario se pintan con el estilo normal.
Saludos! _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 10 Abr, 2007 9:01 am Asunto: |
|
|
Pues tampoco. Mira lo que hace ahora
Las dos líneas inferiores si las pinta bien, pero ahora me deshace la primera. Y el código lo he dejado así:
Pongo así el código porque, no sé por qué, con las etiquetas normales me hace esto:
 _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mie 11 Abr, 2007 4:29 am Asunto: |
|
|
| Angel escribió: | | Pongo así el código porque, no sé por qué, con las etiquetas normales me hace esto: |
Para evitarlo deshabilita el HTML en el mensaje, ya que al utilizar "<<" se interpreta como HTML. Al final de cada mensaje podemos habilitar o deshabilitar estas opciones.
Con respecto al problema, creo que por default tienes en modo diseño en "negrita" el font del ListView; trata de ponerlo de manera normal y haz el cambio a "negrita" desde el código.
Saludos! _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 12 Abr, 2007 1:18 pm Asunto: |
|
|
Tras muchas pruebas, intentos y demás, encontré la solución de la forma más tonta:
| Código: | void __fastcall TForm1::TotalesCustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
pItem = Item;
Sender->Canvas->Font->Height = -11;
Sender->Canvas->Font->Name = "Arial";
Sender->Canvas->Font->Style = TFontStyles() >> fsBold;
if (pItem->SubItems->Strings[0].Pos("ACUMULADO") != 0 || pItem->SubItems->Strings[0].Pos("ESTIMADO") != 0)
{
Sender->Canvas->Brush->Color = clWhite;
Sender->Canvas->Font->Style = TFontStyles() << fsBold;
}
}
//--------------------------------------------------------------------------- |
Simplemente: repintar el fondo con el color del ListView. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Jue 12 Abr, 2007 3:22 pm Asunto: |
|
|
jejeje, ok me parece perfecto, el fin justifica los medios!!!
Saludos! _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
|