TAnimateCtrl |
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(); |
} |
Übersicht |
Stand: 22.07.99 11:34:37
© 1998,1999 by Hans Joachim Kiefer, hajokiefer@handshake.de