Avatar billede hasan Nybegynder
28. maj 2004 - 17:26 Der er 14 kommentarer og
2 løsninger

hjælp til TrackBar

hvordan laver jeg en seekbar til min mp3player?

function TForm1.PlaySong : string;
seekbar.Max := 0;
Mediaplayer1.close;
mediaplayer1.FileName := 'd:\blah\blah.mp3'
mediaplayer1.open;
mediaplayer1.play;
seekbar.Max := mediaplayer1.Length;
timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if seekbar.Max <> 0 then
    seekbar.Position := mediaplayer1.Position;
end;

procedure TForm1.seekbarChange(Sender: TObject);
begin
mediaplayer1.Position := seekbar.Position;
end;

det her virker en lille smugle :) hvis jeg bare seekbaren være så skifter den position uden problemer, men når jeg skifter seekbarens position så kan jeg se at tiden hop frem men sangen går i stå?!?
Avatar billede fixxxer Nybegynder
28. maj 2004 - 21:53 #1
hvis du er frist på at installere nogle tredje parts programmer der hedder RxLib, så er her et fungerende eks.:

  public
    FTracking: Boolean;


procedure TForm1.FormShow(Sender: TObject);
begin
  FTracking := True; //boolean der bestemmer om "seekbar'en" skal opdateres (RxSlider1)
  RxSlider1.MaxValue := MediaPlayer1.Length;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (MediaPlayer1.Mode = mpPlaying) and (FTracking) then //hvis der afspilles og der må opdateres
    RxSlider1.Value := MediaPlayer1.Position; //opdater seekbarens position
end;

procedure TForm1.RxSlider1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FTracking := False; //når vi begynder at flytte seekbaren med musen, slå opdatering fra
end;

procedure TForm1.RxSlider1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MediaPlayer1.Position := RxSlider1.Value; //når vi er færdige med at opdatere
  MediaPlayer1.Play; //skift position og afspil
  FTracking := True; //og opdatere seekbaren igen
end;
Avatar billede fixxxer Nybegynder
28. maj 2004 - 21:53 #2
Avatar billede hasan Nybegynder
28. maj 2004 - 22:01 #3
jeg bruger delphi 7 og den har op til v6 support

er det ik' muligt med en trackbar??

men jeg vil prøve komponetet imorgen
Avatar billede hasan Nybegynder
29. maj 2004 - 15:26 #4
jeg har sat denne kode på min trackbar (seekbar)

procedure TForm1.seekbarChange(Sender: TObject);
begin
if Length(MediaPlayer1.Filename) > 0 then
  begin
    MediaPlayer1.Position := seekbar.Position;
    MediaPlayer1.Play;
  end;
end;

men den hakker været sekund og det er på grund af den timer jeg har. er der ikke en måde jeg kan løsse dette problem på?? det virker ik hvis jeg putter den på min OnDragDrop event
Avatar billede fixxxer Nybegynder
29. maj 2004 - 17:30 #5
Ja det er højst sansynligt din timer det laver hak. Du kan stadig ikke bruge OnChange fordi at når du ændrer den ved kode, eller ved at flytte skyderen, så trigger du OnChange, og det dur ikke på samme tid.

Det er derfor jeg har brugt et fremmed komponent, hvor jeg har mulighed for at slå opdatering fra når der trækkes i trackbaren, for umeldbart kan jeg ikke se hvordan det ellers skulle lade sig gøre, da den almindelig TrackBar ikke understøtter de muligheder.

OnDragDrop løser heller ikke dit problem, da det er en trigger der bruges når du faktisk trækker og slippe HELE komponenten, på samme måde som når du flytter rundt på vinduer - groft sagt.

Hent komponenterne til Delphi 7 her: http://download.easysoftinc.dk/rxlib_275d7.zip
Pak dem ud i en mappe under Delphi-mappen, og følg vejledningen i install.txt
Avatar billede hasan Nybegynder
29. maj 2004 - 19:40 #6
jeg kan ik' installer den. når jeg åbner de filer som der står jeg skal så for jeg denne fejl: "cannot find resource file: D:\programmer\borland\delphi7\comp\Rzlib\untis\dclrx7.res recreated"
Avatar billede kammeyer Nybegynder
30. maj 2004 - 16:45 #7
Lidt noob her - har ikke lavet den slags før, men ...

Jeg kunne ikke lige finde 'seekbar', men benyttede TrackBar. Den laver samme stunt.
For at se om det er Mediaplayer, Timer eller Trackbar der laver den tunge opdatering / aflæsning, så indsatte jeg en Progressbar til opdateringen i timeren i stedet for TrackBar - og den var ikke påvirket overhovedet.

Konklusion må være at din 'seekbar' er for tung til opdatering, så du må finde en anden. Det har ikke noget med timeren at gøre.
Avatar billede hasan Nybegynder
30. maj 2004 - 17:42 #8
det er min timer der er skyld i problemet :)

hvis jeg fjerner den linie så virker det helle
timer1.Enabled := true;
men så bevæger tracbaren jeg ikke.
Avatar billede fixxxer Nybegynder
30. maj 2004 - 19:14 #9
kammeyer >> Seekbar er hasan's synonym for TrackBar - hasan: fyfy ;-)
det er ikke fordi det er spor tung at opdatere den, men det faktum at du opdatere den ved en timer, der samtidigt trigger en event hvor du laver den præcis samme opdatering - det er giver et "lag". Det er har i højeste grad noget med hans timer at gæøre, han skal gøre som i mit eksempel, og slå opdatering fra når man begynder at rykke "skyderen" i TrackBar'en vha. OnMouseDown/OnMouseUp, som ikke er en del af den oprindelige TTrackBar.

hasan >> det gør ikke spor at den fortæller dig den fejl. Den recreater jo netop .res filen for dig, så det skal du ikke bekymre dig om. Bare installer skidtet :-)
Avatar billede hasan Nybegynder
30. maj 2004 - 20:25 #10
jeg valgte filen og klikket compile, men jeg fik en fejl mere noget med at den ikke kan finde en fil. men når jeg så klikker install så bliver de installeret :) MEN når jeg så putter en af komponenterne på min form så kan jeg ik compile mit program fordi den siger at den ikke kan finde f.eks rxslider.dcu
men den file finde i den mappe D:\programmer\borland\delphi7\comp\Rzlib\untis\
Avatar billede fixxxer Nybegynder
30. maj 2004 - 20:43 #11
Det er fordi du skal hjælpe Delphi lidt:

Vælg Tools > Enviroment Options > Library og klik på ... ud for Library Path. Vælg overnævnte mappe og klik Add. OK hele vejen ud, og så spiller det :-)
Avatar billede hasan Nybegynder
31. maj 2004 - 14:00 #12
er det ik her jeg skal skrive den?? for jeg får fejl
private
{ Private declarations }

public
{ Public declarations }
FTracking: Boolean;
 
end;
Avatar billede fixxxer Nybegynder
31. maj 2004 - 14:53 #13
hvilken fejl? :)
Avatar billede hasan Nybegynder
31. maj 2004 - 15:31 #14
glem det :) har fået det til at virke
Avatar billede fixxxer Nybegynder
31. maj 2004 - 15:34 #15
godt at vide, held og lykke :)
Avatar billede kammeyer Nybegynder
02. juni 2004 - 13:15 #16
fixxxer> ok - kunne bare ikke se at timeren var skyldig, da jeg kunne gøre det uden hak ved at lave samme timer-event opdatering på ProgressBar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester