Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi BassDllPlayer Proplem mit trackbar (https://www.delphipraxis.net/71430-bassdllplayer-proplem-mit-trackbar.html)

Anarchon 15. Jun 2006 04:31


BassDllPlayer Proplem mit trackbar
 
hi,
Programmiere grad einen Mp3player mit einer Selbstlaufenenden trackbar!
(zum anzeigen der aktuellen Zeit des Songs)
problem ist sobald sich die Postion der Bar ändert stoppt der song!
(Also Song - Pause - Song - Pause - Song usw...
Hier der Code
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,bass, Buttons, ExtCtrls, BassdllPlayer, ComCtrls, Menus
  ;

type
  TForm2 = class(TForm)
    SpeedButton1: TSpeedButton;
    pause: TSpeedButton;
    playbt: TSpeedButton;
    od: TOpenDialog;
    SpeedButton2: TSpeedButton;
    Image1: TImage;
    BassdllPlayer1: TBassdllPlayer;
    ListBox1: TListBox;
    Label1: TLabel;
    TrackBar1: TTrackBar;
    Timer1: TTimer;
    PopupMenu1: TPopupMenu;
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure playbtClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure pauseClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure poschange(Sender: TObject);
  private

  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}


procedure TForm2.FormCreate(Sender: TObject);
begin

   // check the correct BASS was loaded
   if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
   begin
      MessageBox(0,'An incorrect version of BASS.DLL was loaded',0,MB_ICONERROR);
      Halt;
   end;

   // Initialize audio - default device, 44100hz, stereo, 16 bits
   if not BASS_Init(-1, 44100, 0, Handle, nil) then
  begin

  End;
form2.Visible:=true;
end;

procedure TForm2.SpeedButton2Click(Sender: TObject);
begin
od.Execute;
listbox1.Items.Add(od.FileName);
end;


procedure TForm2.playbtClick(Sender: TObject);
begin
if (listbox1.ItemIndex > -1) then
bassdllplayer1.LoadFromFile(ListBox1.Items.Strings[Listbox1.ItemIndex]);
bassdllplayer1.Play;
label1.Caption:=bassdllplayer1.GetSongLengthAsString;
trackbar1.Max:=bassdllplayer1.SongLength;
end;

procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
bassdllplayer1.Stop;
timer1.Destroy;
bassdllplayer1.Destroy;
end;


procedure TForm2.pauseClick(Sender: TObject);
begin
bassdllplayer1.Pause;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
//trackbar1.Position:=bassdllplayer1.Position;


end;

procedure TForm2.poschange(Sender: TObject);
begin
bassdllplayer1.Position:=trackbar1.Position;

end;
end.

donpeppone 29. Jun 2006 11:37

Re: BassDllPlayer Proplem mit trackbar
 
HiHo!

Also so wie du den Code jetzt hast mit der Kommentierung funzt das. Aber sobald du die Timer-Funktion nutzt,
dann geht da nix mehr, gelle?!
Problem ist, dass der Timer die Position ändert, und die OnChange-Funktion von der Trackbar dann aufgerufen wird.
Also eine Kette de la Reaktion.
Abhilfe kannst du dir dadurch schaffen, dass du den ActionListener vorher entfernst und danach wieder zuweist.

Sprich:
Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
 trackbar1.OnChange := Nil;        // Aktionszuweisung entfernen
 trackbar1.Position := bassdllplayer1.Position;
 trackbar1.OnChange := poschange;  // und wieder verknüpfen
end;
Hoffe et klappt.. elegant ist zwar was anderes...

vg dp

Anarchon 29. Jun 2006 12:46

Re: BassDllPlayer Proplem mit trackbar
 
hey Danke ,ja es klappt ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz