Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Componente DBCheckListBox (https://www.clubdelphi.com/foros/showthread.php?t=65806)

GerTorresM 14-01-2010 10:12:41

Componente DBCheckListBox
 
Hola a todos:

La situación de hoy es la siguiente:

en un formulario uso un CheckListBox en el cual cargo una serie de datos que provienen de un Dataset, es decir como ejemplo va lo siguiente:

Pequeños Productos
Medianos Productores
Grandes Productores

A su vez utilizo un segundo CheckListBox que coloco en la parte posterior del primer CheckListBox, allí van los códigos que relacionan la información para mi caso la llave primaria, es decir como ejemplo:

1
5
7

En la medida que voy selecccionando o desmarcando un o varios de los items del primer CheckListBox, sucede lo mismo con el segundo CheckListBox, finalmente en el momento de almacenar los datos hago un barrido del los datos del segundo CheckListBox y guardo la información.

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.?

Para mi caso utilizo Delphi 6 Ver Enterprise.


Gracias de Antemano



gertorresm
Colombia

Neftali [Germán.Estévez] 14-01-2010 12:11:09

Cita:

Empezado por GerTorresM (Mensaje 350699)
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.


La franja horaria es GMT +2. Ahora son las 19:48:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi