![]() |
Datei öffnen mit TOpenDialog
Hallo
Wie bekomme ich es hin das sich das Fenster öffnet in dem man Dateien öffnen kann? Wenn ich eine Win2000-Logo-Anwendung öffne ist ja schon ein Kleines programm aufgebaut mit dem man Daten öffnen und Speichern kann. Ich komme aber nicht dahinter wie das gemacht wird. Ich habe eine VLC-Anwendung denke aber das das gleich aufgebaut ist. Es geht um Musik dateien die in die ListBox1 geladen werden sollen. Gruß Andy |
Re: Datei öffnen mit TOpenDialog
Du ziehst den Topendialog auf dein Formular
und machst in den Buttonclick
Delphi-Quellcode:
Wenn du das Flag setzt damit man nehrere Dateien öffnen kann must du
If Opendialog1.execute then begin
.. end; die von Opendialog1.files[i] mit i = 0 bis Opendialog1.files.count -1 auslesen sonst Opendialog1.filename |
Re: Datei öffnen mit TOpenDialog
Wie müsster der Code genau aussehen?
Also der Button auf den geklickt werden soll heist Button5 und in ListBox1 sollen die Lieder geladen werden. Ich bin schon so weit:
Delphi-Quellcode:
So machen Foren spaß wenn man gute Antworten in kurzer Zeit bekommt!
procedure TForm4.Button5Click(Sender: TObject);
begin If Opendialog1.execute then begin begin end; end; end; |
Re: Datei öffnen mit TOpenDialog
So zum datei laden
Delphi-Quellcode:
Gruss Sascha
procedure TForm1.Button5Click(Sender: TObject);
var SAlterPfad,SNeuerPfad :string; begin if OpenDialog1.Execute then begin SAlterPfad := OpenDialog1.FileName; SNeuerPfad := ExtractFilePath(ParamStr(0))+('Musik\'+ ExtractFileName(OpenDialog1.FileName)); if not FileExists(SNeuerPfad) then begin CopyFile(PChar(SAlterPfad), PChar(SNeuerPfad), true); FileListBox1.Items.Add(ExtractFileName(OpenDialog1.FileName)); end else MessageDlgPos('Datei ist bereits in der Liste',mtInformation,[mbOk],0,280,170); end; end; |
Re: Datei öffnen mit TOpenDialog
Hallo
Ich kann die Datei öffnen und sie wird auch in die ListBox1 geladen nur wenn ich sie dann abspielen möchte kommt ein fehler: Im Projekt MP.exe ist der Klasse EStringListError mit der meldung "Listindex überschreitet das Maximum (0)" aufgetreten. Ich habe bei den Code von fuknersascha eine Zeile geändert und zwar so: Orginal: FileListBox1.Items.Add(ExtractFileName(OpenDialog1 .FileName)); ListBox1.Items.Add(ExtractFileName(OpenDialog1.Fil eName)); und wie kann ich mehrere Dateien gleichzeitig öffnen? |
Re: Datei öffnen mit TOpenDialog
Hi,
das hat Corpsman schon geschrieben: Zitat:
|
Re: Datei öffnen mit TOpenDialog
für mehrere Dateien musst du im OI den opendialog noch auf Multiselect:= True stellen
|
Re: Datei öffnen mit TOpenDialog
Gut wenn ich das mache bleibt der fehler und es wird auch nur eine Datei in die Liste übertragen.
|
Re: Datei öffnen mit TOpenDialog
Zeig doch mal den Code zum Abspielen.
|
Re: Datei öffnen mit TOpenDialog
Hier der Code zum Abspielen:
Delphi-Quellcode:
***** Wenn ich die Musiktitle über drag und drop einfüge geht das Abspielen*****
procedure TForm4.Button1Click(Sender: TObject);
var i : integer; begin TRY for i := 0 to listbox1.Count - 1 do if listbox1.Selected[i] then break; PlayFile(i); EXCEPT showmessage('ERROR: Musiktitle wählen'); END; end; |
Re: Datei öffnen mit TOpenDialog
Hmm... auf den ersten Blick kann ich keinen Fehler entdecken. :gruebel:
[edit]Versuch es mal so:
Delphi-Quellcode:
[/edit]
procedure TForm4.Button1Click(Sender: TObject);
var i : integer; begin for i := 0 to listbox1.Count - 1 do if listbox1.Selected[i] then begin PlayFile(i); exit; end; showmessage('ERROR: Musiktitle wählen'); end; |
Re: Datei öffnen mit TOpenDialog
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var i : integer; begin TRY for i := 0 to listbox1.Count - 1 do if listbox1.Selected[i] then begin; PlayFile(i); Break; end; EXCEPT showmessage('ERROR: Musiktitle wählen'); END; end; |
Re: Datei öffnen mit TOpenDialog
Setz dein listen index der Listbox im Oi auf 1 und im code auch
|
Re: Datei öffnen mit TOpenDialog
Zitat:
|
Re: Datei öffnen mit TOpenDialog
*Hehe* Manuel hat denselben Verdacht wie ich ;)
|
Re: Datei öffnen mit TOpenDialog
Zitat:
|
Re: Datei öffnen mit TOpenDialog
Also es geht mit beiden varianten nicht :cry:
Wo im code auf 1 stellen? das drag und drop sieht so aus:
Delphi-Quellcode:
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; |
Re: Datei öffnen mit TOpenDialog
Hi,
Du möchtest das selektierte Lied abspielen, richtig? Versuch mal das:
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
begin PlayFile(ListBox1.ItemIndex); end; |
Re: Datei öffnen mit TOpenDialog
ja das soll gespiel werden
kommt immer noch der fehler: Im Projekt MP.exe ist der Klasse EStringListError mit der meldung "Listindex überschreitet das Maximum (0)" aufgetreten. wenn ich die Lieder rein ziehe gehen alle codes nur über öffnen nicht. |
Re: Datei öffnen mit TOpenDialog
Ist denn überhaupt ein Item selektiert?
|
Re: Datei öffnen mit TOpenDialog
Und eine andere Sache: Wie sieht die Procedure PlayList aus?
|
Re: Datei öffnen mit TOpenDialog
Ja Item ist markiert.
hier mal der ganze code:
Delphi-Quellcode:
Ist zum größten teil zusammengesucht und sieht deswegen unordentlich aus.
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. |
Re: Datei öffnen mit TOpenDialog
Wieso benutzt Du denn 2 Stringlisten? PlayList ist IMHO überflüssig, da könntest Du doch direkt auf ListBox1.Items zugreifen.
|
Re: Datei öffnen mit TOpenDialog
Wie müsste das dan aussehen?
|
Re: Datei öffnen mit TOpenDialog
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; |
Re: Datei öffnen mit TOpenDialog
Danke für die Hilfe
Es geht jetzt |
Re: Datei öffnen mit TOpenDialog
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? |
Re: Datei öffnen mit TOpenDialog
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; |
Re: Datei öffnen mit TOpenDialog
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; |
Re: Datei öffnen mit TOpenDialog
Die Zeilen
Delphi-Quellcode:
finde ich persönlich unschön (obwohl syntaktisch richtig), aber das ist Geschmackssache.
if currentSong < Playlist.Count then { alles passt, songindex im rahmen}
else mediaplayer1.next; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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