PDA

Ver la Versión Completa : Como hacer una lista de temas....


Delphius
15-10-2004, 16:34:43
Hola a todos!
Tal vez lo que pregunte sea una tontera, pero a mi me esta sacandos canas!:
Tengo un reproductor de mp3 y quisiera que la playlist se vea como en el Winap, algo como:
001 Artista - Tema mm:ss
002 Artista - Tema mm:ss

De que manera lo puedo hacer?... habrá un componente que permita darle ese diseño?
Probe con un TMemo y TListBox nada!:confused:

mamcx
15-10-2004, 17:16:24
Un grid?

O darte una pasaita por www.torry.net o www.tmssoftware.com. Tambien de mi blog recuerdo este software, que tiene controles estilo WinAmp: http://www.anwod.com/lus/pdelphiscript.htm

Delphius
26-10-2004, 05:42:30
Disculpa, pero en dichos sitios no encuentro lo que deseo... no se si soy yo el medio bestia que no encuentro nada... pero hasta el momento no encuentro algo que se adapte a lo que quiero...

roman
26-10-2004, 16:21:26
Hola a todos!
Tal vez lo que pregunte sea una tontera

A ver si mi pregunta no es más tonta.

¿Qué te impide poner una cadena como

001 Artista - Tema mm:ss

en un ListBox?

// Saludos

Delphius
26-10-2004, 20:44:19
Roman, no es que me lo impida... se hacerlo pero no de la manera que quiero...
En el Winamp una playlist se ve de esta forma:
001 Artista1 - Tema1 mm:ss
002 Artista2 - Tema2 mm:ss
....
00n Artistan - Teman mm:ss

Y la verdad es que no encuentro manera de que los números correspondientes a los temas queden alineados a la izquierda, que la duración a la derecha... ¿Me explico?

roman
26-10-2004, 20:54:43
que los números correspondientes a los temas queden alineados a la izquierda, que la duración a la derecha

Bueno, es que tal como pones el ejemplo de listado estos detalles no quedan claros.

Si quieres que el listado en general se vea exactamente como el del WinAmp supongo que lo mejor será conseguirte algún componente como te comenta mamcx.

Pero para lograr este tipo de alineamientos yo usaría un TListView con estilo vsReport. En la primera columna pondría el número de tema, en la segunda el tema en sí y en la tercera la duración. Las columnas de un TListView tienen la propiedad Align que te permite alinear el texto.

Ajustando los colores de fondo y de fuente, ocultando los encabezados y poniendo RowSelect en true, yo creo que queda bastante parecido- que no igual -a lo que quieres.

// Saludos

Delphius
05-11-2004, 20:58:59
Roman, probe de tu manera, pero la verdad es que a pesar de en cuanto a estética si queda bien... pero el componente TreeView no me da la funcionalidad que posee o me facilita el ListBox, pero he aqui que en cuanto a estética el ListBox no es bueno.
Y como no encuentro un componente que me permita hacer lo que deseo, voy a recurrir a crearlo yo. Pero tengo una duda: ¿Cómo puedo programar las alineaciones para que se vean como en el Winamp?...

roman
05-11-2004, 21:07:45
pero el componente TreeView no me da la funcionalidad que posee o me facilita el ListBox

:eek: Esto sí me sorprende. ¿Qué tipo de funcionalidad deseas? ¿Qué hace un ListBox que no pueda hacer un ListView? Cuéntame y quizá haya solución.

// Saludos

Delphius
05-11-2004, 22:00:14
Pues, una facilidad que me brinda es la posibilidad de abrir un archivo (en este caso una playlist) rápidamente gracias al LoadFromFile().... además, permitiría agregar y eliminar un tema de forma mas fàcil (Add) y no tan engorroso como lo debo hacer con el TreeView (Add item, sub items), he inclusive me permitiría grabar el contenido... por ahora son esas...
Me explico?

diegofhernando
05-11-2004, 22:00:59
Q tal... hmm como le veo amigo Delphius kizas no estas usando el componente q te sugirio Roman... veo q en tu ultima respuesta dices TreeView y Roman te sugiere un ListView... aki va algo de codigo de como puedes usar el ListView con 2 columnas... lo pongo solo por si acaso :p


procedure tmiform.creaitem;
var
miItem: TListItem;
begin
with MyListView do
begin
item:= items.add;
item.caption:= 'nombre del tema' ;
item.subitems.add('10:00');
end
end;


seria cuestion de repetir esto para cada item. Parto del echo q ya insertaste el ListView (MyListView) y q tienes su propiedad ViewStyle = vsReport. No olvides crear las columnas para los items (2 clicks sobre el ListView). Bien creo q con eso seria.

Salu2 :cool:

roman
05-11-2004, 22:33:41
Claro que será un poco más de trabajo programar un ListView que un ListBox pero se compensa con creces con lo que ganas. Por ejemplo, seguro querrás que tus usuarios puedan ordenar la lista por artista, duración, género, título, etc., simplemente dando click sobre la columna correpondiente. O bien dar la opción de búsqueda por cualquier columna, o mostrar algún icono informativo para cada item, etc., etc., etc. Si a esto le juntas lo del diseño, creo que de hecho es más fácil con el ListView que con el ListBox ¿no?

Claro que puedes programar tu propia componente pero en tal caso partir de un ListView me parece buena idea.
// Saludos

Delphius
06-11-2004, 04:14:39
diegofhernando disculpa, si estuve usando el componente indicado... lo que pasa es que en el foro me equivoque de nombre. Además el código que tu expusiste es lo que quiero evitar...
Roman, no te discuto que esa son funcionalidades bastantes buenas, pero a lo que voy ... (y creo que es muy importante para el usuario) es que al ejecutar la aplicación instantáneamente aparezca el contenido de la playlist. En un ListBox esto se logra de manera muy sencilla: ListBox1.Items.LoadFromFile(), en donde supongamos que paso como parámetro un arhivo Mp3PlayList.tag en donde tengo ya los datos.
Si usara el ListView no podría hacer esto, con lo que debería hacer un código LeerPlaylist() en donde debería leer línea por línea y determinar cada uno de los datos a almacenar en cada columna. Y esto, en cuestión de tiempo es un bochorno. ¡Un usuario que poseea una lista ,digamos razonablemente 200 temas, no va a esperar que le aparezcan los resultados en gotitas; desea resultados ya!
¿Entiendes mi punto de vista?.
Si tengo en cuenta esto, el ListBox me viene de 100. Claro está, que a la hora de agregarle temas, el ListBox no es el indicado.
Si tienes una idea lo bastante buena como para que con el ListView pueda abrir un archivo, te la agradecería.

roman
06-11-2004, 07:51:15
¡Un usuario que poseea una lista ,digamos razonablemente 200 temas, no va a esperar que le aparezcan los resultados en gotitas; desea resultados ya!

Bueno pero...

¿qué te hace pensar que el tiempo extra que te tome programar LeerPlaylist() se reflejará en la velocidad con que se cargue el ListView?

Te aseguro que el usuario no se percatará de la diferencia. Más aún, ¿te has fijado en cómo se comporta un ListBox con muchos ítems? Llega un momento en que el desplazamiento se hace lento, pausando un poco en cada cambio de página.

Por otra parte no alcanzo a ver cómo almacenas los datos en el archivo que carga el LiisBox. ¿Cómo separas los campos? ¿Cómo editas o agregas entradas?

Ahora bien, ¿has pensado en usar ClientDataSets? Con ellos puedes almacenar las listas de canciones como si fuera una base de datos pero sin necesidad de un motor de bd. La conveniencia es que tienes a tu disposición todos los controles DBAware para agregar/editar canciones de una lista incluyendo un DBGrid que te cagará en automático la lista tan pronto abras el data set.

Incluso puedes usar un ClientDataSet para alimentar a un ListView. Aunque pierdes la potencia de los controles DBAware para el listado, es sencillo programar la rutina para cargarlo y sigue siendo rápido. ncluso si manejas listas realmente grandes, puedes usar el ListView en modo virtual con lo que los datos se muestran ipso-facto.

En fin, creo que tienes alternativas mucho mejores que un ListBox.

// Saludos

Lepe
06-11-2004, 14:05:31
La solución que yo propongo no tiene nada que ver con lo dicho hasta ahora, y es Simplista al máximo, pero en determinadas ocasiones me ha dado buen resultado.

Poner una fuente no proporcional (Courier o Courier New) y ajustar los espacios simplemente con una rutina que añada espacios o ceros. PadRight y PadLeft de las Rxlibs van muy bien para ese propósito.

No seas muy duro conmigo Delphius, sé que no es la solución óptima. ;) Simplemente dí que no te interesa esta solución :D

Saludos

mamcx
06-11-2004, 15:39:14
Estas mezclando cosas... El control ListView se usa en el explorer y otros programas y se desempeña bien...otra cosa es que de un poco mas de lata para programar... Ahora, como son las cosas:

- Haces el truco de fuentes
- Usas el listview
- Consigues un control de terceros (que con el tiempo que lleva el thread ya hubieras evaluado! si te fijaste en el link?)

Si necesitas la mas brutal velocidad al cargar arboles/listas, necesitas un arbol/lista brutal, como http://www.delphi-gems.com/VirtualTreeview/VT.php pero requiere mas codigo (eso si: Mas velocidad es IMPOSIBLE!) Ademas este control se transforma a cualquier cosas, incluso grids...

roman
06-11-2004, 19:07:14
Si necesitas la mas brutal velocidad al cargar arboles/listas, necesitas un arbol/lista brutal, como http://www.delphi-gems.com/VirtualTreeview/VT.php pero requiere mas codigo (eso si: Mas velocidad es IMPOSIBLE!) Ademas este control se transforma a cualquier cosas, incluso grids...
Ciertamente en cuestión de presentación el VirtualTreeView es insuperable. Pero difiero un poco en lo de la velocidad. Es decir, sí que es rápido, pero un ListView en modo virtual es igual de rápido y creo que para lo que se requiere basta y sobra. Primero porque la virtualidad es necesaria sólo para cantidades verdaderamente grandes de datos- y 200 canciones o incluso 500 no lo son, y segundo porque la programación del VirtualTreeView es más compleja.

Por otra parte, tampoco deshecharía los ClientDataSets tan rápido. :p

// Saludos

Delphius
16-11-2004, 20:37:56
Listo el pollo!... logré lo que tanto queria y con el ListBox.
Realicé un procedimiento que lee linea por linea un archivo de registros en donde guardo toda info de los temas... ha decir verdad quede maravillado con la velocidad de reación de dicho algoritmo, nunca pensé que fuera tan rápido.
Para lograr ese "ordenamiento" lo que hago es "rellenar" con espacios en blanco hasta que sea necesario...
Gracias a todos por su ayuda...