Diese Klasse läßt sich nur unter Win32 verwenden und kapselt das Animationssteuerelement dieser Zielplattform. In diesem kann man ein AVI-Clip (AVI=Audio Video Interleaved) ablaufen lassen. Das Abspielen des AVI-Clips erfolgt im Hintergrund, d.h der aktuelle Thread wird weiter ausgeführt. Leider lassen sich nur Clips ohne Ton verwenden. Ebenso darf die keine Komprimierung, außer der RLE-Komprimierung, auf die Quelldatei des AVI-Clips angewendet worden sein.
|
| TAnimateCtrl Teilhierarchie |
TAnimateCtrl(TWindow* parent, int id, int x, int y, int w, int h, TModule* module = 0);
| Parameter | Bedeutung |
|---|---|
| parent | Übergeordnetes Fenster. |
| id | Eindeutige ID des Kontrollelements |
| x,y | Position im Clientbereich des übergeordneten Fensters. |
| w | Breite des Kontrollelements. |
| h | Höhe des Kontrollelements. |
| module | Zeiger auf die Modul- oder Anwendungsinstanz. Der Vorgabewert ist 0. |
TAnimateCtrl(TWindow* parent, int resourceId, TModule* module = 0);
bool Open(char far* fileOrRes);
Diese Funktion öffnet eine AVI-Datei und zeigt den ersten Frame an. fileOrRes kann entweder eine Ressourcen-ID oder ein Pfad einer AVI-Datei sein. Wird für fileOrRes der Wert 0 angegeben, wird die AVI-Datei geschlossen und aus dem Speicher entfernt bzw. die Ressource entfernt.
bool Play(uint16 start = 0, uint16 end = -1, uint repeat = 1);
Mit dem Aufruf von Play wird der AVI-Clip abgespielt. start bezeichnet den Index des ersten zu spielenden Frames. Standardvorgabe ist 0, womit der erste Frame bezeichnet wird, da Frames mit 0 beginnen. end bezeichnet den Index des letzten Frames (Vorgabe ist -1). In repeat kann angegeben werden, wie oft der AVI-Clip abgespielt werden soll. Dieser Parameter hat den Vorgabewert 1, was bedeutet das der Clip nur einmal gespielt werden soll. Mit der Angabe von -1 kann aber festgelegt werden, daß dieser unendlich oft wiederholt werden soll. Der AVI-Clip darf maximal 65536 Frames enthalten.
| Besitzt das Kontrollelement den Stil ACS_AUTOPLAY wird das Clip automatisch abgespielt, sobald es mit Open geöffnet wurde. |
bool Seek(uint16 frame);
Sucht nach dem in frame angegebenen Frame-Index der zwischen 0 und 65.536 liegen muß. Wenn der Frame-Index vorhanden ist, wird true zurückgeliefert.
void Stop();
Stoppt das Abspielen der aktuellen AVI-Datei.
![]() |
| Animation mit TAnimateCtrl |
In obiger Abbildung sehen Sie die Animation unseres nachfolgenden Beispielprogramms. Wird der Start-Schalter betätigt, wird die Animation gestartet und solange ausgeführt, bis der Stop-Schalter betätigt wird. Nach dem Stoppen des AVI-Clips wird über einen Aufruf von Seek(0) wieder auf den Anfang des Clips gesprungen. Zum Erstellen von AVI-Clips benötigen sie ein Programm das in der Lage ist AVI-Dateien (Video for Windows) zu produzieren.
| // Beispielprogramm ANIMAT |
| // Datei ANIMAT.H |
| #if !defined(__ANIMAT_H) |
| #define __ANIMAT_H |
| #include <owl\applicat.h> |
| #include <owl\framewin.h> |
| #include <owl\animctrl.h> |
| #include <owl\button.h> |
| #define AVIPATH "SHRED.AVI" |
| #define ID_ANIMAT 100 |
| #define ID_STARTBTN 120 |
| #define ID_STOPBTN 121 |
| class CAnimateWindow : public TWindow |
| { |
TAnimateCtrl* anim; |
TButton* start; |
TButton* stop; |
bool runAnimate; |
public: |
CAnimateWindow(TWindow* parent=0, const char far* title=0, TModule* module=0); |
void StartAnimate(); |
void StopAnimate(); |
protected: |
void SetupWindow(); |
DECLARE_RESPONSE_TABLE(CAnimateWindow); |
| }; |
| class CAnimateApp : public TApplication |
| { |
public: |
CAnimateApp() : TApplication() {} |
void InitMainWindow(); |
| }; |
| #endif // __ANIMAT_H |
| // Beispielprogramm ANIMAT |
| // Datei ANIMAT.CPP |
| #include "animat.h" |
| DEFINE_RESPONSE_TABLE1(CAnimateWindow, TWindow) |
EV_COMMAND(ID_STARTBTN, StartAnimate), |
EV_COMMAND(ID_STOPBTN, StopAnimate), |
| END_RESPONSE_TABLE; |
| CAnimateWindow::CAnimateWindow(TWindow* parent, const char far* title, TModule* module) : |
TWindow(parent, title, module), runAnimate(0) |
| { |
anim = new TAnimateCtrl(this, ID_ANIMAT, 50, 50, 300, 200); |
start = new TButton(this, ID_STARTBTN, "Start", 50, 255, 100, 30, true); |
stop = new TButton(this, ID_STOPBTN, "Stop", 250, 255, 100, 30); |
Attr.W = 400; |
Attr.H = 350; |
| } |
| void CAnimateWindow::StartAnimate() |
| { |
if( runAnimate ) |
return; |
if( anim->Open(AVIPATH) ) { |
anim->Play(0, -1, -1); |
runAnimate = true; |
start->EnableWindow(false); |
stop->EnableWindow(true); |
} |
else |
MessageBox("Fehler beim Öffnen der AVI-Datei!", "Fehler", MB_ICONEXCLAMATION | MB_OK); |
| } |
| void CAnimateWindow::StopAnimate() |
| { |
if( runAnimate ) { |
anim->Stop(); |
anim->Seek(0); |
runAnimate = false; |
start->EnableWindow(true); |
stop->EnableWindow(false); |
} |
| } |
| void CAnimateWindow::SetupWindow() |
| { |
TWindow::SetupWindow(); |
stop->EnableWindow(false); |
| } |
| void CAnimateApp::InitMainWindow() |
| { |
SetMainWindow(new TFrameWindow(0, "Beispiel ANIMAT", new CAnimateWindow, true)); |
GetMainWindow()->EnableKBHandler(); |
| } |
| int OwlMain(int , char*[]) |
| { |
CAnimateApp app; |
return app.Run(); |
| } |
Stand: 22.07.99 11:34:37
© 1998,1999 by
Hans Joachim Kiefer, hajokiefer@handshake.de