PDA

Ver la Versión Completa : Perdido con el TListView


bustio
30-08-2005, 23:52:56
Hola:
Mi pregunta es bien sencilla, pero no se por que el resultado no me sale. Resulta ser que yo tengo un TListView y un TImageList enlazado al TlistView. Tambien tengo un TSrtingList con elementos varios, que pueden ser SERVIDORES o no(P. Ej: 172.17.42.235 IsServer.... 172.17.42.236 ). A medida que recorro la lista pues en dependencia del tipo que tenga asigno un icono u otro del ImageList y como caption annado el Ip que contiene la lista.
Esta es mi idea... el problema viene dado a que no se como lograrlo!!!

Veane ste codigo y diganme donde esta el error:


procedure Llenar ListView;
var
Cant : Integer;
i : Integer;
Elem : TListItem;
begin
For i := 0 to ListaComputadoras.Count - 1 do
begin
If DeterminaTipo(ListaComputadoras[i]) = Server then
begin
Elem := TListItem.Create(ListView.Items);
Elem.ImageIndex := 2;
Elem.caption := listaComputadoras[i].Text;
ListView.Items.Add(Elem);
end;
end;


{NOTA: Este codigo lo escribo aqui de memoria... no es exacto al que tengo implementado pero si es muy semejante}
Y elresultado es que me inserta la imagen, pero no el texto.

La pregunta en concreto es como puedo annadir un nuevo item en RunTime a un LIstView cambiando su Image y su Caption en dependencia de lo que lea de mi lista???

Fran^^
31-08-2005, 03:17:36
El problema que planteas, se puede resolver de una forma muy sencilla. Basta con declarar una variable de tipo TListItem y seguidamente, añadirlo al ListView.

Puede que este código de ejemplo te sirva:

var
servidor: TListItem;
begin
with ListView do
begin
servidor:=items.add; // Añade el item a la lista
// Aqui puedes asignar las propiedades del elemento
servidor.caption:='prueba';
end;
end;

Si quieres añadir elementos en la misma fila donde has insertado el elemento, solo bastará con emplear la propiedad "subitems.add'.
Espero que te sirva de ayuda.
Saludos!! :)

Ohcan
31-08-2005, 11:30:45
Hola Bustio,

Te paso un código que uso para insertar en los ListViews.
Espero que te ayude.

procedure TwPrincipal.InsertaMsg(ListView:TListView; const Mensaje: String);
begin
//Para insertar mensajes en ListViews
ListView.SmallImages := ListaIconosLv;
ListView.Items.Add;
ListView.Items[ListView.Items.Count-1].Caption := 'ElCaption';
ListView.Items[ListView.Items.Count-1].ImageIndex := 2;
ListView.Items[ListView.Items.Count-1].SubItems.Add('UnSubitem');
ListView.Items[ListView.Items.Count-1].SubItems.Add(Mensaje);
end;

Saludos.

bustio
01-09-2005, 21:19:01
Muchisismas gracias!!!

Con este ultimo mensjae pude resolver mi problema!

delphi.com.ar
01-09-2005, 21:40:43
Te paso un código que uso para insertar en los ListViews.
Espero que te ayude.

procedure TwPrincipal.InsertaMsg(ListView:TListView; const Mensaje: String);
begin
//Para insertar mensajes en ListViews
ListView.SmallImages := ListaIconosLv;
ListView.Items.Add;
ListView.Items[ListView.Items.Count-1].Caption := 'ElCaption';
ListView.Items[ListView.Items.Count-1].ImageIndex := 2;
ListView.Items[ListView.Items.Count-1].SubItems.Add('UnSubitem');
ListView.Items[ListView.Items.Count-1].SubItems.Add(Mensaje);
end;


Lo mismo pero un poquito mas veloz:

procedure TwPrincipal.InsertaMsg(ListView:TListView; const Mensaje: String);
begin
with ListView.Items.Add do
begin
Caption := 'ElCaption';
ImageIndex := 2;
SubItems.Add('UnSubitem');
SubItems.Add(Mensaje);
end;
end;
[/QUOTE]

dec
01-09-2005, 22:03:35
Hola,

Lo que propone Federico no solamente es más veloz (si así es) sino que tiene pleno sentido. Porque cuando se añaden elementos en un "TListView" se hace precisamente eso, se añaden, es decir, no es preciso indicar que el elemento añadido ocupe el último lugar, ya que es así "por defecto".

En caso de quererse insertar elementos en la lista en una posición determinada se cuenta con el método "Insert" de la propiedad "Items" de los "TListView". Puede verse claramente lo que digo en el ejemplo que he preparado mientras Federico escribía el anterior mensaje adelantándose así al mismo ;)

delphi.com.ar
01-09-2005, 22:06:28
...Federico escribía el anterior mensaje adelantándose así al mismo...
Tenemos un problemita nosotros con eso!!... vamos a tener que implementar alguna "aviso de respuesta"!
:D :D :D