Autor Beitrag
Mister X-Ray
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win XP, Win 2000
D7 Pers, D2005 Pers
BeitragVerfasst: Di 23.08.05 18:14 
Hallo,

ich hab in meinem schon mal erwähnten Musik-Player einen Fehler gefunden: Er will keine Dateien mit Leerzeichen im Namen.

Das heisst Dateien mit Leerzeichen werden nicht abgespielt, welche ohne allerdings ohne Probleme. ich verwende

mciSendString('OPEN ' + fn + ' TYPE MPEGVIDEO ALIAS datei', nil, 0, 0);

Wie bekomme ich das weg?

Gruß
Mister X-Ray

_________________
Wissen ist Macht, aber nichts wissen macht nichts !
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 23.08.05 18:57 
vielleicht mit
ausblenden Delphi-Quelltext
1:
mciSendString('OPEN ' + quotedstr(fn) + ' TYPE MPEGVIDEO ALIAS datei'nil00);					

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Mister X-Ray Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win XP, Win 2000
D7 Pers, D2005 Pers
BeitragVerfasst: Mi 24.08.05 13:23 
habs jetzt anders gelöst:

ich erstelle eine kopie mit einem anderen namen ohne leerzeichen, und die kopie wird dann abgespielt. Beim Schließen des Programms wird die Kopie gelöscht und fertig ist die Laube...

_________________
Wissen ist Macht, aber nichts wissen macht nichts !
BasicMan33
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win 95, Win XP
D7
BeitragVerfasst: Do 01.09.05 21:55 
Hi

Also @retnyg's Idee geht bei mir nicht und @Mister X-Ray's Idee gefällt mir nicht *g*.
Also muss was anderes her.
Deshalb liefere ich einfach mal ein Stück Code und ihr verbessert es so, dass man es auch ruhigen Gewissens in Programme einbauen kann. OK.

SendMCICommand ist eine Procedure/Funktion, in der der String ausgewerdet wird. Die
lass ich einfach weg, weil sie ja nichts mit dem Problem zu tun hat.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure ...
var buffer : array[0..255of Char;
    filename: PChar;
    Result, i : Integer;
    MusikFile: string;
begin
  // buffer mit Leerzeichen füllen
  for i := 0 to 255 do buffer[i] := ' ';
  // Dateiname für Musikdatei zum Beispiel aus einem OPENDIALOG herausnehmen und in PChar konvertieren
  filename := PChar(OPENMUSIK.Filename);
  // in DOS-Format umwandeln
  Result := GetShortPathName(filename, buffer, strlen(buffer));
  if Result <> 0 then begin
    // !!! kann man hier einfach einen PCHar einem String zuweißen?
    MusikFile := buffer;
    // Dateiname in extra Anführungszeichen setzen
    MusikFile := '"' + MusikFile + '"';
    if MusikFile <> '' then SendMCICommand('play '+MusikFile);
  end;
end;


So auf den ersten Blick gefällt es mir noch nicht wegen der Konvertierungen mit PChar und
String. Deshalb einfach mal die Verbesserungen hier posten. Aber funktionieren tut es bei mir auf jeden Fall so.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Sa 10.09.05 10:56 
@basicman: wenn du mit shortfilename arbeitest, brauchst du keine hochkommas mehr zu verwenden.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
uses MMSystem;

...

procedure SendMCICommand(Cmd: string); 
// Autor: Genival P.Carvalho 
var
  RetVal: Integer;
  ErrMsg: array[0..254of char;
begin
  RetVal := mciSendString(PChar(Cmd), nil00);
  if RetVal <> 0 then
  begin
    {get message for returned value}
    mciGetErrorString(RetVal, ErrMsg, 255);
    MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
  end;
end;

procedure playfile(const filename:string);
var buffer : string; l:integer;
begin
  l:=length(filename);
  setlength(buffer,l);
  GetShortPathName(@filename[1], @buffer[1], l);
  sendmcicommand('play '+buffer);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   SendMCICommand('open waveaudio shareable');
   playfile('C:\inetpub\wwwroot\kopie von dirty.mp3');
   // dateiname mit leerzeichen
   SendMCICommand('close waveaudio');
end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...