Autor Beitrag
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Di 03.06.03 20:08 
Hallo,
ich will aus meinem Programm heraus eine *.mp3 datei öffnen. Aber wie funktioniert das?? Wenn man Sie anklickt soll sich Winamp oder die mit *.mp3 verknüpfte anwendung öffnen und diese abspielen.

Hab mal grob gehört dass man sowas über shell macht, aber davon habe ich absolut keine Ahnung. Kann mir jemand ein beispiel zeigen oder so??


Gruß Andi

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 03.06.03 20:12 
Suchfunktion <-- ShellExecute.
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 03.06.03 20:14 
So:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var Datei: String;
      Datei1: Array[0..255] Of Char;
begin

If FileExists('C:\Winamp\Schießmichtot.mp3')
Then Datei1:='C:\Winamp\Schießmichtot.mp3';
StrPCopy(Datei, Datei1);
ShellExecute(0, Nil, Datei, Nil, Nil, SW_NORMAL);
end;


So müßte das gehen, oder? Was meinst du dazu?

///edit -> Mathias war schneller. Ist aber auch keine Kunst, sein Text war wesentlich kürzer als meine. Aber er hat auch Recht. :mrgreen: Übrigens nicht vergessen, ShellApi in die Uses aufzunehmen.. :-)

_________________
Hasta La Victoria Siempre
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Di 03.06.03 20:17 
Ahhh ja, so dürfte es gehen!

@Mathias: Wenn man weiß nach was man suchen muss ist alle kein problem, hab aber nur nach "Shell Execute" gesucht.

Dank euch!!

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Di 03.06.03 20:22 
Terra, da bringt er einen Compile Fehler: Inkompatible Typen 'String' und 'PChar'

und zwar in diesen beiden Zeilen:
ausblenden Delphi-Quelltext
1:
2:
StrPCopy(Datei, Datei1); 
ShellExecute(0, Nil, Datei, Nil, Nil, SW_NORMAL);

Warum??

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Di 03.06.03 20:25 
Achso, ich glaube das muss so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
If FileExists('F:\aktuelle Songs\Kinks - Lola.mp3')
Then Datei1:='F:\aktuelle Songs\Kinks - Lola.mp3';
begin
  StrPCopy(Datei1, Datei);
  ShellExecute(0, Nil, Datei1, Nil, Nil, SW_NORMAL);
end;
end;


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Mi 04.06.03 00:44 
Hallo Leute!

Was soll denn das werden wenns fertig ist????

ausblenden Delphi-Quelltext
1:
2:
StrPCopy(Datei, Datei1); 
ShellExecute(0, Nil, Datei, Nil, Nil, SW_NORMAL);


Schreibt doch einfach:
ausblenden Delphi-Quelltext
1:
ShellExecute(0, Nil, PChar (Datei), Nil, Nil, SW_NORMAL);					

und gut isses!

Gruß

Dietmar Brüggendiek
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 04.06.03 05:57 
Ok,
habs jetzt mal ausprobiert, aber wenn ich dann den Button klicke der das ShellExecute ausführt öffnet sich nur Ein Ordnerfenster mit dem Aktuellen Arbeitsverzeichnis, also da wo meine Projektdateien drin sind.

Warum?

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.06.03 07:39 
Dann ist meist die Variable "Datei" leer, sozusagen
ausblenden Delphi-Quelltext
1:
Datei := '';					

Dadurch öffnet sich dann ein Explorer-Fenster. Ich weiß ja nicht, wie dein Code nach Dietmars Einwand aussieht (@Dietmar :mrgreen:), aber in deinem alten Code steckt schon mal ein Kopierfehler:
ausblenden Delphi-Quelltext
1:
StrPCopy(Datei1, Datei);					

Die Delphi-Hilfe hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
function StrPCopy(Dest: PChar; const Source: string): PChar;					


Beschreibung

StrPCopy kopiert den mit Source angegebenen Pascal-String in den nullterminierten String Dest. StrPCopy liefert einen Zeiger auf Dest.

Mit anderen Worten: der Inhalt von "Datei" wird in "Datei1" kopiert. Und ich vermute, dass du das eigentlich anders herum wolltest. Wenn du aber nun auf den Kopierquark verzichtet hast, weil´s auch einfach mit
ausblenden Delphi-Quelltext
1:
pchar(Datei)					

geht, dann schau doch mal, ob sich der Dateiname auch wirklich in dieser Variablen befindet. Möglicherweise hast du ja immer noch die andere Variable "Datei1", der du den Dateinamen übergeben hast
ausblenden Delphi-Quelltext
1:
2:
If FileExists('F:\aktuelle Songs\Kinks - Lola.mp3')
Then Datei1:='F:\aktuelle Songs\Kinks - Lola.mp3';

Gruß.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 04.06.03 08:19 
Hi,

kurze Zwischenfrage: das hier stimmt doch so, oder ?

ausblenden Quelltext
1:
ShellExecute(0, Nil, PChar (ListBox2.Items.Text), Nil, Nil, SW_NORMAL);					


Listbox1.Items.Text ist definitiv nicht leer. Abgespielt wird aber nichts. Die Verknüpfungen in Windows sind allerdings mit Musicmatch, kann das der Grund sein ?

_________________
Gruß
Hansa
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.06.03 12:09 
hansa hat folgendes geschrieben:
ausblenden Quelltext
1:
ShellExecute(0, Nil, PChar (ListBox2.Items.Text), Nil, Nil, SW_NORMAL);					

ListBox2.Items.Text enthält alle Items einer Listbox, inkl. der Zeilenumbrüche, bspw in dem Format:
ausblenden Quelltext
1:
2:
3:
File1.mp3
File2.mp3
File3.mp3

So gesehen wundert es mich nicht, dass Windows nichts abspielt. Versuch´s doch stattdessen mal mit
ausblenden Delphi-Quelltext
1:
ListBox2.Items[ListBox2.ItemIndex]					

Das wäre der Eintrag, den du in der Listbox ausgewählt (= markiert) hast.

Zitat:
Die Verknüpfungen in Windows sind allerdings mit Musicmatch, kann das der Grund sein ?

Hä?
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 04.06.03 12:21 
MathiasSimmack hat folgendes geschrieben:

Zitat:
Die Verknüpfungen in Windows sind allerdings mit Musicmatch, kann das der Grund sein ?

Hä?


Ich glaube damit meint er dass er anstatt winamp eben Musicmatch als Standardplayer für *.mp3-Dateien hat. Sollte aber normal nicht stören denke ich. Wenn du im Explorer die *.mp3-Dateien anklicken kannst und diese dann mit dem Musicmaker abgespielt werden, sollte es so doch auch gehen!

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 04.06.03 12:34 
Hi,

Mathias hat Recht, habe den Thread vergessen, email Benachrichtigung geht seltsamerweise im Moment nicht. Meine Listbox war gerade klein genug um den Rest der Zeile nicht mehr zu sehen. Heute Abend probier ich das aus, sollte wohl schon gehen, sag ich mal ungetestet. 8)

_________________
Gruß
Hansa
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Mi 04.06.03 13:15 
@Andi: Bei mir kommt dann auch ein Explorer-Fenster. Ich denke, wir sind besser gehalten, wenn wir uns an Mathias halten. :mrgreen:

@Mathias: Ich entschuldige mich mehrfach für den Fehler:

Zitat:

Sourcecode:
StrPCopy(Datei1, Datei);


Das war wohl meine Schuld. :-)

@Andi: Was auch eine Lösung wäre, wenn du einen versteckten MediaPlayer benutzt und dann folgendes schreist:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
If FileExists('C:\Winamp\X.mp3')
Then Begin
Datei:='C:\Winamp.mp3';
MediaPlayer1.FileName:=Datei;
MediaPlayer1.Open;
MediaPlayer1.Play;
End;


Ist zwar nichts sehr elegnt, aber erfüllt den Zweck. 8)

@Mathias: Was mich nochmal interessieren würde, wie zitiert ihr so, daß der Name des Autors dort steht???

_________________
Hasta La Victoria Siempre
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 04.06.03 13:22 
Terra23 hat folgendes geschrieben:

@Mathias: Was mich nochmal interessieren würde, wie zitiert ihr so, daß der Name des Autors dort steht???


Das ist ganz einfach, entweder klickst du bei dem Post woraus zu zitieren willst auf zitat oder du benutzt beim Schreiben den Button "Quote" und setzt aber in den AnfangsTag direkt an das Quote anschließend ="Benutzer"

also im Anfangstag steht dann folgendes: quote="benutzer"

beispiel:[quote="michSelbst"] Zitat.... [/quote]

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Mi 04.06.03 18:41 
Danke. Das hat mir irgendwie keine Ruhe gelassen. Alle zitieren mit Namen und bei mir steht immer nur "Zitat". :-)

_________________
Hasta La Victoria Siempre
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.06.03 18:52 
Terra23 hat folgendes geschrieben:
@Mathias: Ich entschuldige mich mehrfach für den Fehler:

ausblenden Delphi-Quelltext
1:
StrPCopy(Datei1, Datei);					

Und wieder völlig unnötig, denn in deinem Codebeispiel war´s noch richtig:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
If FileExists('C:\Winamp\Schießmichtot.mp3')
Then Datei1:='C:\Winamp\Schießmichtot.mp3';

StrPCopy(Datei, Datei1);

(s. 03.06. 21:14 Uhr). :) - Bitte künftig nur entschuldigen, wenn du wirklich Fehler machst. Dafür, dass andere nicht (ab)schreiben können, kannst du doch nichts. :twisted:
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 04.06.03 19:24 
Ihr müßt mir nochmal helfen. Mein Source ist weg. Der war fast fertig. :roll: Ich habe jetzt hier 2 Listboxen: die eine enthält die verfügbaren MP3s in der zweiten werden die aus der ersten ausgewählten eingefügt und dann in der ersten gelöscht. So eine Art Drag and Drop. Sieht da jemand vielleicht einen Fehler auf Anhieb? ich jedenfalls nicht 8)


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  for i := 1 to ListBox2.Count do begin
    ShellExecute(0, Nil, pchar (ListBox2.Items [ListBox2.ItemIndex]), Nil, Nil, SW_NORMAL);
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
var sr : TSearchRec;
begin
  if FindFirst('\*.MP3',faAnyFile, sr) = 0 then repeat
    ListBox1.Items.Add (sr.Name)
  until FindNext(sr) <> 0;
  FindClose(sr);
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  ListBox2.Items.Add (ListBox1.Items[ListBox1.ItemIndex]);
  ListBox1.Items.Delete(ListBox2.Items [ListBox2.ItemIndex]);
end;

_________________
Gruß
Hansa
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mi 04.06.03 20:37 
Vermutung:

Listbox2.ItemIndex ist wahrscheinlich nicht bzw falsch belegt oder?

Speicher doch den ItemIndex in ne varialbe also z.B. So:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.ListBox1DblClick(Sender: TObject); 
var IIndex: Integer;
begin 
  IIndex := Listbox1.ItemIndex;
  ListBox2.Items.Add (ListBox1.Items[IIndex]); 
  ListBox1.Items.Delete(IIndex); 
end;


Getestet: geht!

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Mi 04.06.03 20:53 
@Mathias: Wie in dem anderen Posting schon geschrieben, ich nehme solche Sachen nie persönlich. Ich habe nur einfach gedacht, mein Code wäre falsch. Vielleicht sollte ich mir einfach mal mehr zutrauen, vor allem, daß ich auch mal etwas richtig posten kann, sollte ich mir zutrauen, denke ich. :lol: Nun ja..

@Hansa: Das sehe ich auch so wie Tweafis. Dein ItemIndex existiert doch nur, wenn du eine Zeile markiert hast. Das müßte dann entweder in deinem Code passieren (sprich, du sagst ItemIndex:=Items.Count) oder du nimmst den Code von Tweafis. Hey, denn der funtkioniert wirklich. :mrgreen:

_________________
Hasta La Victoria Siempre