Ja, es ist böse... es wäre für Dich auch leichter, Fehler zu finden, wenn der Code besser wird. Das es nicht von heute auf morgen geht ist klar.
Das Problem ist zumindest für mich, das es nicht leicht ist, die arbeitsweise Deines Codes zu durchschauen, wenn z.B. schon eine StopProc gar nicht Stoppt, sondern startet?
Irgendwo wird die ganze Aktion (zu früh) ausgelöst, der Auslöse-Code scheint immer noch zu fehlen!?
***
Etwas hätte ich dann noch
- Filename änderst Du am Anfang, also nur einmal zuweisen an SaveDialog1 nötig
- StringReplace Sammlung könnte man anders lösen
- Du fügst ständig Root, CCRDir und u.U. noch ChannelDir zusammen, ohne das die sich inwischen geändert haben. Warum nicht gleich den komplette Pfad in der Variable CCDir bzw. ChannelDir ablegen?
Könnte so aussehen (ohne Gewähr, wollte If then's vertehen, dabei ist es entstanden):
Delphi-Quellcode:
procedure TForm1.StopRec;
var
Root, CCRDir, ChannelDir, FileName :
String;
i : Integer;
begin
Root := GetSpecialFolderForMP3(
Handle, CSIDL_PERSONAL);
CCRDir := Root +'
\'+ '
CCRadio Recordings';
ChannelDir := Label4.Caption;
FileName:=FormatDateTime('
dd.mm.yy', date) + '
- ' + FormatDateTime('
hh.nn.ss', time) + '
.mp3';
SaveDialog1.FileName := FileName;
for i := Length(ChannelDir)
downto 1
do
if Pos(ChanelDir[i], '
\/:*?"<>|.') > 0
then Delete(ChannelDir,1,1);
// Ok, das muss nach bereinigen zusammen
ChannelDir := CCDir +'
\'+ ChannelDir;
if DirectoryExists(CCRDir)
then
begin
if DirectoryExists(ChannelDir)
then
begin
Filestream:=TFileStream.Create(ChannelDir + '
\' + FileName, fmCreate);
end else if (
not CreateDir(ChannelDir))
then
begin
if SaveDialog1.Execute
then //WaveStream.SaveToFile(SaveDialog1.FileName);
end else
begin
CreateDir(ChannelDir);
Filestream:=TFileStream.Create(ChannelDir + '
\' + FileName, fmCreate);
end;
end else if (
not CreateDir(CCRDir))
then
begin
if SaveDialog1.Execute
then //WaveStream.SaveToFile(SaveDialog1.FileName);
end else
begin
CreateDir(CCRDir);
if DirectoryExists(ChannelDir)
then
begin
Filestream:=TFileStream.Create(ChannelDir + '
\' + FileName, fmCreate);
end else if (
not CreateDir(ChannelDir))
then
begin
if SaveDialog1.Execute
then //WaveStream.SaveToFile(SaveDialog1.FileName);
end else
begin
CreateDir(ChannelDir);
Filestream:=TFileStream.Create(ChannelDir + '
\' + FileName, fmCreate);
end;
end;
//RecordStatus:=False;
end;
Dabei hab' ich irgendwann aufgegeben, was die Orgie mit den If then unterm Strich genau macht...
€: Waren ein paar Fehler drin, sollte aber nicht funktionsfähig sein, sondern nur (für mich) das lesen erleichtern!