unit Movie;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TMovie = class(TImage)
  private
    { Private-Deklarationen }
    Nr: Integer;
    PfadName,
    BildName: String;
    procedure GetNr (DateiName: String; Max: Integer);
    procedure GetImage (DateiName: String);
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    procedure ShowImage (DateiName: String);
    function MoveImage (DateiName: String; Anzahl: Byte): Boolean;
    function TurnImage (DateiName: String): Boolean;
    function TwistImage (DateiName: String; Anzahl: Byte): Boolean;
    procedure HideImage;
  published
    { Published-Deklarationen }
    property Bild: String read BildName write BildName;
end;

procedure Register;

implementation

procedure TMovie.GetNr (DateiName: String; Max: Integer);
begin
  PfadName := Copy (Dateiname, 1, Length(DateiName)-5);
  try
    Nr := StrToInt (Copy (Dateiname, Length(DateiName)-4, 1));
  except
    Nr := -1;
  end;
  if Nr > Max then Nr := 1;
end;

procedure TMovie.GetImage (DateiName: String);
begin
  Picture.LoadFromFile (DateiName);
  sleep (150);
  Refresh;
end;

procedure TMovie.ShowImage (DateiName: String);
begin
  Show;
  Picture.LoadFromFile (DateiName);
  BildName := DateiName;
end;

function TMovie.MoveImage (DateiName: String; Anzahl: Byte): Boolean;
var i: Integer;
begin
  // Nummer des aktuellen Bildes ermitteln
  GetNr (Dateiname, 4);
  // ggf. Methode verlassen
  if Nr = -1 then
  begin
    MoveImage := false; exit;
  end;
  // Nacheinander Bild und Gegenstück laden und zeigen
  Show;
  for i := 1 to Anzahl do
  begin
    GetImage (DateiName);
    GetImage (PfadName + IntToStr(Nr+4) + '.bmp');
  end;
  // ggf. Anfangsfigur wieder zeigen
  if BildName <> '' then GetImage (BildName);
  MoveImage := true;
end;

function TMovie.TurnImage (DateiName: String): Boolean;
var i: Integer;
begin
  // Nummer des aktuellen Bildes ermitteln
  GetNr (Dateiname, 5);
  // ggf. Methode verlassen
  if Nr = -1 then
  begin
    TurnImage := false; exit;
  end;
  // Aufeinanderfolge Bilder laden und zeigen
  Show;
  for i := Nr to Nr+4 do
    GetImage (PfadName + IntToStr(i) + '.bmp');
  // ggf. Anfangsfigur wieder zeigen
  if BildName <> '' then GetImage (BildName);
  TurnImage := true;
end;

function TMovie.TwistImage (DateiName: String; Anzahl: Byte): Boolean;
var i: Integer;
begin
  // Nummer des aktuellen Bildes ermitteln
  GetNr (DateiName, 8);
  // ggf. Methode verlassen
  if Nr = -1 then
  begin
    TwistImage := false; exit;
  end;
  // Bilder in zufälliger Reihenfolge laden und zeigen
  Show;
  for i := 1 to Anzahl do
    // verwendet alle Figuren von 01.bmp bis 08.bmp
    GetImage (PfadName + IntToStr(random(9)) + '.bmp');
  // ggf. Anfangsbild wieder zeigen
  if BildName <> '' then GetImage (BildName);
  TwistImage := true;
end;

procedure TMovie.HideImage;
begin
  Hide;
end;

procedure Register;
begin
  RegisterComponents('Zusätzlich', [TMovie]);
end;

end.
