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 17-12-2010
emme_juegos emme_juegos is offline
Registrado
NULL
 
Registrado: dic 2010
Posts: 3
Poder: 0
emme_juegos Va por buen camino
ComboBoxEx y ImageList

hola de nuevo!

necesito, si es que hay, un codigo para que cada item del comboboxex obtenga una imagen de un imagelist

yo he intentado con esto:

Código Delphi [-]
ComboBoxEx1.ItemsEx.ComboItems.ImageIndex:=FormBaseDeDatos.ImageList1. (y ahora no se como seguir)



quiero saber si se puede asi es mas facil y te ahorras mucho trabajo... necesito 193 items!!

chau y gracias!!
Responder Con Cita
  #2  
Antiguo 17-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Te pongo un ejemplo para cargar un TComboBoxEx desde un TImageList, y también un TComboBox como alternativa:
Código Delphi [-]
...
{ Cargar ComboBoxEx y ComboBox }
procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to ImageList1.Count -1 do
  begin
    // Cargar TComboBoxEx 
    ComboBoxEx1.ItemsEx.AddItem('Item '+IntToStr(i), i, i, 0, 0, nil)
   // Cargar TComboBox 
    ComboBox1.Items.Add('Item '+IntToStr(i));
  end;
end;

{ Mostrar imágen + Item en el TComboBox }
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; 
                                   Rect: TRect; State: TOwnerDrawState);
begin
  // Rellenar el area
  ComboBox1.Canvas.FillRect(Rect);
  // Dibujar la imágen actual
  ImageList1.Draw(ComboBox1.Canvas, Rect.Left, Rect.top,Index);
  // Dibujar imágen y texto
  ComboBox1.Canvas.TextOut(Rect.left + ImageList1.Width+2, Rect.top, ComboBox1.Items[Index]);
end;
...

Saludos.

Última edición por ecfisa fecha: 17-12-2010 a las 08:52:21.
Responder Con Cita
  #3  
Antiguo 17-12-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por emme_juegos Ver Mensaje
necesito, si es que hay, un codigo para que cada item del comboboxex obtenga una imagen de un imagelist
...
Si te estoy entendiendo bien lo que pretendes hacer, pues para tener los item del ComboBoxEx con las imagenes de un ImageList, no necesitas codificar nada, simplemente debes enganchar la propiedad Images del ComboBoxEx con tu componente ImageList y posteriormente ir a la propiedad ItemEx del ComboBoxEx y crear todos los item (TComboExItems) que veas necesario mostrar, por supuesto cada Item (TComboExItems) que crees debes engancharle su respectiva imagen atravez de su propiedad ImageIndex
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #4  
Antiguo 08-05-2011
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 102
Poder: 14
FENIXadr Va por buen camino
Hola ecfisa...
Probé el código que publicaste pero he tenido algunos prblemas...

en primer lugar quiero comentarte que estoy haciendo una lista desplegable con los drives de la PC y quiería colocarle el dibujito del drive para que estéticamente quedara mejor, opté por un ComboBoxEx, pero la función AddItem me agrega un renglón en balnco, o sea que se despliega una lista con la cantidad de renglones acorde a la cantidad de drives, pero sin mostrar ningun nombre ni imagen, lo mismo sucede si quiero agregar un nombre sin imagen con la funcion Add.
Éstas funciones son muy transparentes y se supone que deberían funcionar sin tener que activar ninguna bandera o algo asi antes de usarlas.. no se.. no le encuentro lógica a este problema.

Después de renegar un rato me decidí por el ComboBox común y he aquí que surge otro problema... NUNCA y no se porque pero NUNCA entra al evento OnDrawItem, por lo tanto me muestra los drives, pero no las imagenes, acá la funcion Add (que la uso igual que en el ComboBoxEx) si funciona correctamente..


Que es lo que puede estar pasndo???

desde ya muchas gracias...
Responder Con Cita
  #5  
Antiguo 08-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
NUNCA y no se porque pero NUNCA entra al evento OnDrawItem, por lo tanto me muestra los drives, pero no las imagenes

Que es lo que puede estar pasndo???
Hola FENIXadr.

El evento OnDrawItem sólo funciona si el ComboBox tiene la propiedad Style en csOwnerDrawFixed o en csOwnerDrawVariable.

.csOwnerDrawFixed: Cada item tendrá la altura especificada en la propiedad ItemHeight.
.csOwnerDrawVariable: Cada item puede tener alturas diferentes.


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 09-05-2011
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 102
Poder: 14
FENIXadr Va por buen camino
ok.. gracias...

pregunto... si yo tengo asignado en el evento OnClick de un TTreeView un procedimiento del Form1 (definido por el usuario) y en tiempo de ejecucion cambio este procedimiento (en el constructor del componente), como hago para no perder el anterior?? o sea yo quiero recalcular las carpetas al presionar el boton sobre el TTreeView pero quiero que el usuario no pierda el procedimiento que definió en el IDE.. me explico??...

he probado definiendo una variable del tipo procedure pero cuando la llamo me da una excepción.. seguramente le asigno mal la direccion de memoria..

desde ya muchas gracias

(perdón si no está totalmente dentro del hilo la pregunta...)
Responder Con Cita
  #7  
Antiguo 09-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
(perdón si no está totalmente dentro del hilo la pregunta...)
En realidad lo que corresponde es que habras un nuevo hilo para una nueva pregunta, está claramente expuesto en el punto 8 de la guía de estilo .



No entiendo muy bién la situación, pero una posible solución es crear una variable privada al form de tipo TNotifyEvent, a la que asígnes el evento que querés recuperar luego, asignes el nuevo envento y luego al salir del form lo restaures:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    procedure FormShow(Sender: TObject);
    procedure TreeView1Click(Sender: TObject);
  private
    FNotifyEvent: TNotifyEvent;
  public
  end;
...
implementation
...
procedure TForm1.FormShow(Sender: TObject);
begin
  FNotifyEvent:= TreeView1Click;  // guarda el evento
end;

procedure TForm1.TreeView1Click(Sender: TObject);
begin
   // Evento definido en el form
end;

...
// Creación del objeto que cambia el evento
...

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  TreeView1.OnClick:= FNotifyEvent; // restaura el evento
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-05-2011 a las 13:59:27.
Responder Con Cita
  #8  
Antiguo 09-05-2011
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 102
Poder: 14
FENIXadr Va por buen camino
sisisisi.. mil disculps por lo del nuevo hilo... supuse que la respuesta era rapida y por eso lo pregunté... se que no es lo debido.. mil disculpas...

Con respecto a la respuesta.. está clarísimo.. yo definía una variable como procedure por eso me daba error .. tenía que definirla comoTNotifyEvent.. ahora si funciona...
Cuando se hace click en el TreeView para cambiar de carpeta, primero se actualiza y después llama al evento OnClick que definió el usuario... (en este caso es para mostrar la ruta completa en un TLabel.)

Muchísimas gracias...

PD: se que existe el componente ShellTreeView que hace todo esto y mejor que yo.. pero necesito hacerlo de esata manera en este caso...

saludos..
Responder Con Cita
  #9  
Antiguo 28-06-2011
Avatar de Chichero
Chichero Chichero is offline
Miembro
 
Registrado: dic 2007
Ubicación: Venezuela
Posts: 22
Poder: 0
Chichero Va por buen camino
CASE de "tal" strings en combobox da ciertas varibles reales

Mi problema es que no he visto soluciones para casos de strings en combobox...Tengo varias ciudades las cuales tienen valores diferentes para unas variables, ejemplo:

Caracas A=20, B=25, C=38

Valencia A=39, B=50, C=60

Maracaibo A=42, B= 28, C=55

que con esas variables luego hare ciertas operaciones y presentare resultados, se que debo trabajar con la selectiva multiple CASE y bueno creo que debo definir una variable string que proceda de la opcion seleccionada en el combobox...quisiera que me ayudaran con la codificacion; más o menos esquematizando lo que quiero y la codificación que hize (pero el programa no corre, no sé cuál es el error:
Código Delphi [-]
procedure

TForm1.BitBtn1Click(Sender:TObject);

Var A,B,C:real;
City:String

begin
City:=String(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
CASE City OF
'Caracas': A:=20;
B:=25;
C:=38;
'Valencia': A:=39;
B:=50;
C:=60;
'Maracaibo': A:=42;
B:=28;
C:=55;
ELSE
Showmessage('No Seleccionó Ciudad');
end;
.
.Hago las lineas de operaciones
.

end;

Última edición por ecfisa fecha: 28-06-2011 a las 15:43:42. Razón: ETIQUETAS [DELPHI] [/DELPHI]
Responder Con Cita
  #10  
Antiguo 28-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Chichero.

Por favor abrí un nuevo tema para esta pregunta y cuando lo hagas utiliza las etiquetas [delphi] [/delphi] para encerrar el código Delphi que incluyas.
Te aconsejo también leer la guía de estilo .

Saludos y gracias por tu colaboración.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 06-02-2014
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
hola este componente lo estoy usando para cargar las nacionalidades en mi programa, pero antes lo hacia manual...
les explico utilizaba un TImageList donde se alojaba todas las banderas del mundo desde una carpeta y al itemsEx agregaba cada país según su bandera y todo ok...
pero migre muchas cosas a SQLite, para que sea menos pesado y me sirva para futuros proyectos...

mi pregunta es como asigno el nombre del pais y la bandera al TComboBoxEx.
Responder Con Cita
  #12  
Antiguo 07-02-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola cl2raul.

Si las imágenes guardadas en tu base de datos son de tipo Windows bitmap podes hacer:
Código Delphi [-]
...

procedure ResizeBitmap(Bitmap: TBitmap; Width, Height: Integer; Background: TColor);
var
  R: TRect;
  B: TBitmap;
  X, Y: Integer;
begin
  if assigned(Bitmap) then
  begin
    B:= TBitmap.Create;
    try
      if Bitmap.Width > Bitmap.Height then
      begin
        R.Right:= Width;
        R.Bottom:= ((Width * Bitmap.Height) div Bitmap.Width);
        X:= 0;
        Y:= (Height div 2) - (R.Bottom div 2);
      end
      else
      begin
        R.Right:= ((Height * Bitmap.Width) div Bitmap.Height);
        R.Bottom:= Height;
        X:= (Width div 2) - (R.Right div 2);
        Y:= 0;
      end;
      R.Left:= 0;
      R.Top:= 0;
      B.PixelFormat:= Bitmap.PixelFormat;
      B.Width:= Width;
      B.Height:= Height;
      B.Canvas.Brush.Color:= Background;
      B.Canvas.FillRect(B.Canvas.ClipRect);
      B.Canvas.StretchDraw(R, Bitmap);
      Bitmap.Width:= Width;
      Bitmap.Height:= Height;
      Bitmap.Canvas.Brush.Color:= Background;
      Bitmap.Canvas.FillRect(Bitmap.Canvas.ClipRect);
      Bitmap.Canvas.Draw(X, Y, B);
    finally
      B.Free;
    end;
  end;
end;

// Agregar imágenes a ImageList e incorporarlas al ComboBoxEx
procedure TForm1.FormCreate(Sender: TObject);
const
   IMG_X = 64;
   IMG_Y = 32;
var
  BM: TBitmap;
  cc: Integer;
begin
  ImageList1.Width := IMG_X;
  ImageList1.Height:= IMG_Y;
  cc:= 0;
  while not DataSet.Eof do
  begin
    BM:= TBitmap.Create;
    try
      BM.Assign(DataSet.FieldByName('CAMPO_IMAGEN')); 
      ResizeBitmap(BM, IMG_X, IMG_Y, clBtnFace);
      ImageList1.Add(BM, nil);
    finally
      BM.Free;
    end;
    ComboBoxEx1.ItemsEx.AddItem(DataSet.FieldByName('CAMPO_STRING').AsString,cc,0,0,0,nil);
    DataSet.Next;
    Inc(cc);
  end;
  ComboBoxEx1.Images:= ImageList1;
  ComboBoxEx1.ItemIndex := 0;
end;
Si guardaste las imágenes en un tamaño adecuado para ser mostradas en el combo, podes prescindir de la función ResizeBitmap.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 07-02-2014
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
cuando te refieres a Windows bitmap es *.bmp, yo las que tengo son *.ico y *.png de 16x10 pixeles, me pueden servir estas?

quiero q quede mas menos como estas
http://clubdelphi.com/foros/attachme...1&d=1391794262
Imágenes Adjuntas
Tipo de Archivo: jpg Reservación_2.jpg (14,8 KB, 10 visitas)

Última edición por cl2raul fecha: 07-02-2014 a las 18:30:11.
Responder Con Cita
  #14  
Antiguo 07-02-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cl2raul Ver Mensaje
cuando te refieres a Windows bitmap es *.bmp, yo las que tengo son *.ico y *.png de 16x10 pixeles, me pueden servir estas?

quiero q quede mas menos como estas
http://clubdelphi.com/foros/attachme...1&d=1391794262
Hola cl2raul.

Entonces interpreté mal tu consulta, había entendido que ya estaban incorporadas en campos de una tabla de una bd SQLite...

Entonces, en este momento ¿ Donde residen esas imágenes *.ico y *.png ? ¿ Como archivos independientes ? De ser así, vas a encontrar la respuesta leyendo este hilo desde el principio.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 12-02-2014
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
Wink

(Entonces interpreté mal tu consulta, había entendido que ya estaban incorporadas en campos de una tabla de una bd SQLite...)
-si ya estan esos campos uno con los nombres de los países y otro con las imagenes en png

(Entonces, en este momento ¿ Donde residen esas imágenes *.ico y *.png ?)
-como yo lo tenia era, una carpeta con las imagenes donde la almacenaba con el componente TImageList y con el componente TComboBoxEX almacenaba los países y les asignaba su bandera... a esto me referia como (¿ Como archivos independientes ?)

ya entiendes "ecfisa" a que me referia cuando preguntaba si era imprescindible que las imagenes fueran *.bmp
Responder Con Cita
  #16  
Antiguo 12-02-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola cl2raul.

No, no es imprescindible que el formato sea bmp; eso sí, te ahorra conversiones y además componentes como el TDBImage sólo pueden visualizar ese formato.
De todos modos te convendría unificar el formato de las imágenes, es decir, todas .bmp, .jpg, .png, ... o el que decidas. Lo podes realizar con cualquier conversor de imágenes (busca por "image converter free").

Mis preguntas iban orientadas a conocer de que forma tenías las imágenes y como deseabas que quedaran finalmente. Por que se puede cargar el TImageList desde diferentes orígenes de datos como por ejemplo: Archivos de imágenes, archivos de recurso o desde una tabla y cada para cada caso se requiere código diferente.

Y esto último es lo que todavía no me ha quedado muy claro como deseas realizarlo.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
imagelist con Timage??? manueles OOP 3 28-02-2012 13:58:14
Abrir un ComboBoxEx automáticamente afxe Gráficos 4 03-03-2010 20:59:04
Ayuda ComboBoxEx Ge0Ks C++ Builder 11 27-02-2007 05:13:46
Gif con imagelist Ivan_25 .NET 0 24-10-2006 12:44:44
jpg con ImageList??? Patricio Varios 3 06-02-2006 16:51:27


La franja horaria es GMT +2. Ahora son las 21:08:04.


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