
¿Es posible hacer un while en un listbox?
#21
Escrito 06 agosto 2009 - 07:25
Saludos!
#22
Escrito 06 agosto 2009 - 07:28
Amigo enecumene, si usas los breackpoint para saber la posición del listbox en tiempo de ejecución ¿como te pasa los valores?.
Saludos!



Salud OS
#23
Escrito 06 agosto 2009 - 07:33
Amigo enecumene, si usas los breackpoint para saber la posición del listbox en tiempo de ejecución ¿como te pasa los valores?.
Saludos!
![]()
![]()
enecumene lo conoce como TRACE jejejeje
Salud OS
Ahh bueno...


Saludos!
#24
Escrito 06 agosto 2009 - 08:06
de:
Inc(i);
A:
i := grLista.ItemIndex + 1;
y lo que me hace es repetir la canción donde le doy el doble click por la cantidad de items en el listbox

#25
Escrito 07 agosto 2009 - 06:40

procedure TForm1.grListaDblClick(Sender: TObject); var Longitud: DWORD; Minutos, Segundos: WORD; Frq: Single; Frecuencia,FinalPos,Bitrate: DWORD; Canales: BASS_CHANNELINFO; i,x,npos: integer; begin x := grLista.count -1; i := grLista.ItemIndex; //cambio while i <= x do begin ObtenerObjeto(grLista.Items.IndexOf(grLista.Items[i])); //aquí estaba el problema if Not FileExists(Ruta) then begin ShowMessage('Este archivo no existe o fue movido de sitio.'); end else begin BASS_StreamFree(Channel); Channel := BASS_StreamCreateFile(False, PChar(Ruta), 0, 0, 0); Volumen := TrackBar1.Position; BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_MUSIC_VOL_CHAN,Volumen); if BASS_ChannelPlay(Channel, False) then begin // Mostramos la duración de la cancion Tiempo := BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel, BASS_POS_BYTE)); Longitud := BASS_ChannelGetLength(Channel, BASS_POS_BYTE); Gauge1.MaxValue := Longitud; Minutos := Round(Tiempo) div 60; Segundos := Round(Tiempo) - (Minutos * 60); lbTimeTotal.Caption := '/ '+format('%.*d',[2,Minutos])+':'+format('%.*d',[2,Segundos]); //Sacamos la Frecuencia de la Canción BASS_ChannelGetAttribute(Channel,BASS_ATTRIB_FREQ,frq); Frecuencia := Trunc(frq); lbFreq.Caption := 'Khz: '+IntToStr(Frecuencia); //sacamos el Bitrate FinalPos := BASS_StreamGetFilePosition(Channel, BASS_FILEPOS_END); Bitrate := Trunc(FinalPos / (125 * Tiempo) + 0.5); lbBitrate.Caption := 'Kbps: '+IntToStr(Bitrate); //Sacamos el tipo de canal Mono o Stereo BASS_ChannelGetInfo(Channel,Canales); case Canales.chans of 1 : lbChannels.Caption := 'Mono'; 2 : lbChannels.Caption := 'Stereo'; end; //mostramos la información de la canción (ID3 Tags) lbTitulo.Caption := TAGS_Read(Channel, '%TITL'); lbArtista.Caption := TAGS_Read(Channel, '%ARTI'); lbAlbum.Caption := TAGS_Read(Channel, '%ALBM'); lbAno.Caption := TAGS_Read(Channel, '%YEAR'); lbGenero.Caption := TAGS_Read(Channel, '%GNRE'); lbrate.Caption := lbFreq.Caption+' Khz'; lbCalidad.Caption := lbBitrate.Caption+' Kbps'; lbBPM.Caption := TAGS_Read(Channel, '%TBPM'); lbSize.Caption := TAGS_Read(Channel, '%TSIZ'); tmPosition.Enabled := True; TimerVis.Enabled := True; while BASS_ChannelIsActive(Channel)= BASS_ACTIVE_PLAYING do begin Application.ProcessMessages; // Eliminé el Refresh porque realizaba un efecto desagradable así que no era necesario end; i := i + 1; //cambio end ELSE i := i + 1; //cambio x := grLista.count -1 ; end; end; end;
Gracias a todos

Saludos.
#26
Escrito 09 agosto 2009 - 02:11

procedure TForm1.Button4Click(Sender: TObject); begin BASS_ChannelPause(Channel); end;
Con eso era má que suficiente, pero ahora lo que hace es que al pausar la canción comienza a sonar la siguiente de la lista y así sucesivamente, cosa que no debería de hacer

Saludos.
#27
Escrito 09 agosto 2009 - 02:46
while BASS_ChannelIsActive(Channel)= BASS_ACTIVE_PLAYING do .......... begin Application.ProcessMessages; // Eliminé el Refresh porque realizaba un efecto desagradable así que no era necesario end; i := i + 1; //cambio ...........
Si no puedes detectar con una función que estas en "pause", entonces coloca una variable bandera global en tu función de pausar:
procedure TForm1.Button4Click(Sender: TObject); begin BASS_ChannelPause(Channel); BanderaPause := true; end;
Con esa variable detactas la pausa y en el código de incrementar la canción, evitas el incremento:
while BASS_ChannelIsActive(Channel)= BASS_ACTIVE_PLAYING do .......... begin Application.ProcessMessages; // Eliminé el Refresh porque realizaba un efecto desagradable así que no era necesario end; if BanderaPause <> true then i := i + 1; //cambio ...........
Espero haber acertado.

Saludos.
#28
Escrito 09 agosto 2009 - 03:03

Saludos.
#29
Escrito 09 agosto 2009 - 03:07
Hola escafandra, hice eso que me propones pero lo que me hace es repetir la misma canción en vez de pausarse
.
Saludos.
Sin embargo el cambio es mínimo. ¿Diste el valor false a esa variable como valor de inicio? Al reanudar, tambien habra que colocar la variable a false.

Saludos.
#30
Escrito 09 agosto 2009 - 03:17

Saludos.
#31
Escrito 09 agosto 2009 - 03:59
procedure TForm1.Button4Click(Sender: TObject); var Status: Integer; begin Status := BASS_ChannelIsActive(Channel); for ni := ni to grLista.Count -1 do begin case Status of BASS_ACTIVE_PLAYING : begin BASS_ChannelPause(Channel); end; BASS_ACTIVE_PAUSED : begin BASS_ChannelPlay(Channel,false); end; end; end; end;
Saludos.
#32
Escrito 09 agosto 2009 - 04:01
procedure TForm1.Button4Click(Sender: TObject); begin BanderaPause := true; BASS_ChannelPause(Channel); end;
Y en el bucle haces esto:
while BASS_ChannelIsActive(Channel)= BASS_ACTIVE_PLAYING do .......... begin Application.ProcessMessages; // Eliminé el Refresh porque realizaba un efecto desagradable así que no era necesario end; While(BanderaPause = true) do begin end; Bucle infinito hasta que varie la bandera. i := i + 1; //cambio ...........

Saludos.
#33
Escrito 10 agosto 2009 - 06:55


Lo que he estado haciendo es lo siguiente, éste es el botón de pausar:
procedure TForm1.Button4Click(Sender: TObject); var Status: Integer; begin for ni := ni to ni do begin Status := BASS_ChannelIsActive(Channel); case Status of BASS_ACTIVE_PLAYING : begin BASS_ChannelPause(Channel); end; BASS_ACTIVE_PAUSED : begin BASS_ChannelPlay(Channel,false); end; end; end; end;
Hasta aquí todo va bien, me pausa la canción y al presionar el botón Play ella continua desde la pausa todo bien, puedo pausarla cuantas veces quisiera, pero... ocurre un problema 8-), y es que si en el Listbox hay más de una canción ella no hace ciclo completo, se queda en la canción actual, o sea, ya no hace la continuidad

Por si las moscas aquí dejo el code de Play:
procedure TForm1.Button3Click(Sender: TObject); var Status: DWORD; begin Status := BASS_ChannelIsActive(Channel); case Status of BASS_ACTIVE_STOPPED : begin grListaDblClick(Sender); end; BASS_ACTIVE_PAUSED : begin BASS_ChannelPlay(Channel,false); end; end; end;
Saludos.
#34
Escrito 11 agosto 2009 - 07:07
while (BASS_ChannelIsActive(Channel)= BASS_ACTIVE_PLAYING or BASS_ChannelIsActive(Channel)= BASS_ACTIVE_PAUSED) do .......... begin Application.ProcessMessages; // Eliminé el Refresh porque realizaba un efecto desagradable así que no era necesario end; if BanderaPause <> true then i := i + 1; //cambio ...........

Saludos.
Edito: Se me trabó la sintaxis delphi. :$ Lo arreglo.
#35
Escrito 11 agosto 2009 - 11:47

#36
Escrito 11 agosto 2009 - 04:32



Saludos.