Suche dringend Hilfe bei Problem mit Radiobuttons und mpeg-Wiedergabe



  • Hallo

    Also hier eine Umsetzung deines letzen Posts

    AnsiString Files[3] = {"C:/test/sheep.mpeg", "C:/test/hotdog.mpeg", "C:/test/roughkick.mpeg"}; // Array deklarieren
    ...
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      MediaPlayer1->FileName = Files[RadioGroup1->ItemIndex];
      }
    

    Dies entspricht logisch deinem Ausschnitt, ob es nun aber auchd as ist was du im sinn hast weiß ich nicht genau.

    bis bald
    akari



  • Okay... Ich hab n bisschen gelesen und das mit den Arrays glaub ich einigermassen begriffen. Aber wenn ich das so schreib wie du eben vorgeschlagen hast, dann berücksichtige ich ja nur eine der beiden RadioGroups. Das abzuspielende Video ergibt sich allerdings aus beiden Radiogroups...
    Ich bin allerdings im Moment auch total übermüdet und muss mich jetzt erstmal hinlegen. Ich mach morgen weiter und werd dann meine (Miss-)Erfolge weiter posten.
    Ich kann dir gar net sagen, wie dankbar ich dir bin, dass du mir bis hier hin schon mal geholfen hast... Ich hoff, du bist morgen auch noch da 🙂

    Gutn8
    Simon



  • Hallo

    Klar gibt es in meinem Beispiel nur die Überprüfung einer Option.
    Ich hab dir doch gesagt, das ich dein Ausschnitt nachgebaut habe, und da gibt es ja auch gerade mal 3 Dateipfade, deren Auwwahl ausschließlich von RadioGroup1 abhängt. Wenn du mal genau beschreibst, welche Optionen in Zusammenhang welchen Dateipfad ergeben sollen, können wir auch deine Auswahl fertigbekommen.

    bis bald
    akari



  • Also... Ich hab zwei RadioGoups mit folgenden Optionen:

    Radio Group1:
    -Motivation hoch
    -Motivation mittel
    -Motivation gering

    Radio Group2:
    -Schlüsselreiz hoch
    -Schlüsselreiz mittel
    -Schlüsselreiz gering

    Welche Kombinationen dann welche Datei aufrufen sollen sieht wie folgt aus:

    Motivation hoch + Schlüsselreiz hoch -> MOhochSRhoch.mpeg
    Motivation hoch + Schlüsselreiz mittel -> MOhochSRmittel.mpeg
    Motivation hoch + Schlüsselreiz gering -> MOhochSRgering.mpeg
    Motivation mittel + Schlüsselreiz hoch -> MOmittelSRhoch.mpeg
    Motivation mittel + Schlüsselreiz mittel -> MOmittelSRmittel.mpeg
    Motivation mittel + Schlüsselreiz gering -> MOmittelSRgering.mpeg
    Motivation gering + Schlüsselreiz hoch -> MOgeringSRhoch.mpeg
    Motivation gering + Schlüsselreiz mittel -> MOgeringSRmittel.mpeg
    Motivation gering + Schlüsselreiz gering -> MOgeringSRgering.mpeg

    Ich hoff, dass das einigermassen verständlich is. Ich weiss nämlich net, wie ich das anders erklären soll.



  • Hallo

    dann ist es doch ganz einfach :

    AnsiString Attrib[3] = {"hoch", "mittel", "gering"};
    ...
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      AnsiString FileName;
      FileName += "MO" + Attrib[RadioGroup1->ItemIndex];
      FileName += "SR" + Attrib[RadioGroup2->ItemIndex];
      FileName += ".mpeg";
      MediaPlayer1->FileName = FileName;
      }
    

    Btw : du solltest deinen Controls sinnvolle Name geben.



  • Don't use globals ...



  • Muss man alles selber machen ? 😉

    void __fastcall TForm1::Button1Click(TObject *Sender) 
    { 
      AnsiString Attrib[3] = {"hoch", "mittel", "gering"};
      AnsiString FileName; 
      FileName = "MO" + Attrib[RadioGroup1->ItemIndex]; 
      FileName += "SR" + Attrib[RadioGroup2->ItemIndex]; 
      FileName += ".mpeg"; 
      MediaPlayer1->FileName = FileName; 
    }
    


  • Hallo...
    Sry, bin gestern auf meinem Schreibtisch schon weggepennt. 😞

    Also ich hab jetzt das ganze mal so gemacht, wie du gesagt hast, akari, also mit Arrays. Dann hab ich den Button "Simulationsdaten berechnen" entfernt und das ganze für die Ereignisse OnClick der Radiogroups eingefügt. Die RadioGroups wurden auch noch umbenannt:
    RadioGroup1 -> MOstaerkeGRP
    RadioGroup2 -> SRstaerkeGRP

    Rausgekommen is folgendes:

    void __fastcall TForm1::MOstaerkeGRPClick(TObject *Sender)
    {
      MediaPlayer1->Eject();
      AnsiString FileName;
      FileName += "C:\\test\\MO" + Attrib[MOstaerkeGRP->ItemIndex];
      FileName += "C:\\test\\SR" + Attrib[SRstaerkeGRP->ItemIndex];
      FileName += ".mpeg";
      MediaPlayer1->FileName = FileName;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::SRstaerkeGRPClick(TObject *Sender)
    {
      MediaPlayer1->Eject();
      AnsiString FileName2;
      FileName2 += "C:\\test\\MO" + Attrib[MOstaerkeGRP->ItemIndex];
      FileName2 += "C:\\test\\SR" + Attrib[SRstaerkeGRP->ItemIndex];
      FileName2 += ".mpeg";
      MediaPlayer1->FileName = FileName2;
    }
    

    So.... Beim bauen krieg ich zumindest schonmal keinen Fehler mehr *freu*
    Allerdings spielt der MediaPlayer nun immer das gleiche Videofile ab. Er reagiert überhaupt nicht auf veränderungen ind den RadioGroups.
    Ich muss zu beginn in der MediaPlayer Komponente selbst eine Datei für die Eigenschaft FileName angeben, da sich das Projekt sonst nicht kompilieren lässt. Diese Datei, die hier angegeben wird ist es auch, die nun immer abgespielt wird.
    Kann es sein, dass die Eigenschaft FileName nicht überschreibbar ist und der MediaPlayer dann immer den Ausgangswert her nimmt?
    Leider hat mich das Lesen der Borland Hilfe auch nicht weiter gebracht.
    Die Dateien existieren alle und es bestehen auch keine Schreibfehler bei der Pfadangabe, oder so (min 1000x nachgeschaut).
    An was kann es denn sonst noch liegen, dass der MediaPlayer immer das gleiche Videofile abspielt?

    Simon

    P.S.: Das mit den Globals änder ich noch, wenn das Programm mal läuft...



  • Hallo

    Du must erstmal die möglicherweise bestehende Wiedergabe beenden und die neue danach auch startem

    MediaPlayer1->Close(); // Alte Wiedergabe beenden
      ...
      MediaPlayer1->FileName = ...; // Neue Datei zuweisen
      MediaPlayer1->Open(); // Neue Datei öffnen
      MediaPlayer1->Play(); // Wiedergabe starten
    

    außerdem brauchst du nicht zwei identische Methoden zur Auswahld er Datei, sondern kannst über den Objektinspektor beide Groupboxen auf ein und dieselbe Methode verweisen lassen.

    bis bald
    akari



  • Ich hab nun folgendes geändert:
    - Eigenschaft Visible der MediaPlayer Komponente auf false gesetzt
    - Einen Button mit dem Namen SimStartButt erstellt um die Wiedergabe zu starten
    - Das Verweisen der beiden RadioGruops auf dieselbe Methode mach ich ebenfalls, wenn das Programm mal läuft, da ich im Moment noch durchblick was das Programm macht (mehr oder weniger) 🙂

    Naja rausgekommen is folgendes:

    void __fastcall TForm1::MOstaerkeGRPClick(TObject *Sender)
    {
      AnsiString FileName;
      MediaPlayer1->Close();
      FileName += "C:\test\MO" + Attrib[MOstaerkeGRP->ItemIndex];
      FileName += "C:\test\SR" + Attrib[SRstaerkeGRP->ItemIndex];
      FileName += ".mpeg";
      MediaPlayer1->FileName = FileName;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::SRstaerkeGRPClick(TObject *Sender)
    {
      AnsiString FileName2;
      MediaPlayer1->Close();
      FileName2 += "C:\test\MO" + Attrib[MOstaerkeGRP->ItemIndex];
      FileName2 += "C:\test\SR" + Attrib[SRstaerkeGRP->ItemIndex];
      FileName2 += ".mpeg";
      MediaPlayer1->FileName = FileName2;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::SimStartButtClick(TObject *Sender)
    {
      MediaPlayer1->Open();
      MediaPlayer1->Play();
    }
    

    Nun bekomm ich aber beim Klicken des Buttons SimStartButt diese Fehlermeldung.
    Der Debugger markiert mir im Code die letzte Zeile (also

    MediaPlayer1->Play()
    

    )
    Die Dateien sind aber alle vorhanden und der Pfad stimmt auch...
    Woran liegt das?

    Simon



  • Wieso sind denn die doppelten Backslashs wieder weg.


  • Mod

    Hallo

    FileName2 += "C:\test\MO" + Attrib[MOstaerkeGRP->ItemIndex];
      FileName2 += "C:\test\SR" + Attrib[SRstaerkeGRP->ItemIndex];
    

    was ist an diesen beiden Zeilen falsch
    (Tip->\)

    Mfg
    Klaus



  • Mit doppelten Backslashes hats auch net funktioniert -> Gleicher Fehler...
    Ich komm mit den Backslashes net so ganz mit, da vorher jemand gesagt hat, dass es so auch geht (oder?)... Aber dann mach ich die halt wieder doppelt... Funktionieren tuts trotzdem net 😞


  • Mod

    Hallo

    was steht denn genau in "MediaPlayer1->FileName"

    Mfg
    Klaus



  • Hallo.

    Nach auswahl der entsprechenden RadioButtons sollte in FileName z.B. C:\\test\\MOgrossSRgross.mpeg stehen...

    Wie sich der Dateiname aus der Auswahl der zwei RadioGroups zusammensetzt sieht so aus:

    Also... Ich hab zwei RadioGoups mit folgenden Optionen:

    Radio Group1:
    -Motivation hoch
    -Motivation mittel
    -Motivation gering

    Radio Group2:
    -Schlüsselreiz hoch
    -Schlüsselreiz mittel
    -Schlüsselreiz gering

    Welche Kombinationen dann welche Datei aufrufen sollen sieht wie folgt aus:

    Motivation hoch + Schlüsselreiz hoch -> MOhochSRhoch.mpeg
    Motivation hoch + Schlüsselreiz mittel -> MOhochSRmittel.mpeg
    Motivation hoch + Schlüsselreiz gering -> MOhochSRgering.mpeg
    Motivation mittel + Schlüsselreiz hoch -> MOmittelSRhoch.mpeg
    Motivation mittel + Schlüsselreiz mittel -> MOmittelSRmittel.mpeg
    Motivation mittel + Schlüsselreiz gering -> MOmittelSRgering.mpeg
    Motivation gering + Schlüsselreiz hoch -> MOgeringSRhoch.mpeg
    Motivation gering + Schlüsselreiz mittel -> MOgeringSRmittel.mpeg
    Motivation gering + Schlüsselreiz gering -> MOgeringSRgering.mpeg

    Ich hoff, dass das einigermassen verständlich is. Ich weiss nämlich net, wie ich das anders erklären soll.

    Hmmm... Der Player soll also quasi je nach Auswahl die entsprechende der 9 Videodateien abspielen...



  • Bist du mal mit dem Debugger durchgegangen und hast kontrolliert was in FileName bzw. FileName2 drin steht? Stimmt der Name und gibt es die Datei da?



  • Ich habs...
    Es muss so aussehen:

    void __fastcall TForm1::MOstaerkeGRPClick(TObject *Sender)
    {
      AnsiString FileName;
      MediaPlayer1->Close();
      FileName += "C:\\test\\MO" + Attrib[MOstaerkeGRP->ItemIndex];
      FileName += "SR" + Attrib[SRstaerkeGRP->ItemIndex];
      FileName += ".mpeg";
      MediaPlayer1->FileName = FileName;
    }
    

    Vorher war es so:

    void __fastcall TForm1::MOstaerkeGRPClick(TObject *Sender)
    {
      AnsiString FileName;
      MediaPlayer1->Close();
      FileName += "C:\test\MO" + Attrib[MOstaerkeGRP->ItemIndex];
      FileName += "C:\test\SR" + Attrib[SRstaerkeGRP->ItemIndex];
      FileName += ".mpeg";
      MediaPlayer1->FileName = FileName;
    }
    

    Bei der alten Version kam dann als Wert für FilenName so etwas raus: "C:\\test\\MOhochC:\\test\\SRhoch.mpeg"
    Und das gits tatsächlich auf meiner Platte net 🙂
    Nun läufts wunderbar *freu*

    Aber eins wär noch ganz interessant... Akari hat schon versucht mir das zu erklären. Und zwar möchte ich gern den Pfad der Videodateien relativ zum Pfad der .exe angeben. Wie mach ich das? Akaris erklärung hab ich net so ganz verstanden...


Anmelden zum Antworten