Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

ListView: Problema de presentación

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: ListView: Problema de presentación Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.