Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Alinear Texto del ComboBox (https://www.clubdelphi.com/foros/showthread.php?t=53927)

MaMu 04-03-2008 23:44:51

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

Caral 04-03-2008 23:49:41

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

cHackAll 04-03-2008 23:54:08

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

MaMu 05-03-2008 00:46:01

Cita:

Empezado por cHackAll (Mensaje 270668)
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

egostar 05-03-2008 00:52:42

Cita:

Empezado por mamu (Mensaje 270688)
Esto esta perfecto, para Izquierda o derecha, pero como puedo centrarlos?

Saludos

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

Salud OS

MaMu 05-03-2008 03:11:20

Cita:

Empezado por egostar (Mensaje 270689)
A ver, sentido común.....:rolleyes::rolleyes:
  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

Caral 05-03-2008 03:34:24

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.

MaMu 05-03-2008 06:06:53

Cita:

Empezado por Caral (Mensaje 270736)
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.

keyboy 05-03-2008 07:04:07

Cita:

Empezado por mamu (Mensaje 270752)
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

MaMu 05-03-2008 09:06:50

Cita:

Empezado por keyboy (Mensaje 270754)
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

PeterPunk 05-03-2008 10:42:40

Cita:

Empezado por mamu (Mensaje 270761)
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.

keyboy 05-03-2008 16:45:55

Será que entendemos cosas distintas por "centrado":



Bye

cHackAll 05-03-2008 16:57:55

Cita:

Empezado por keyboy (Mensaje 270855)
Será que entendemos cosas distintas por "centrado":



Bye

por casualidad probaste la variacion que dejo PeterPunk?

keyboy 05-03-2008 17:12:20

Cita:

Empezado por cHackAll (Mensaje 270861)
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

cHackAll 05-03-2008 17:18:06

:p ooops, me perdí

MaMu 05-03-2008 18:59:20

Cita:

Empezado por keyboy (Mensaje 270868)
¿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

michal 01-03-2024 14:00:52

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 ??


La franja horaria es GMT +2. Ahora son las 01:37:26.

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