[Kylix] TAnimate mit Gif



  • Hallo,

    ich habe ein Problem mit GIF-Animationen unter Kylix 3 Pro. Die TAnimate-Komponente bei Kylix arbeitet mit Gif's. Leider bekomme ich es nicht hin, diese Gif's an einem bestimmten Fram anzuhalten. Egal was ich mache, nach dem Anhalten springt das Gif wieder auf den Startframe. Die einzige Variante, die halbwegs funktioniert, ist innerhalb einer while-Schleife:

    while (Animate1->Paused()==false)
           {
           Application->ProcessMessages();
           i=Animate1->CurrentFrame();
           if (i==22)
              {
              Animate1->Pause();
              }
           }
    

    Allerdings darf in diesem Programm keine while-Schleife, die irgendeine zeitliche Verzögerung hervorruft laufen, weil das Programm nebenher ständig mit diversen Schnittstellen kommuniziert und dabei nix verloren gehen darf.

    So "simple" Sachen wie:

    Animate1->Play(1,22,1);
    

    laufen leider nur wie ganz oben beschrieben.

    Geht das auch irgendwie anders, oder ist das ein Kylix-Problem?



  • Was willst du denn eigentlich erreichen, wie soll das Ganze im laufenden Betrieb aussehen?



  • Hi,

    ich habe eine Animation mit ca. 90 Einzelbildern (zu sehen unter http://www.embesso.com/Animation.gif )
    Die Animation kann drei "Zustände" darstellen und soll für eine Art Gewinnspiel eingesetzt werden. Also gibt es die drei Zustände Anfang, Gewinn, Verlust. Anfang bedeutet den Startframe der Animation, Gewinn ist bei Bild 65, Verlust bei Bild 22. Die Animation soll im Grunde immer durchlaufen, bis irgendetwas die verschiedenen Zustände aktiviert. Dann soll die Animation, egal wo sie gerade steht, genau bis zu dem entsprechenden Bild laufen und da stehen bleiben. Das tu sie im Grunde auch, fällt aber dann sofort auf den Startframe zurück.

    mfG, Jens

    [ Dieser Beitrag wurde am 27.06.2003 um 11:16 Uhr von Nix editiert. ]

    [ Dieser Beitrag wurde am 27.06.2003 um 11:17 Uhr von Nix editiert. ]



  • mehrere bilder nehmen?



  • Original erstellt von Sunday:
    mehrere bilder nehmen?

    Ja, das ist der Workaround, den ich auch gerade nutze. Allerdings ist das nicht so schön, denn das Umschalten zwischen verschiedenen Animationen bringt ein sehr unschönes Flackern unter X.
    Ausserdem würde ich gern wissen, warum es nicht funktioniert, wie es laut Borland-Handbuch bzw. -Hilfe sollte.

    mfG, Jens

    [ Dieser Beitrag wurde am 27.06.2003 um 11:51 Uhr von Nix editiert. ]



  • Hab das mal eben ausprobiert und es funktioniert eigentlich ohne Probleme:

    //---------------------------------------------------------------------------
    #include <clx.h>
    #include <System.hpp>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.xfm"
    TForm1 *Form1;
    int tf = -1;  // target frame
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
      Randomize();
      Animate1->Play(1, 0, -1);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if (Animate1->Paused())
        Animate1->Unpause();
      else
      {
        Button1->Enabled = false;
        switch (rand() % 2) // game result
        {
          case 0 : tf = 1;
            break;
          case 1 : tf = 22;
            break;
          case 2 : tf = 65;
        }
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Animate1StatusChange(TObject *Sender,
          TMovieStatus Status)
    {
      int cf = Animate1->CurrentFrame();  // current frame
      Caption = WideString(cf);
    
      if (cf == tf)
      {
        Animate1->Pause();
        Button1->Enabled = true;
        tf = -1;
      }
    }
    //---------------------------------------------------------------------------
    

    <edit>Noch etwas aufgeräumt.</edit>

    [ Dieser Beitrag wurde am 27.06.2003 um 13:23 Uhr von Jansen editiert. ]



  • Original erstellt von Jansen:
    Hab das mal eben ausprobiert und es funktioniert eigentlich ohne Probleme:

    Danke! OnStatusChange war das richtige Stichwort! Da habe ich überhaupt nicht dran gedacht...

    mfG, Jens


Anmelden zum Antworten