Entwickler-Ecke

Multimedia / Grafik - mciSendString will keine Leerzeichen?


Mister X-Ray - Di 23.08.05 18:14
Titel: mciSendString will keine Leerzeichen?
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


retnyg - Di 23.08.05 18:57

vielleicht mit

Delphi-Quelltext
1:
mciSendString('OPEN ' + quotedstr(fn) + ' TYPE MPEGVIDEO ALIAS datei'nil00);                    


Mister X-Ray - 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...


BasicMan33 - 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.


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 - Sa 10.09.05 10:56

@basicman: wenn du mit shortfilename arbeitest, brauchst du keine hochkommas mehr zu verwenden.

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;