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 

Alinear items TListBox a la derecha

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Alinear items TListBox a la derecha Responder citando

Pues eso mismo, si alguien sabe como hacerlo le estaré agradecido si me lo explica.
Gracias.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

La solución es sencilla. En primer lugar debes cambiar la propiedad Style del TListBox lbOwnerDrawFixed

Código:

void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{
TRect rect(Rect);
if(State.Contains(odSelected))
{
 ListBox1->Canvas->Font->Color = clWhite;
 ListBox1->Canvas->Brush->Color = clNavy;
}
else
{
 ListBox1->Canvas->Font->Color = ListBox1->Font->Color;
 ListBox1->Canvas->Brush->Color = ListBox1->Color;
}
ListBox1->Canvas->FillRect(rect);
DrawText(ListBox1->Canvas->Handle, ListBox1->Items->Strings[Index].c_str(),
ListBox1->Items->Strings[Index].Length(), &rect,
DT_CENTER | DT_VCENTER | DT_SINGLELINE );
}

Esto te daría el texto centrado verticalmente y horizontalmente.

Si quieres cambiar la posición del texto puedes aplicar las combinaciones que hay en la ayuda para la función DrawText. Hay varias combinaciones posibles por eso aquí solo te pongo 2. Por ejemplo:

Centrado Verticalmente y alineado a la derecha
Código:

DrawText(ListBox1->Canvas->Handle, ListBox1->Items->Strings[Index].c_str(),
ListBox1->Items->Strings[Index].Length(), &rect,
DT_RIGHT | DT_VCENTER | DT_SINGLELINE );

Centrado Verticalmente y alineado a la izquierda
Código:

DrawText(ListBox1->Canvas->Handle, ListBox1->Items->Strings[Index].c_str(),
ListBox1->Items->Strings[Index].Length(), &rect,
DT_LEFT | DT_VCENTER | DT_SINGLELINE );


Ya me dirás si te ha funcionado
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas gracias Marky por tu respuesta, ha funcionado a la perfección.
Very Happy .
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola otra vez!!!

En realidad el código se podría simplidicar ya las líneas siguientes no son necesarias:

Código:

else
{
ListBox1->Canvas->Font->Color = ListBox1->Font->Color;
ListBox1->Canvas->Brush->Color = ListBox1->Color;
}

y se podría dejar el código final como:

Código:

TRect rect(Rect);
if(State.Contains(odFocused)) <---Cambiando el "odSelected" por "odFocused"
{
ListBox1->Canvas->Font->Color = clWhite;
ListBox1->Canvas->Brush->Color = clNavy;
}
ListBox1->Canvas->FillRect(rect);
DrawText(ListBox1->Canvas->Handle, ListBox1->Items->Strings[Index].c_str(),
ListBox1->Items->Strings[Index].Length(), &rect,
DT_CENTER | DT_VCENTER | DT_SINGLELINE );


Nos vemos!!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
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.