Ir al contenido


Foto

Firemonkey Custom Listbox con Delphi XE2


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 Pau Dominguez

Pau Dominguez

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 17 septiembre 2012 - 09:20

Hola a todos.
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
  1. procedure TfrmCustomList.DoApplyStyleLookup(Sender: TObject);
  2. var
  3.   B: TBitmap;
  4.   Item: TListboxItem;
  5. begin
  6.   Item := TListBoxItem(Sender);
  7.   // create thumbnail
  8.   B := TBitmap.Create(10 + random(50), 10 + random(50));
  9.   B.Clear($FF000000 or TAlphaColor(random($FFFFFF)));
  10.   // use this to set our child controls value - this code use BindingName in style to search
  11.   Item.Binding['image'] := ObjectToVariant(B); // set thumbnail
  12.   Item.Binding['text'] := 'item ' + IntToStr(Item.Index); // set filename
  13.   Item.Binding['resolution'] := IntToStr(B.Width) + 'x' + IntToStr(B.Height) + ' px'; // set size
  14.   Item.Binding['depth'] := '32 bit';
  15.   Item.Binding['visible'] := true; // set Checkbox value
  16.   Item.Binding['visible'] := EventToVariant(DoVisibleChange); // set OnChange value
  17.   Item.Binding['info'] := EventToVariant(DoInfoClick); // set OnClick value
  18.   // free thumbnail
  19.   B.Free;
  20. 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.



  • 0




IP.Board spam blocked by CleanTalk.