AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei öffnen mit TOpenDialog

Ein Thema von Andy-h · begonnen am 6. Okt 2007 · letzter Beitrag vom 6. Okt 2007
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#21

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 11:35
Und eine andere Sache: Wie sieht die Procedure PlayList aus?
  Mit Zitat antworten Zitat
Andy-h

Registriert seit: 3. Okt 2007
23 Beiträge
 
#22

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 11:40
Ja Item ist markiert.

hier mal der ganze code:

Delphi-Quellcode:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ShellApi, mmsystem, Math, ExtCtrls;

type
  TForm4 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    OpenDialog1: TOpenDialog;
    Timer1: TTimer;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
    procedure MediaPlayer1Notify(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Procedure AddToPlayList(s:string);
    procedure PlayFile(songNumber: integer);
    Procedure WMDropFiles (Var aMsg: tMessage); message WM_DROPFILES; //Drag und drop
  end;

var
  Form4: TForm4;
  var PlayList: TStringList;
  CurrentSong: integer = -1; // neue globale variable um uns das aktuelle lied zu merken
  Lautstaerke: integer = -1;

implementation

{$R *.dfm}
//Sound
procedure GetVolume(var volL, volR: Word);
var
  hWO: HWAVEOUT;
  waveF: TWAVEFORMATEX;
  vol: DWORD;
begin
  volL:= 0;
  volR:= 0;
  // init TWAVEFORMATEX
  FillChar(waveF, SizeOf(waveF), 0);
  // open WaveMapper = std output of playsound
  waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
  // get volume
  waveOutGetVolume(hWO, @vol);
  volL:= vol and $FFFF;
  volR:= vol shr 16;
  waveOutClose(hWO);
end;


procedure SetVolume(const volL, volR: Word);
var
  hWO: HWAVEOUT;
  waveF: TWAVEFORMATEX;
  vol: DWORD;
begin
  // init TWAVEFORMATEX
  FillChar(waveF, SizeOf(waveF), 0);
  // open WaveMapper = std output of playsound
  waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
  vol:= volL + volR shl 16;
  // set volume
  waveOutSetVolume(hWO, vol);
  waveOutClose(hWO);
end;

//Sound

Procedure TForm4.WMDropFiles (Var aMsg: tMessage);
Var
  Idx, Size, FileCount: Integer;
  Filename: pChar;
Begin
  Inherited;
  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFF, nil, 255);
  For Idx := 0 To FileCount -1 Do Begin
    Size := DragQueryFile (aMsg.WParam, Idx, nil, 0) + 1;
    Filename := StrAlloc (Size);
    If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then { nothing }
    else AddToPlayList (pChar (Filename)); // hier wird das jeweilige file unserer Prozedur AddToPlaylist überwiesen.
    StrDispose (Filename);
  End;
  DragFinish (aMsg.WParam);
End;

Procedure TForm4.AddToPlayList(s:string);
begin
   playList.Add(s);
   ListBox1.Items.Add(extractfilename(s));
end;

procedure TForm4.Button1Click(Sender: TObject);
begin
  PlayFile(ListBox1.ItemIndex);
end;

//sound auslesen

procedure TForm4.Button2Click(Sender: TObject);
var
X,TonLi, TonRe, VolLi, VolRe: Word;
begin
  GetVolume(VolLi,VolRe);
  TonLi:= Floor(VolLi / 65535 * 100);
  TonRe:= Floor(VolRe / 65535 * 100);
  Label1.Caption:=IntToStr(TonLi);
  Label2.Caption:=IntToStr(TonRe);
end;

procedure TForm4.Button3Click(Sender: TObject);
begin
 mediaplayer1.next;
end;

procedure TForm4.Button4Click(Sender: TObject);
begin
 mediaplayer1.back;
end;

procedure TForm4.Button5Click(Sender: TObject);
var SAlterPfad,SNeuerPfad :string;
begin
if OpenDialog1.Execute then
begin
SAlterPfad := Opendialog1.files[0];
   SNeuerPfad := ExtractFilePath(ParamStr(0))+('Musik\'+ ExtractFileName(OpenDialog1.FileName));

if not FileExists(SNeuerPfad) then
  begin
   CopyFile(PChar(SAlterPfad), PChar(SNeuerPfad), true);
   ListBox1.Items.Add(ExtractFileName(OpenDialog1.FileName));
  end
else
  MessageDlgPos('Datei ist bereits in der Liste',mtInformation,[mbOk],0,280,170);
end;
end;

//Sound auslesen

procedure TForm4.FormCreate(Sender: TObject);
begin
   DragAcceptFiles (Handle, True); // drag und drop akzeptieren
   playList := TStringList.Create;
end;

procedure TForm4.FormDestroy(Sender: TObject);
begin
   playList.Free;
end;

procedure TForm4.PlayFile(songNumber: integer); // deklaration von playfile ändern, hier das 2. mal
begin
   if fileexists(Playlist.Strings[songNumber]) then begin
     CurrentSong := songNumber;
     mediaplayer1.Close;
     mediaplayer1.FileName := Playlist.Strings[songNumber];
     mediaplayer1.Open;
     mediaplayer1.play;
   end;
end;

procedure TForm4.Timer1Timer(Sender: TObject);
var
  hilf, hilfbuchstabe: string;
begin
  hilf := Label3.Caption; //einlesen der gesamten caption
  hilfbuchstabe := hilf[1]; //merken des ersten zeichens der caption
  delete(hilf, 1, 1); //erstes zeichen löschen
  hilf := hilf + hilfbuchstabe;//caption + gemerktes zeichen
  Label3.Caption := hilf; //das ganze ausgeben
  application.ProcessMessages; //um sicher zu gehen, dass das ganze angezeigt wird
  //timer intervall auf ca. 200ms stellen
end;

procedure TForm4.ListBox1DblClick(Sender: TObject);
var i : integer;
begin
  for i := 0 to listbox1.Count - 1 do
    if listbox1.Selected[i] then break;
  { nun haben wir in i die nummer der selektierten Zeile
    da Listbox und Playlist eine identische Reihe der Einträge und gleiche Sortierung
    vorweisen, können wir mit dem erhaltenen index den richtigen Eintrag der Playlist
    auslesen. }

    PlayFile(i);
end;

procedure TForm4.MediaPlayer1Notify(Sender: TObject);
begin
   if mediaplayer1.Position = mediaplayer1.Length then begin
   // position = gesamtlänge, bedeutet dass das lied beendet wurde
     Listbox1.Selected[currentSong] := false; // das gerade gespielte lied de-selektieren
     inc(currentSong); // aktuellen song um eines erhöhen
     if currentSong < Playlist.Count then { alles passt, songindex im rahmen}
     else currentsong := 0; {ende der liste erreicht, setze aktuelles lied auf anfang}
     PlayFile(CurrentSong);
     Listbox1.Selected[currentSong] := true; // das aktuelle lied selektieren
   end;
end;

end.
Ist zum größten teil zusammengesucht und sieht deswegen unordentlich aus.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#23

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 11:51
Wieso benutzt Du denn 2 Stringlisten? PlayList ist IMHO überflüssig, da könntest Du doch direkt auf ListBox1.Items zugreifen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Andy-h

Registriert seit: 3. Okt 2007
23 Beiträge
 
#24

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 12:31
Wie müsste das dan aussehen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 12:37
Ich denke, so (ungetestet):
Delphi-Quellcode:
//Version ohne den Parameter Songnumber
procedure TForm4.PlayFile; // deklaration von playfile ändern, hier das 2. mal
begin
  if ListBox1.ItemIndex < 0 then exit;
  if fileexists(ListBox1.Items[ListBox1.ItemIndex]) then begin
     CurrentSong := ListBox1.ItemIndex;
     mediaplayer1.Close;
     mediaplayer1.FileName := ListBox1.Items[ListBox1.ItemIndex];
     mediaplayer1.Open;
     mediaplayer1.play;
   end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Andy-h

Registriert seit: 3. Okt 2007
23 Beiträge
 
#26

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 13:14
Danke für die Hilfe
Es geht jetzt
  Mit Zitat antworten Zitat
Andy-h

Registriert seit: 3. Okt 2007
23 Beiträge
 
#27

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 15:52
Mir ist doch noch was aufgefallen:

mit dem alten code ist er immer ins nächste Lied gesprungen und hat es abgespielt
jetzt bleibt er einfach am ende des liedes stehen

was muss ich machen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#28

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 15:59
Delphi-Quellcode:
procedure TForm4.MediaPlayer1Notify(Sender: TObject);
begin
   if mediaplayer1.Position = mediaplayer1.Length then begin
   // position = gesamtlänge, bedeutet dass das lied beendet wurde
     Listbox1.Selected[currentSong] := false; // das gerade gespielte lied de-selektieren
     inc(currentSong); // aktuellen song um eines erhöhen
     if currentSong >= Playlist.Count then
       currentsong := 0; {ende der liste erreicht, setze aktuelles lied auf anfang}
     Listbox1.Selected[currentSong] := true; // das aktuelle lied selektieren
     PlayFile; //und abspielen ;)
   end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Andy-h

Registriert seit: 3. Okt 2007
23 Beiträge
 
#29

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 16:22
Hatte den fehler garnich an der stelle vermutet

habe selber noch was geändert so läufts:

Delphi-Quellcode:
procedure TForm4.MediaPlayer1Notify(Sender: TObject);
begin
   if mediaplayer1.Position = mediaplayer1.Length then begin
   // position = gesamtlänge, bedeutet dass das lied beendet wurde
     Listbox1.Selected[currentSong] := false; // das gerade gespielte lied de-selektieren
     inc(currentSong); // aktuellen song um eines erhöhen
     if currentSong < Playlist.Count then { alles passt, songindex im rahmen}
     else mediaplayer1.next;
     PlayFile(CurrentSong);
     Listbox1.Selected[currentSong] := true; // das aktuelle lied selektieren
     PlayFile(ListBox1.ItemIndex);
   end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#30

Re: Datei öffnen mit TOpenDialog

  Alt 6. Okt 2007, 16:26
Die Zeilen
Delphi-Quellcode:
if currentSong < Playlist.Count then { alles passt, songindex im rahmen}
else mediaplayer1.next;
finde ich persönlich unschön (obwohl syntaktisch richtig), aber das ist Geschmackssache.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz