PDA

Ver la Versión Completa : Ayuda ComboBoxEx


Ge0Ks
26-02-2007, 19:50:44
Hola a todos, primero que nada quiero agradecer a los usuarios por haberme contestado en el thread anterior, ahora me surgio otra duda....
quisiera saber como se puede asociar una imagen al texto que aparece en el comboboxex, por ej, tengo un "hola" y un "chau" y quiero que al lado del "hola" aparesca una imagen de una mano saludando y al lado del "chau" otra mano saludando :D ....

desde ya muchas gracias

dec
27-02-2007, 01:30:38
Hola,

Cuando dices que quieres que aparezca una imagen al lado del "hola", ¿quieres decir que la imagen aparezca al lado del "Combo" o dentro del mismo? Piensa que dilucidar qué imagen mostrar (al lado del "Combo", por ejemplo) puede ser tan sencillo como realizar una comprobación en una condición, o sea, en Delphi:


if Combo.Text = 'Hola' then
// Mostramos la imagen A
else if Combo.Text = 'Chau' then
// Mostramos la imagen B

Marian0
27-02-2007, 04:29:42
la cosa es cómo mostrar la imágen xD

Ge0Ks
27-02-2007, 04:30:20
gracias por contestar pero a lo que yo venia era que queria saber como hacer eso que esta en comentarios o sea como hacer para mostrar la imagen con que metodo se puede realizar esto :D

dec
27-02-2007, 04:34:22
Hola,

Bueno. Pero acuérdate de lo que dije antes:


Cuando dices que quieres que aparezca una imagen al lado del "hola", ¿quieres decir que la imagen aparezca al lado del "Combo" o dentro del mismo?


Porque mostrar una imagen al lado del combo consiste en añadir un componente "TImage" y cargar en el mismo la imagen que sea menester...

Ge0Ks
27-02-2007, 04:37:22
si lo que queremos hacer es que al lado de por ejemplo "hola" aparesca una imagen pequeña para facilitar la vista del programa, pero lo que no sabemos es como generar el TImage e insertarlo en el ComboboxEx xD desde ya muchas gracias

roman
27-02-2007, 04:44:52
A ver, el ComboBoxEx tiene, entre sus particularidades, precisamente la de poder colocar imágenes a lado de cada ítem, que es- imagino -a lo que te refieres. Lo único que hay que hacer es poner las imágenes deseadas dentro de una componente ImageList, asociar ésta a la propiedad Images del ComboBoxEx y en el editor de ítemes del combo (propiedad ItemsEx), indicas el índice de la imagen en el ImageList que quieras opupar para cada ítem.

// Saludos

dec
27-02-2007, 04:52:44
Hola,

Ignoro si en C++ Builder cuentas con el componente "ComboBoxEx" (en la pestaña "Win32" de la paleta de componentes), digo, que si cuentas con este componente tal vez te interese usarlo. Es un "ComboBox" con esteroides que entre otras cosas permite asignarle una lista de imágenes ("TImageList") y que cada "item" tenga asociada una por lo menos.

Si no cuentas con el componente "TComboBoxEx"... el caso es que creo que sí que era posible implementar lo que se necesita partiendo de un sencillo "TComboBox", empero, ahora mismo no sabría decirte... creo que en estos mismos Foros Román alguna vez solucionó algo así.

roman
27-02-2007, 04:58:50
Si no cuentas con el componente "TComboBoxEx"

Pero, ¡desde un principio preguntó por este componente!

Ayuda ComboBoxEx

// Saludos

dec
27-02-2007, 05:01:28
Hola,

¡Pues ni me dí cuenta! :D :D

Ahora mismo estaba yo liado con el evento "OnDrawItem" del humilde "ComboBox" (no "Ex") puesto que como se dice en la ayuda:


Write an OnDrawItem event handler to draw the items in the drop-down list of an owner-draw combo box. An OnDrawItem event handler can add graphic elements to the list items, or replace the list item text by graphics.


Je, je, je... ¡A ver si me pongo unas buenas gafas! :)

dec
27-02-2007, 05:10:38
Hola,

Bueno. Pues utilizando un "ComboBox" normal, corriente y moliente, poniendo su estilo a "csOwnerDrawFixed", podemos utilizar su evento "OnDrawItem" más o menos como sigue:


procedure TForm1.ComboBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TComboBox) do
begin
Canvas.FillRect(Rect);

{ Los Items impares tendrán la imagen con index 0 que
se encuentre en el componente "TImageList" que asumimos
}
if Odd(Index) then
ImageList1.Draw(Canvas, 0, Rect.Top, 0)
else
// Los Items pares tendrán la imagen con index 1
ImageList1.Draw(Canvas, 0, Rect.Top, 1);

Canvas.TextOut(Rect.Left+18,Rect.Top,Items[Index]);
end;
end;


Todavía quedaría por retocar algunos detallitos, pero, básicamente eso es. :)

Ge0Ks
27-02-2007, 05:13:46
muchisimas gracias por la respuesta :D :D