12. april 2005 - 16:19Der er
6 kommentarer og 1 løsning
Skip i trackbar
Jeg har en mediaplayer, der afspiller en sang. Hvordan laver jeg så, at min trackbar ikke blot følger min mediaplayers funktion (det kan jeg godt få den til), men at jeg også kan 'springe' i sangen ved at jeg flytter på trackbarens position?
Hej Kristofferb Det er jo et herligt problem du har der. Jeg havde selv samme problem indtil jeg fandt løsningen. Der er to ting jeg er nødt til at forudsætte at du har gjort for at min løsning virker.
1: Der hvor du loader mp3 filen har du skrevet noget lignende
2: At du har en timer der trigger x antal gange i sekundet, og indeholder noget lignende:
TrackBar1.Position := MediePlayer1.Position;
For at få det til at virke, er du nødt til at lave en global boolean variabel, der fortæller om det er dig eller programmet der flytter på din trackbar, jeg har kaldt den 'Moving'.
Din OnTimer event udvides til dette:
procedure TForm2.Timer1Timer(Sender: TObject); begin Moving := True; // Det er programmet der flytter TrackBar1.Position := MediePlayer1.Position; Moving := False; // Det er dig der flytter. end;
På din TrackBar laver du en OnChange event.
procedure TForm2.TrackBar1Change(Sender: TObject); begin if not Moving then begin MediePlayer1.Position := TrackBar1.Position; MediePlayer1.Play; end; end;
Gider du lave det som eksempel? Jeg gør alt det du har skrevet, og alligevel hacker sangen i det og genstarter hele tiden, når jeg sætter afspilleren igang.
Jeg ville blive meget glad hvis du gad lave et lille eksempel.
var Form24: TForm24; Tmp : String; Playing : Boolean; Cueing : Boolean; Moving : Boolean; CuePos : LongInt;
implementation
{$R *.DFM}
procedure TForm24.Vise(Indx : LongInt); begin { Viser Titel med index nummeret Indx. } Global.Plade.DataSet.Refresh; Global.Titel.DataSet.Refresh; Global.Ophav.DataSet.Refresh; VisTitel(Indx); VisOphav(Indx); ShowModal; end;
procedure TForm24.FormShow(Sender: TObject); begin Form24.Top := Unit59.Top + 55; Form24.Left := Unit59.Left + 392; Spil.Caption := 'F6 Afspil'; Playing := False; TrackBar1.Position := 0; Tilbage.Clear; AutoCue; // Load fil og gør klar til afspilning. if Spil.Visible and Spil.Enabled then Spil.SetFocus; end;
procedure TForm24.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_Escape : if Playing then AfbrydSpil else ModalResult := MrCancel; VK_F1 : Figur61.Help.Vis(24); VK_F6 : if Spil.Visible then begin if ssShift in Shift then begin // Vis hvilke musik kategori sangen er medlem af. if not Playing then Figur86.Form86.Vise(TitelData.Index); end else SpilClick(Sender); // Afspil evt. musikfil. end; VK_F7 : if LeftCue.Visible then LeftCueClick(Sender); VK_F8 : if RightCue.Visible then RightCueClick(Sender); VK_F9 : Figur62.Form62.ShowModal; VK_F11 : if not Playing then begin Figur70.Form70.ShowModal; AutoCue; end; VK_F12 : if not Playing then begin Figur73.Form73.Hente(False, False, -1); AutoCue; end; end; end;
procedure TForm24.AfbrydSpil; begin if Figur66.Form66.Hente then begin Spiller.Stands; Spil.Caption := 'F6 Afspil'; Playing := False; Spiller.Forfra; TrackBar1.Position := Spiller.Pos; Spillet.Text := TimeToStr(0); Tilbage.Text := TimeToStr((Spiller.Len - Spiller.Pos) /86400000); Spiller.Luk; AutoCue; end; end;
procedure TForm24.AutoCue; var Fil : String; begin Fil := Global.HentLokal('Musik') + IntToStr(Global.HentPlade(TitelData.Plade).Nr); Fil := Fil + '\' + TitelData.Side + IntToStr(TitelData.Skaering) + '.mp3'; if FileExists(Fil) then begin Spiller.HentLyd(Fil); TrackBar1.Min := 0; TrackBar1.Position := 0; TrackBar1.Max := Spiller.Len; TrackBar1.Frequency := Trackbar1.Max div 10; Timer1.Enabled := True; Spil.Enabled := True; LeftCue.Enabled := True; RightCue.Enabled := True; Cueing := False; end else begin Spil.Enabled := False; LeftCue.Enabled := False; RightCue.Enabled := False; end; end;
procedure TForm24.LeftCueClick(Sender: TObject); begin if not Cueing then begin CuePos := Spiller.Pos; Cueing := True; end; CuePos := cuePos - 10; // Flyt millisekunder tilbage i sangen end;
procedure TForm24.RightCueClick(Sender: TObject); begin if not Cueing then begin CuePos := Spiller.Pos; Cueing := True; end; CuePos := cuePos + 10; // Flyt millisekunder frem i sangen end;
procedure TForm24.VisOphav(OIndex : LongInt); begin Ophav.Clear; Global.TOphav.IndexName := 'OphavTitel'; Global.TOphav.FindNearest([IntToStr(OIndex)]); with Global.Ophav.DataSet do begin while (not EOF) and (FieldByName('Titel').AsInteger = TitelData.Index) do begin Tmp := FieldByName('Navn').AsString; while Length(Tmp) < 39 do Tmp := Tmp + ' '; if FieldByName('Komponist').AsBoolean then Tmp[36] := '*'; if FieldByName('Forfatter').AsBoolean then Tmp[37] := '*'; if FieldByName('Arrangør').AsBoolean then Tmp[38] := '*'; if FieldByName('Oversætter').AsBoolean then Tmp[39] := '*'; Ophav.Items.Add(Tmp); Next; end; end; if Ophav.Items.Count > 0 then Ophav.ItemIndex := 0; end;
procedure TForm24.FormHide(Sender: TObject); begin Timer1.Enabled := False; Spiller.Luk; end;
procedure TForm24.Timer1Timer(Sender: TObject); begin if Playing then begin if Cueing then begin Spiller.Pos(CuePos); Spiller.Spil; // Spil lydfilen. Spil.Caption := 'F6 Pause'; Playing := True; end; Spillet.Text := TimeToStr(Spiller.Pos /86400000); Tilbage.Text := TimeToStr((Spiller.Len - Spiller.Pos) /86400000); if Spiller.Len = Spiller.Pos then begin Spil.Caption := 'F6 Afspil'; Playing := False; Spiller.Luk; end; Spil.Enabled := True; Spil.SetFocus; Moving := True; TrackBar1.Position := Spiller.Pos; Moving := False; end; end;
procedure TForm24.TrackBar1Change(Sender: TObject); begin if not Moving then begin if Playing then begin Spiller.Pos(TrackBar1.Position); if Spil.Caption = 'F6 Pause' then Spiller.Spil; end; end; end;
procedure TForm24.TrackerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // Flyt trackbar til mouse pos. if Playing then begin Spiller.Pos(Spiller.Len * X div 130); if Spil.Caption = 'F6 Pause' then Spiller.Spil; end; end;
procedure TForm24.SpilClick(Sender: TObject); begin if Spil.Enabled then begin if (Spil.Caption = 'F6 Afspil') then begin Spiller.Spil; // Spil lydfilen. Spil.Caption := 'F6 Pause'; Playing := True; Cueing := False; end else begin Spiller.Pause; Spil.Caption := 'F6 Afspil'; Cueing := False; end; end; end;
Jo der er et sted hvor jeg får den til at bevæge sig (i en timer).
Tak for dit svar.
Synes godt om
Ny brugerNybegynder
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.