Ver Mensaje Individual
  #2  
Antiguo 14-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.442
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por GerTorresM Ver Mensaje
Mi pregunta es la siguiente ¿ Existe algún componente de uso libre que me permita mostrar los datos de mi dataset tan como lo hago con el primer CheckListBox, pero que si mostarme me guarde su vez los datos de llave primaria como lo hago con el segundo CheckListBox.?
Hay una forma sencilla de hacerlo con el propio TCheckListBox, que alguna vez hemos comentado aquí para usarla con controles y componentes similares (que uilizan TStrings).

La propiedad Items del TCheckListBox es un TStrings, que es donde guardas las cadenas. El TStrings tiene un propiedad Object que está pensada para que puedas guardar un objeto cualquiera, asociado a cada cadena del TStrings. De esta forma cada elemento de la lista puede tener asociado cualquier cosa. Puedes crear un objeto, un record,...

Esa propiedad es un Puntero, con el que tú puedes apuntar a lo que quieras.

En mi caso, lo que he hecho alguna vez, es utilizar ese puntero, no para almacenar objetos, sino para almacenar números (teniendo el cuenta que el tipo que alamacena el puntero es numérico).

De esta forma puedes asociar a ese puntero un número utilizando algo así:

(1) Coloca un TCheckListBox en un formulario.
(2) Rellena unas cuuantas cadenas.
(3) en el evento OnShow coloca esto (para rellenar un número a cada cadena)

Código Delphi [-]
var
  i:Integer;
begin
  for i := 0 to (CheckListBox1.Items.Count - 1) do begin
    // Añadir un entero
    CheckListBox1.Items.Objects[i] := Pointer(i * 100);
  end;

Con esto tenemos todas las cadenas con un número asociado (0, 100, 200, 300,...)

(4) En el OnClick del TCheckListBox coloca lo siguiente para comprobar cómo se accede a cada número.

Código Delphi [-]
var
  index:integer;
  PInteger: ^Integer;
  Valor:Integer;
begin
  // Seleccionado
  index := CheckListBox1.ItemIndex;
  // Accedo al valor
  PInteger := Pointer(CheckListBox1.Items.Objects[Index]);
  Valor := Integer(PInteger);

  MessageDlg('Este elemento tiene asociiado el valor: ' + IntToStr(Valor), mtInformation, [mbOK], 0);

Si el numero que debes almacenar (clave) cumple con que se pueda almacenar en un tipo Pointer, esto te puede servir y es bastante sencillo.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita