Einzelnen Beitrag anzeigen

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