Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ajustar ancho del desplegable de un ComboBox (https://www.clubdelphi.com/foros/showthread.php?t=36565)

hector.roma 17-10-2006 00:20:57

Ajustar ancho del desplegable de un ComboBox
 
Hola a todos, y gracias por su ayuda

Tengo unos ComboBoxes con muy poco Width pero conteniendo unos Items que no entran en el Width del ComboBox. ¿Hay alguna forma para que al desplegar el ComboBox, el ancho de lo desplegado se ajuste al item del de mayor tamaño?


Para mayor claridad espero, imaginemos el siguiente ComboBox (recordad, imaginemos):

[____][V] bonito verdad!!, y supongamos que el width del ComboBox, es el que vemos y pensemos en elementos como: "El Conde Dracula", "Demencia 13", "La orgía nocturana de los vampiros", si desplegamos el ComboBox tendríamos algo como

[____][V]
|El Cond|
|Demenci|
|La orgí|
---------


cuando mi intención, y mi pregunta es si me podéis orientar para alcanzar el objetivo de tener un resultado similar a:
[____][V]___________________________
|El Conde Drácula |
|Demencia 13 |
|La orgía nocturna de los vampiros |
------------------------------------



Gracias y espero que mis AsciiComboBox's sean de ayuda.

hector.roma 17-10-2006 00:22:45

Lógica y realmente las paredes del último AsciiComboBox, deberían estar alineadas al de mayor ancho.

Bicho 17-10-2006 09:20:24

Hola, pues si le echas un vistazo a la seccion de trucos puedes encontrarte con éste que lo que hace es modificar el ancho del mismo en tiempo de ejecución.

Espero te sirva,

Saludos

Lepe 17-10-2006 09:46:42

Para saber el ancho que tiene en Pixels según la fuente elegida, pues usa la humilde rutina FontWidth, o bien incluso el Combo1.canvas.TextWidth.

Código Delphi [-]
AnchoDelCombo := Fontwidth(Combo1.Font, Combo1.items[3]);

Para hacer más eficiente el tema, guardar en un .ini, registro, etc, el máximo ancho que hay por el momento; al añadir un texto al combo, se compara el máximo ancho con el ancho del nuevo Item y si es mayor el nuevo, guardarlo en el .ini, así evitamos hacer las comparaciones con todos los elementos cada vez que se despliega el combo.

Saludos

Bicho 17-10-2006 09:50:49

Bueno, he estado entretenido y se me han adelantado, pero he podido hacer un ejemplo que contrasta el truco con lo que comenta Lepe.

Código Delphi [-]
var
  Ancho, x, aux: integer;
begin
  Ancho := 0;
  aux   := 0;
  for x := 0 to ComboBox1.Items.Count - 1 do begin
    aux := Combobox1.Canvas.TextWidth(Combobox1.Items.Strings[x]);
    if aux > Ancho then Ancho := aux;
  end;

  ComboBox1.Perform(CB_SetDroppedWidth,Ancho,0);

Espero te sirva,

Saludos

hector.roma 19-10-2006 00:33:23

Gracias a todos
 
Ciertamente, la sección de trucos siempre es mi gran olvidada y a ella le debo muchas horas ahorradas.

Gracias a todos por recordarme su existencia, y gracias por la ayuda.


La franja horaria es GMT +2. Ahora son las 12:33:38.

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