SlideShow Engine main demo

Submitted by GROL on 2 February, 2011 - 03:30

This demo shows how to make and display slide show with using TSlideShowMaker and TFlashViewer

Source archive: sse-main.zip (1.8Mb)
 

 
Some sample source: 
procedure Tform_TEST.BMakeTestClick(Sender: TObject);
 var
    SSE: TSlideShowEngine;
    Slide, Slide2, TextSlide: TSSObject;
    Snd: TSSSound;
    BgSndA: TSSSoundAction;
    A: TSSConditionActions;
    AP: Array [0..3] of TPoint;
    I, W, H: integer;
    EndTime, Duration: longint;
    Font: TFont;
 
 procedure MakeTextLabel;
 begin
   TextSlide := SSE.AddText(Copy(CBParams.Items[i], 4, 255), Font, false);
   A := TextSlide.AddAction(ptLayer, 10, EndTime, Duration div 2, 0);
   A.Glow(4, $FFFFFF, 100, 4, $FFFFFF, 100);
   A.Center(50, 0);
   A.Place(W div 2, 10);
   A.Alpha(0, 100);
   if CBAnchor.Checked then
     SSE.AddAnchor(EndTime);
 end;
 
 procedure HideTextLabel;
 begin
  A := TextSlide.AddAction(ptLayer, 100, EndTime - 2*Duration, Duration div 2, 0);
  A.Alpha(100, 0);
 end;
 
begin
  W := StrToIntDef(EWidth.Text, 400);
  H := StrToIntDef(EHeight.Text, 300);
  SlideShowMaker.Width := W;
  SlideShowMaker.Height := H;
  SlideShowMaker.FPS := 31;
 
  Font := TFont.Create;
  Font.Name := 'Verdana';
  Font.Size := 25;
  Font.Style := [fsBold];
  Font.Color := clMaroon;
 
  SSE := SlideShowMaker.Engine;
 
  SSE.Transparent := not CBg.Checked;
  if CBg.Checked then SSE.BGColor := CBackground.Brush.Color;
 
  SSE.IsLoop := CBLoop.Checked;
  SSE.FullScreen := CBFullScreen.Checked;
 
  if RBControl2.Checked then SSE.ControllerMode := cmStatic else
   if RBControl3.Checked then SSE.ControllerMode := cmPopUp else SSE.ControllerMode := cmNone;
  SSE.ControllerAlpha := StrToIntDef(EAlpha.Text, 100);
  SSE.ControllerColor1 := CControl1.Brush.Color;
  SSE.ControllerColor2 := CControl2.Brush.Color;
  SSE.ControllerLabelColor := CFace.Brush.Color;
  SSE.ControllerShowVolume := CBVolume.Checked;
  SSE.ControllerShowMute := CBVMute.Checked;
  SSE.ControllerScreenModeSwitcher := CBScreenSwitcher.Checked;
 
  SSE.IncludePreloader := CBPreloader.Checked;
  SSE.PreloaderColor := PrColor.Brush.Color;
  SSE.EndDuration := 2000;
  if CBTime.Checked
   then SSE.ControllerTimerShowMode := tmSec
   else SSE.ControllerTimerShowMode := tmNone;
 
  if ControllerExt.Checked and FileExists(ControllerName.Text) then
    SSE.ControllerFileName := ControllerName.Text;
 
  if PreloaderExt.Checked and FileExists(PreloaderName.Text) then
    SSE.PreloaderFileName := PreloaderName.Text;
 
  SSE.SyncToTime := CBParams.Checked[0];
  EndTime := 1000;
  Duration := 1000;
  Slide := nil;
  BgSndA := nil;
  for I := 1 to CBParams.Items.Count - 1 do
    if CBParams.Checked[I] then
      case I of
        1: // place image as background
          SSE.AddImage('bg-tile2.bmp', W, H, imTile).AddAction(ptLayer, 1, 0, 10000).Place(0, 0);
 
        2: // play music as basckground
          BgSndA := SSE.AddBgSound('bg.mp3');
 
        3: begin
          MakeTextLabel;
 
          Slide := SSE.AddFromFile('sl1.jpg');
          // move from left
          A := Slide.AddAction(ptLayer, 2, EndTime, Duration, -100);
          A.Move(W, 0, 0, 0);
 
          // move to up
          A := Slide.AddAction(ptLayer, 2, EndTime + 2*Duration, Duration, 0);
          A.Move(0, 0, 0, -H);
 
          // move to curve 1
          A := Slide.AddAction(ptLayer, 2, EndTime + 3*Duration, 2*Duration, 0);
          A.Scale(50, 50, 50, 50);
          A.Center(50, 50);
          AP[0] := Point(W div 3, -H div 2);
          AP[1] := Point(W div 3, H div 2);
          AP[2] := Point(W div 2, H div 2);
          AP[3] := Point(W - W div 4, H div 2);
          A.MoveToPath(100, true, false, AP);
 
          // move to curve 2
          A := Slide.AddAction(ptLayer, 2, EndTime + 5*Duration, 2*Duration, 0);
          A.Scale(50, 50, 50, 50);
          A.Center(50, 50);
          AP[0] := Point(W - W div 4, H div 2);
          AP[1] := Point(W div 2, H - H div 4);
          AP[2] := Point(W div 4, H div 2);
          AP[3] := Point(W div 2, H div 4);
          A.MoveToPath(100, false, true, AP);
 
          // move to right
          A := Slide.AddAction(ptLayer, 2, EndTime + 7*Duration, Duration, 0);
          A.Scale(50, 50, 50, 50);
          A.Center(50, 50);
          A.Move(W - W div 4, H div 2, W + W div 2, H div 2);
 
          A := Slide.AddAction(ptLayer, 2, EndTime + 8*Duration, Duration, -10, dmRestore);
          A.Move(2 * W, 0, 0, 0);
          A.Skew(100, 0, 0, 0);
 
          EndTime := EndTime + 10*Duration;
 
          HideTextLabel;
        end;
 
        4: begin
          if Slide = nil then
            Slide := SSE.AddFromFile('sl1.jpg');
 
          MakeTextLabel;
 
          // strech from left
          A := Slide.AddAction(ptLayer, 2, EndTime, Duration, -5, dmRestore);
          A.Center(0, 0);
          A.Place(0, 0);
          A.Scale(0, 100, 100, 100);
 
          // scale to upper-right curner
          A := Slide.AddAction(ptLayer, 2, EndTime + 2*Duration, Duration, 0);
          A.Scale(100, 100, 0, 0);
          A.Move(0, 0, W, 0);
 
          // strech from center
          EndTime := EndTime + 4*Duration;
          A := Slide.AddAction(ptLayer, 2, EndTime, Duration, -5);
          A.Center(50, 50);
          A.Place(W div 2, H div 2);
          A.Scale(0, 0, 100, 100);
          A.Rotate(0, 360);
 
          // TV-close effect
          A := Slide.AddAction(ptLayer, 2, EndTime + 2 * Duration, Duration div 2, 0);
          A.Scale(100, 100, 100, 2);
          A := Slide.AddAction(ptLayer, 2, EndTime + 2 * Duration + Duration div 2, Duration div 2, 0);
          A.Scale(100, 2, 2, 2);
          A := Slide.AddAction(ptLayer, 2, EndTime + 3 * Duration, Duration div 4, 0);
          A.Alpha(100, 0);
          EndTime := EndTime + 5 * Duration;
 
          HideTextLabel;
        end;
 
        5: begin // Coloring
          if Slide = nil then
            Slide := SSE.AddFromFile('sl1.jpg');
          MakeTextLabel;
 
          A := Slide.AddAction(ptLayer, 2, EndTime, Duration, 0, dmRestore);
          A.Alpha(0, 100);
          A := Slide.AddAction(ptLayer, 2, EndTime + 2*Duration, Duration, 0);
          A.Saturation(100, 0);
          A := Slide.AddAction(ptLayer, 2, EndTime + 4*Duration, Duration, 0);
          A.RGB(0, 0, 0, 255, 255, 0);
          A := Slide.AddAction(ptLayer, 2, EndTime + 6*Duration, Duration, 0);
          A.RGB(255, 255, 0, -255, -255, 0);
          A := Slide.AddAction(ptLayer, 2, EndTime + 8*Duration, Duration, 0);
          A.RGB(-255, -255, 0, 0, 0, 0);
          A := Slide.AddAction(ptLayer, 2, EndTime + 10*Duration, Duration, 0);
          A.Saturation(0, 100);
          A.Alpha(100, 0);
          EndTime := EndTime + 12 * Duration;
          HideTextLabel;
        end;
 
        6: begin
          if Slide = nil then
            Slide := SSE.AddFromFile('sl1.jpg');
          MakeTextLabel;
          A := Slide.AddAction(ptLayer, 2, EndTime, Duration, 0, dmRestore);
          A.Mosaic(10, 10, mmRandom, false);
          A := Slide.AddAction(ptLayer, 2, EndTime + 2*Duration, Duration, 0);
          A.Shutter(10, 45, true);
          A := Slide.AddAction(ptLayer, 2, EndTime + 4*Duration, Duration, 0, dmRestore);
          A.Zoom(skStar, false, false);
          A := Slide.AddAction(ptLayer, 2, EndTime + 6*Duration, 2*Duration, 0);
          A.Liquid(10, true);
          A := Slide.AddAction(ptLayer, 2, EndTime + 8*Duration, 2*Duration, 0, dmRestore);
          A.Mosaic(7, 7, mmRowByRow, false);
          A := Slide.AddAction(ptLayer, 2, EndTime + 10*Duration, Duration, 0);
          A.Clock(true, true);
 
          EndTime := EndTime + 13 * Duration;
          HideTextLabel;
        end;
 
        7: begin
          if Slide = nil then
            Slide := SSE.AddFromFile('sl1.jpg');
          MakeTextLabel;
 
          A := Slide.AddAction(ptLayer, 3, EndTime + Duration div 2, Duration div 2, 0, dmRestore);
          A.Center(50, 50);
          A.Place(W div 2, H div 2);
          A.Scale(50, 50, 50, 50);
          A := Slide.AddAction(ptLayer, 3, EndTime + Duration, Duration, 0);
          A.Blur(0, 0, 100, 100);
          A := Slide.AddAction(ptLayer, 3, EndTime + 3*Duration, Duration, -5);
          A.Move(W div 2, H div 2, 100, H * 2 div 3);
          A.Blur(100, 100, 0, 0);
          A := Slide.AddAction(ptLayer, 3, EndTime + 4*Duration, Duration div 2, 0);
          A.Alpha(100, 0);
 
          Slide2 := SSE.AddDuplicate(Slide);
          A := Slide2.AddAction(ptLayer, 2, EndTime + 2*Duration, duration, 0, dmRestore);
          A.Center(50, 50);
          A.Place(W div 2, H div 2);
          A.Scale(-50, 50, -50, 50);
          A.Blur(100, 100, 100, 100);
          A.Alpha(0, 100);
 
          A := Slide2.AddAction(ptLayer, 2, EndTime + 3*Duration, Duration, -5);
          A.Blur(100, 100, 0, 0);
          A.Move(W div 2, H div 2, W - 100, H * 2 div 3);
          A := Slide2.AddAction(ptLayer, 2, EndTime + 4*Duration, Duration div 2, 0);
          A.Alpha(100, 0);
          EndTime := EndTime + 6*Duration;
          HideTextLabel;
        end;
 
        8: begin
          if Slide = nil then
            Slide := SSE.AddFromFile('sl1.jpg');
          if CBAnchor.Checked then
            SSE.AddAnchor(EndTime);
          TextSlide := SSE.AddText(Copy(CBParams.Items[i], 4, 255), Font, false);
          A := TextSlide.AddAction(ptLayer, 10, EndTime, Duration, 0);
          A.Center(50, 50);
          A.Place(W div 2, H div 2);
          A := TextSlide.AddAction(ptLayer, 10, EndTime + Duration, 5*Duration , 0);
          A.Shadow(10, 15, 45, 0, 90,{|} 10, 15, 135, 0, 90);
 
          Slide2 := SSE.AddSWF('sun.swf');
          A := Slide2.AddAction(ptLayer, 2, EndTime + Duration - Duration div 2, 0, 0);
          A.Place(0, 10);
          A.Glow(20, $FFFFFF, 100, 20, $FFFFFF, 100);
          A := Slide2.AddAction(ptLayer, 2, EndTime + Duration, 5*Duration, 0);
          A.Move(0, 10, W - Slide2.Width, 10);
 
          A := Slide2.AddAction(ptLayer, 2, EndTime + 6 * Duration, Duration, 0);
          A.Alpha(100, 0);
 
          EndTime := EndTime + 8*Duration;
          HideTextLabel;
        end;
 
        9: begin
          Slide2 := SSE.AddSWF('sun.swf');
          MakeTextLabel;
 
          A := Slide2.AddAction(ptLayer, 2, EndTime, Duration, 0);
          A.Center(50, 50);
          A.Place(W div 2, H - Slide2.Height);
 
          AP[0] := Point(W div 2, H - Slide2.Height);
          AP[1] := Point(W - 100, H div 2);
          AP[2] := Point(W div 2, Slide2.Height);
          AP[3] := Point(100, H div 2);
          A := Slide2.AddAction(ptLayer, 2, EndTime + Duration, 8 * Duration, 0);
          A.MoveToPath(100, false, true, AP);
 
          A := Slide2.AddAction(ptLayer, 2, EndTime + Duration, 4 * Duration, 0);
          A.Scale(100, 100, 10, 10);
          A := Slide2.AddAction(ptLayer, 2, EndTime + 5*Duration, 4 * Duration, 0);
          A.Scale(10, 10, 100, 100);
 
          A := Slide2.AddAction(ptLayer, 2, EndTime + 10*Duration,  Duration, 0);
          A.Move(W div 2, H - Slide2.Height, Slide2.Width div 2, H - Slide2.Height);
          A := Slide2.AddAction(ptLayer, 2, EndTime + 11*Duration,  Duration, 0);
          A.Move(Slide2.Width div 2, H - Slide2.Height, W + Slide2.Width, H - Slide2.Height);
 
 
          Snd := SSE.AddSound('sun.mp3');
          With Snd.Play(EndTime, 12*Duration) do
//          With Snd.Play(EndTime, 100) do
           begin
             Volume(EndTime + Duration, 4 * Duration, 100, 20);
             Volume(EndTime + 5*Duration, 4 * Duration, 20, 100);
             Pan(EndTime + 10*Duration,  Duration, 0, -100);
             Pan(EndTime + 11*Duration, Duration, -100, 100);
           end;
          if BgSndA <> nil then
            begin
              BgSndA.Volume(EndTime - 2 * Duration, 2 * Duration, 100, 30);
              BgSndA.Volume(EndTime + 10 * Duration, 2 * Duration, 30, 100);
            end;
          EndTime := EndTime + 13*Duration;
          HideTextLabel;
        end;
      end;
 
  if CBStopPoint.Checked then
    SSE.AddStopPoint(SSE.Duration * StrToIntDef(EStopPoint.Text, 50) div 100);
 
  SlideShowMaker.Make;
 
  Font.Free;
end;