Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Alinear Texto del ComboBox

Existe alguna forma de alinear los items de un ComboBox??
Siempre estan alineados a la izquierda, habra forma de centrarlos?

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 05-03-2008 a las 09:07:41.
Responder Con Cita
  #2  
Antiguo 04-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Buena pregunta.
Como cargas los items?
Tienes en cuenta que depende del tamaño de cada item asi se desplazara, siempre a la derecha?
Saludos
Responder Con Cita
  #3  
Antiguo 04-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Código Delphi [-]
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
 with (Control as TComboBox) do
  begin
   Canvas.FillRect(Rect);
   SetTextAlign(Canvas.Handle, TA_RIGHT);
   Canvas.TextOut(Rect.Right - 4, Rect.Top, Items[Index]);
  end;
end;

0j0: Style = csOwnerDrawFixed
Responder Con Cita
  #4  
Antiguo 05-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
Código Delphi [-]procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TComboBox) do
begin
Canvas.FillRect(Rect);
SetTextAlign(Canvas.Handle, TA_RIGHT);
Canvas.TextOut(Rect.Right - 4, Rect.Top, Items[Index]);
end;
end;




0j0: Style = csOwnerDrawFixed

Esto esta perfecto, para Izquierda o derecha, pero como puedo centrarlos?

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 05-03-2008 a las 09:08:20.
Responder Con Cita
  #5  
Antiguo 05-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por mamu Ver Mensaje
Esto esta perfecto, para Izquierda o derecha, pero como puedo centrarlos?

Saludos
A ver, sentido común.....
  1. TA_RIGHT
  2. TA_LEFT
  3. TA_TOP
  4. TA......

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 05-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
A ver, sentido común.....
  1. TA_RIGHT
  2. TA_LEFT
  3. TA_TOP
  4. TA......
Salud OS
Je. Se supone que si vuelvo a preguntar es porque al probar el procedimiento y usar el sentido común intentando con:

1. TA_CENTER
2. TA_MIDDLE
3. TA_CLIENT

en ninguno de los casos me funciona, me lo toma como TA_RIGHT o TA_LEFT

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 05-03-2008 a las 09:08:29.
Responder Con Cita
  #7  
Antiguo 05-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para mi, como soy novato, me parece que tiene que ver con la numeración que se le de a la posición.
Siempre tomara la posición aportada por cuan separado de los bordes este.
He probado el codigo y efectivamente centra, pero dependiendo de la posicion que se le de, ya que toma en cuenta el tamaño del texto.
Saludos
PD: Fenomenal el codigo, cHackAll, tipico de ti.
Responder Con Cita
  #8  
Antiguo 05-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Para mi, como soy novato, me parece que tiene que ver con la numeración que se le de a la posición.
Siempre tomara la posición aportada por cuan separado de los bordes este.
He probado el codigo y efectivamente centra, pero dependiendo de la posicion que se le de, ya que toma en cuenta el tamaño del texto.
Saludos
PD: Fenomenal el codigo, cHackAll, tipico de ti.
Claro, pero ahi esta el punto. No centra, desplaza. Por lo que dos dimenciones de items tendrian que tener diferente desplazamiento.

Saludos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 05-03-2008 a las 09:08:37.
Responder Con Cita
  #9  
Antiguo 05-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Cita:
Empezado por mamu Ver Mensaje
Claro, pero ahi esta el punto. No centra, desplaza.
De vez en cuando es bueno leerse la documentación.

Cuando pones TA_CENTER el texto sí queda centrado, pero respecto del punto de referencia. En el ejemplo de cHackAll, el punto de referencia es (Rect.Right - 4, Rect.Top), es decir, casi el borde derecho, lo cual está bien para un alineamiento a la derecha. Usando TA_CENTER y el borde derecho como centro, el efecto es que la mitad derecha del texto desaparece (queda "fuera" del combo).

Así pues, viendo el ejemplo que te ofrecieron, y leyendo la documentación, hubieras captado que como punto de referencia debes tomar el centro del rectángulo que te pasan:

(Rect.Left + Rect.Right) div 2

Bye
Responder Con Cita
  #10  
Antiguo 05-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
De vez en cuando es bueno leerse la documentación.

Cuando pones TA_CENTER el texto sí queda centrado, pero respecto del punto de referencia. En el ejemplo de cHackAll, el punto de referencia es (Rect.Right - 4, Rect.Top), es decir, casi el borde derecho, lo cual está bien para un alineamiento a la derecha. Usando TA_CENTER y el borde derecho como centro, el efecto es que la mitad derecha del texto desaparece (queda "fuera" del combo).

Así pues, viendo el ejemplo que te ofrecieron, y leyendo la documentación, hubieras captado que como punto de referencia debes tomar el centro del rectángulo que te pasan:

(Rect.Left + Rect.Right) div 2

Bye
Ok, lo que no entiendo es la afirmación de leer la documentación, porque no viene al caso.
Y vuelvo a repetir, no centra, solamente desplaza, por lo que el centrado es solo horizontal, probe de todo para el vertical y este no centra.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #11  
Antiguo 05-03-2008
Avatar de PeterPunk
PeterPunk PeterPunk is offline
Miembro
 
Registrado: ene 2008
Ubicación: Vigo
Posts: 22
Poder: 0
PeterPunk Va por buen camino
Cita:
Empezado por mamu Ver Mensaje
probe de todo para el vertical y este no centra.
Pero con TextOut le indicas la posición X e Y donde está el texto por lo que ahí sí que podrías centrar:
Código Delphi [-]
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TComboBox) do
    begin
      Canvas.FillRect(Rect);
      SetTextAlign(Canvas.Handle, TA_CENTER);
      Canvas.TextOut(Rect.Right div 2, Rect.Top + (ItemHeight + Font.Height) div 2, Items[Index]);
    end;
end;
De todas formas ésto sólo sirve si cambias el tamaño de la fuente y/o de los items del combobox dejándolos descompesados y lo cierto es que no entiendo la utilidad de esto.
Por ejemplo usar una letra de tamaño 8 y un ComboBox.ItemHeight de valor 30

Saludos.
Responder Con Cita
  #12  
Antiguo 05-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Será que entendemos cosas distintas por "centrado":



Bye
Responder Con Cita
  #13  
Antiguo 05-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
Será que entendemos cosas distintas por "centrado":



Bye
por casualidad probaste la variacion que dejo PeterPunk?
Responder Con Cita
  #14  
Antiguo 05-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
por casualidad probaste la variacion que dejo PeterPunk?
¿Por qué lo preguntas? Mi comentario iba dirigido a mamu quien insiste en que no centra.

Bye
Responder Con Cita
  #15  
Antiguo 05-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
ooops, me perdí
Responder Con Cita
  #16  
Antiguo 05-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
¿Por qué lo preguntas? Mi comentario iba dirigido a mamu quien insiste en que no centra.

Bye

pero no era insistencia, es solo que no me funcionaba de ninguna forma. Logre que me funcionara usando el JvComboBox, ya que el standad de delphi no me lo permite, el porque? no tengo idea, seguramente algun archivo corrupto.

SOLUCIONADO
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #17  
Antiguo 01-03-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 28
Poder: 0
michal Va por buen camino
En verdad lo centra

Pero hay un detalle, la propiedad Style puesta en csOwnerDrawFixed anula la propiedad Text del propio ComboBox, restandole un poco de estética.

Generalmente se usa algo así ComboBox1.Text := '-- Seleccione --'; y luego al desplegar del ComboBox aparece la lista. Lo intenté con las otras variantes de Style pero ni modo.

Alguna Solución que no implique ponerle un TLabel encima ??
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Alinear campos en un select (comboBox). mcalmanovici PHP 3 21-09-2007 06:45:35
alinear texto en el pdf dimitri PHP 2 23-05-2007 18:28:01
Alinear texto a la derecha luxus OOP 5 07-03-2007 01:53:00
Alinear Texto en un TEdit luxus Varios 1 19-07-2006 18:59:55
Alinear Texto a la Derecha sierraja Varios 7 16-06-2005 23:58:45


La franja horaria es GMT +2. Ahora son las 00:12:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi