A ver si alguien a trabajado este tema y puede ayudarme.
Resulta que revisando los ejemplo que trae el Delphi XE2 hay uno muy interesante sobre un listbox en el que en cada elemento de la lista puedes incluir un layout con todos los controles que quieras. El ejemplo lo podéis encontrar en la carpeta C:\Users\Public\Documents\RAD Studio\9.0\Samples\FireMonkey\CustomListBox si hacéis una instalación estándar.
En él se ve claramente como personalizar el aspecto de cada elemento del listbox con un layout que puede contener varios controles.
El evento que asigna el contenido a cada ListItem es el siguiente.
delphi
procedure TfrmCustomList.DoApplyStyleLookup(Sender: TObject); var B: TBitmap; Item: TListboxItem; begin Item := TListBoxItem(Sender); // create thumbnail B := TBitmap.Create(10 + random(50), 10 + random(50)); B.Clear($FF000000 or TAlphaColor(random($FFFFFF))); // use this to set our child controls value - this code use BindingName in style to search Item.Binding['image'] := ObjectToVariant(B); // set thumbnail Item.Binding['text'] := 'item ' + IntToStr(Item.Index); // set filename Item.Binding['resolution'] := IntToStr(B.Width) + 'x' + IntToStr(B.Height) + ' px'; // set size Item.Binding['depth'] := '32 bit'; Item.Binding['visible'] := true; // set Checkbox value Item.Binding['visible'] := EventToVariant(DoVisibleChange); // set OnChange value Item.Binding['info'] := EventToVariant(DoInfoClick); // set OnClick value // free thumbnail B.Free; end;
Aquí vemos como carga la imagen en el control Timagen que hay en el layout accediendo a el a través de la propiedad Binding y asignandole el objeto de tipo Timagen que crea en la llamada al evento.
En mi caso concreto necesito rellenar un control de tipo combobox con unos datos que dependen del listitem que estoy mostrando.
En principio entendí que creando un objeto Tcombobox, rellenandolo y asignadolo mediante Item.Binding['miCombo'] := ObjectToVariant(miCombo); el problema estaría solucionado.
Pero resulta que cuando ejecuto la aplicación los combos están vacíos.
¿Alguien sabe cual es el problema y cómo solucionarlo?
Gracias
Pau.