TAnimate



  • Hi.

    Ich nutze das TAnimate.
    Wenn ich

    Animate1->Play(0,107,1);
    

    Spielt er mir das AVI ab, bis zum frame 107.
    Wie kann ich herrausfinden, wenn er fertig ist mit dem abspielen oder bei Frame 107 angekommen ist???



  • Guck Dir doch einfach in der BCB Hilfe mal die diversen Ereignisse von TAnimate an. Ohne schon mal mit dieser Kompo gearbeitet zu haben hätte ich nach einem schüchternen Blick in die Hilfe schon eine Idee, was ich ausprobieren könnte 😉



  • Ok, ich habe dieses OnStop gefunden, aber der sendet auch dann, wenn das abgespielt wird 2x.Ich habe das so:

    void __fastcall Tfrm_Intro::Animate1Stop(TObject *Sender)
    {
    ShowMessage("aw");
    }
    

    Es wird insgesamt 3 mal diese MessageBox ausgeben. 2 mal direkt am anfang und am Ende wo es stoppt. Aber was soll das dann bringen wenn es mir direkt an anfang was meldet.. 😕



  • Wenn das Teil wirklich immer am Anfang 2* das OnStop auslöst, würde ich einen Zähler einbauen um diesen, sagen wir mal Bug zu umgehen. Schreib mal im OnStop was in eine Listbox um ganz sicher zu gehen. ShowMessage hält ja den Programmablauf quasi an.



  • Die Eigenschaften:
    Animate1->Active = false;
    Animate1->Filename = NULL;

    Ich habe das jetzt so gemacht:

    __fastcall Tfrm_Intro::Tfrm_Intro(TComponent* Owner)
      : TForm(Owner)
    {
      Caption = Application->Title + " - Intro";
      Animate1->FileName = "Intro.avi";
      Animate1->StartFrame = 0;
      Animate1->StopFrame = 107;
      Animate1->Play(0,107,1);
      Memo1->Lines->Add("After Play");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Tfrm_Intro::Animate1Stop(TObject *Sender)
    {
      Memo1->Lines->Add("Animate1Stop");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Tfrm_Intro::Animate1Start(TObject *Sender)
    {
      Memo1->Lines->Add("Animate1Start");
    }
    //---------------------------------------------------------------------------
    

    Das Memo gibt das dann aus:

    Animate1Stop
    After Play
    Animate1Start
    Animate1Start
    Animate1Stop
    Animate1Start
    Animate1Stop

    [ Dieser Beitrag wurde am 16.03.2003 um 19:47 Uhr von DJ BlackEagle editiert. ]



  • Probier vielleicht noch zur Sicherheit, ob dieses Verhalten bei anderen AVIs auch so auftritt. Dann wirst Du wohl nicht umhin kommen, klare Verhältnisse durch z.B. einen Zähler zu schaffen. Es sei denn, jemand anderst hat noch eine glorreiche Idee. Ich hab eigentlich jetzt keine Lust das Ganze nachzuvollziehen 😉



  • Habs gefunden.
    Habe den Dateinamen doch direkt in den Eigenschaften geschrieben und Active auf false gelassen...

    Nur jetzt habe ich nur ein Problem, mein Splash soll solange da bleiben, bis das Avi fertig ist.
    Dazu habe ich das nun gemacht:

    __fastcall Tfrm_Intro::Tfrm_Intro(TComponent* Owner)
      : TForm(Owner)
    {
      Caption = Application->Title + " - Intro";
      Animate1->Play(0,107,1);
      while(AnimatedStop != true)
      {
        Memo2->Lines->Add("Spielt");
      }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Tfrm_Intro::Animate1Stop(TObject *Sender)
    {
      AnimatedStop = true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Tfrm_Intro::Animate1Start(TObject *Sender)
    {
      AnimatedStop = false;
    }
    //---------------------------------------------------------------------------
    

    Nur bei der while wird das avi nicht mehr abgespielt und die while läuft weiter ohne Ende. Wie kann ich drauf warten bis AnimatedStop den wert true hat?



  • Hab das jetzt uch gefunden.
    Mit Application->ProccessMessage();



  • Supie, dann klappts ja jetzt. Manchmal muss man halt ein wenig "tricksen" 😉


Anmelden zum Antworten