PDA

Ver la Versión Completa : ListBox en columnas


gryphus
30-06-2005, 08:09:35
Buenas a todos!
Estoy haciendo un programa en el que, una parte de el, coge una información de una base de datos y la introduce en un list box. Hasta aquí perfecto...
Bien, lo que hago es coger dos datos distintos, pongamos el código y el nombre, y los introduzco en el listbox de esta manera...


CodiInciden:=trim(f4str(d4field(DBPOper,'codigo'))); //Cojo el código de la BD
NomInciden:=trim(f4str(d4field(DBPOper,'descripcio'))); //Cojo el nombre de la BD
FrmCodiIncidencia.ListOpcions.TabWidth :=30; //Tamaño de las columnas
FrmCodiIncidencia.ListOpcions.Items.Add(CodiInciden+ ^I + NomInciden); //Agrego los 2 datos al listbox.
FrmCodiIncidencia.ListOpcions.Columns:=1; //Número de columnas (contando que la primera columna es 0)
rc:=d4skip(DBPOper,1); //La base de datos es CODEBASE :(


De acuerdo, mi duda es, como cojo yo el primer valor de este listbox?? Sólo me sale coger el contenido de toda la linia y eso no me sirve... :(
Pensava que sería de manera que tuviera que poner alguna palabra y luego [0], como si de un array se tratara... voy mal encaminado?
He buscado en la ayuda pero no se encontrarlo... al estar todo en inglés me es bastante más complicado... :p
En fin... gracias de antemano!!

Lepe
30-06-2005, 10:10:40
este hilo te viene al pelo (http://www.clubdelphi.com/foros/showthread.php?t=4559&highlight=addobject)

Saludos

gryphus
30-06-2005, 10:40:26
Gracias por tu respuesta! Pero tengo un problema, entiendo parte del post. Hasta aquí bien, en cuanto nos vamos para destruir y todo el rollo me pierdo... :p
A ver... es totalmente necesario que cree un objecto para hacer esto? O sea, yo antes creaba 2 variables distintas y las ponia en el listbox. Es posible hacerlo sin los objetos?
Cabe decir que de la otra manera lo he medio entendido, o sea que lo mas seguro que acabe usandolo un momento o otro... pero ahora me seria más sencillo (o eso creo :D) hacerlo sin crear una clase de este tipo. Me equivoco de mucho??

Lepe
30-06-2005, 15:08:44
Quedate solo con este mensaje (http://www.clubdelphi.com/foros/showpost.php?p=18157&postcount=4)

La coletilla de roman de destruir los objetos es esto:

procedure Tform1.FormClose(...);
var i:integer;
begin
for i:=0 to combo.items.count-1 do
combo.items.Objects[i].Free;
end;


No tienes que andar con constructores y destructores de ningun tipo jeje. En realidad estas utilizando una clase como si fuera un registro, pero administrando la memoria, es decir, creandolos cuando los necesitas y destruyendolos cuando dejas de usarlos.

Cuando quieras acceder a un elemento, el código exacto para trabajar es:

procedure mio;
var E:TEmpleado;
mivalor:integer;
begin
E:= TEmpleado(combo.items.Objects[i]);
mivalor := E.Numero;
end;

Aqui no tienes que crear ni destruir nada. Se crea cuando vas a meter los elementos en el combo, y lo destruyes.... pues al cerrar la ventana o justo antes de hacer combo.items.Clear;

Por muchas prisas que tengas, te aconsejo que pierdas 10 minutos en ver esto. Es una solución muy potente para todo tipo de situaciones, incluso con la propiedad Tag que tienen todos los controles y que nadie utilizamos al principio. ¡¡ Ya tienes el código y las explicaciones !! y la verdad, es muy simple. :D
w

Un saludo

gryphus
01-07-2005, 08:04:00
Uau! Es verda! Ahora si que lo entiendo! Ok! Grácias. Ahora ya lo he echo y me a funcionado.
La verdad es que al final lo prové con un ListView y ya hacía lo que yo quería, pero estéticament no me gustaba mucho... para lo que tiene que hacer, el listbox me va mejor y me a servido mucho el código.
Thanks! ;)