UDemo.pas
上传用户:raido2005
上传日期:2022-06-22
资源大小:5044k
文件大小:36k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. //*******************************************************//
  2. //                                                       //
  3. //                      DelphiFlash.com                  //
  4. //         Copyright (c) 2004-2006 FeatherySoft, Inc.    //
  5. //                    info@delphiflash.com               //
  6. //                                                       //
  7. //*******************************************************//
  8. //  Description: Main demo
  9. //  Last update: 20 jun 2006
  10. {$I defines.inc}
  11. unit UDemo;
  12. interface
  13. uses
  14.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  15.   Dialogs, OleCtrls, ExtCtrls, ComCtrls,
  16.   StdCtrls, Buttons, Menus,
  17.   ShockwaveFlashObjects_TLB, ShockwaveEx, FlashObjects, SWFObjects,
  18.   SWFTools, FLV;
  19. type
  20.   TmDemo = class(TForm)
  21.     P1: TPanel;
  22.     Splitter: TSplitter;
  23.     Pages: TPageControl;
  24.     P2: TPanel;
  25.     eName: TEdit;
  26.     bBrowse: TSpeedButton;
  27.     P3: TPanel;
  28.     P4: TPanel;
  29.     CBCompr: TCheckBox;
  30.     Bevel1: TBevel;
  31.     bPlay: TSpeedButton;
  32.     bPause: TSpeedButton;
  33.     TrackBar: TTrackBar;
  34.     bReweind: TSpeedButton;
  35.     TabSound: TTabSheet;
  36.     SndName: TEdit;
  37.     bSndBrowse: TSpeedButton;
  38.     Label1: TLabel;
  39.     sndVariant: TRadioGroup;
  40.     lFrames: TLabel;
  41.     TimerSWF: TTimer;
  42.     SndEvParam: TGroupBox;
  43.     Label2: TLabel;
  44.     sndLoop: TEdit;
  45.     cbSyncNoMultiple: TCheckBox;
  46.     TabShape: TTabSheet;
  47.     rvShape: TRadioGroup;
  48.     FillShape: TRadioGroup;
  49.     GroupBox1: TGroupBox;
  50.     cbLine: TCheckBox;
  51.     UseA: TCheckBox;
  52.     ImgName: TEdit;
  53.     Label3: TLabel;
  54.     BrowsImg: TSpeedButton;
  55.     TabButton: TTabSheet;
  56.     Label4: TLabel;
  57.     EOpenUtr: TEdit;
  58.     TabText: TTabSheet;
  59.     StaticText: TEdit;
  60.     BFont: TButton;
  61.     FontDialog: TFontDialog;
  62.     EditText: TEdit;
  63.     MemoHTML: TMemo;
  64.     HTMLBrowse: TSpeedButton;
  65.     RBText1: TRadioButton;
  66.     RBText2: TRadioButton;
  67.     RBText3: TRadioButton;
  68.     LGetText: TLabel;
  69.     TabTransform: TTabSheet;
  70.     FlashPlayer: TShockwaveFlashEx;
  71.     Trans2: TCheckBox;
  72.     Trans1: TCheckBox;
  73.     Trans3: TCheckBox;
  74.     Trans4: TCheckBox;
  75.     TabSprite: TTabSheet;
  76.     Sprite1: TCheckBox;
  77.     Sprite2: TCheckBox;
  78.     TabSheet1: TTabSheet;
  79.     Label5: TLabel;
  80.     StreamBox: TGroupBox;
  81.     CBDuration: TCheckBox;
  82.     Label6: TLabel;
  83.     SDuratiom: TEdit;
  84.     cbProtect: TCheckBox;
  85.     EPassw: TEdit;
  86.     FntEmbed: TCheckBox;
  87.     TabSheet2: TTabSheet;
  88.     RBMorphFill: TRadioGroup;
  89.     CBLineM: TCheckBox;
  90.     TabVIdeo: TTabSheet;
  91.     z: TGroupBox;
  92.     VCBoxPlace: TCheckBox;
  93.     VCBoxWriteFrame: TCheckBox;
  94.     VSTStartframe: TStaticText;
  95.     VSTY: TStaticText;
  96.     VEStartFrame: TEdit;
  97.     VEX: TEdit;
  98.     VEY: TEdit;
  99.     VLabelX: TLabel;
  100.     VFileEdit: TEdit;
  101.     VFileButton: TSpeedButton;
  102.     Label7: TLabel;
  103.     VSoundEnableChecker: TCheckBox;
  104.     CBPreloader: TCheckBox;
  105.     bMake: TBitBtn;
  106.     ASSource: TRadioGroup;
  107.     TabXML: TTabSheet;
  108.     EXML: TRichEdit;
  109.     GroupBox2: TGroupBox;
  110.     Label8: TLabel;
  111.     CBBlend: TComboBox;
  112.     Label9: TLabel;
  113.     CBFilter: TComboBox;
  114.     procedure bBrowseClick(Sender: TObject);
  115.     procedure FormCreate(Sender: TObject);
  116.     procedure bMakeClick(Sender: TObject);
  117.     procedure P4Resize(Sender: TObject);
  118.     procedure P2Resize(Sender: TObject);
  119.     procedure P3Resize(Sender: TObject);
  120.     procedure TimerSWFTimer(Sender: TObject);
  121.     procedure bSndBrowseClick(Sender: TObject);
  122.     procedure TrackBarChange(Sender: TObject);
  123.     procedure bPauseClick(Sender: TObject);
  124.     procedure bPlayClick(Sender: TObject);
  125.     procedure bReweindClick(Sender: TObject);
  126.     procedure FormDestroy(Sender: TObject);
  127.     procedure BrowsImgClick(Sender: TObject);
  128.     procedure BFontClick(Sender: TObject);
  129.     procedure HTMLBrowseClick(Sender: TObject);
  130.     procedure CBDurationClick(Sender: TObject);
  131.     procedure CBLineMClick(Sender: TObject);
  132.     procedure RBMorphFillClick(Sender: TObject);
  133.     procedure VFileButtonClick(Sender: TObject);
  134.     procedure cbProtectClick(Sender: TObject);
  135.   private
  136.     { Private declarations }
  137.     FLV: TFLVData;
  138.     procedure CustomPlace (be:TBitsEngine; P: TWriteFrameInfo; Tr: TFlashPlaceObject);
  139.     procedure CustomWrite (be:TBitsEngine; P: TWriteFrameInfo);
  140.     procedure CustomWriteFrame(sender: TSWFObject; BE: TBitsEngine);
  141.   public
  142.     { Public declarations }
  143.     prgChange : boolean;
  144.     GetEditValueState: byte; // 0 - no get  1 - prepare   2 - geting
  145.     MP3Duration : single;
  146.     TmpName: string;
  147.    end;
  148. var
  149.   mDemo: TmDemo;
  150. implementation
  151. {$R *.dfm}
  152. Uses SWFConst, SoundReader, ImageReader, ExtDlgs, JPEG,
  153.      FontReader;
  154. const
  155.   pShape = 0;
  156.   pSound = 1;
  157.   pButton = 2;
  158.   pText = 3;
  159.   pTransform = 4;
  160.   pSprite = 5;
  161.   PScript = 6;
  162.   pMorph = 7;
  163.   pVideo = 8;
  164.   pXML = 9;
  165.   
  166. procedure TmDemo.CustomPlace (be:TBitsEngine; P: TWriteFrameInfo; Tr: TFlashPlaceObject);
  167. begin
  168.   Tr.ColorTransform.addA := - P.Frame;
  169.   Tr.SetPosition(TR.TranslateX + P.Frame, TR.TranslateY + P.Frame*2);
  170. end;
  171. procedure TmDemo.CustomWriteFrame(sender: TSWFObject; BE: TBitsEngine);
  172. begin
  173.   With FLV.Frame[TSWFVideoFrame(sender).FrameNum] do
  174.    begin
  175.     if FLV.Header.CodecInfo = 3
  176.       then be.WriteByte((byte(FLV.Header.KeyFrame) shl 4)+FLV.Header.CodecInfo);
  177.       FLV.Data.Position := Start;
  178.       BE.BitsStream.CopyFrom(FLV.Data, Len);
  179.    end;
  180. end;
  181. procedure TmDemo.CustomWrite(be:TBitsEngine; P: TWriteFrameInfo);
  182. var
  183.   l, i: Cardinal;
  184.   VFrame: TSWFVIdeoFrame;
  185.   PlaceMatrix: TSWFMatrix;
  186.   VDefStream: TSWFDefineVideoStream;
  187.   PlaceStream: TSWFPlaceObject2;
  188. begin
  189.     PlaceStream:= TSWFPlaceObject2.Create;
  190.     if P.Frame = 0 then
  191.     begin
  192.       VDefStream := TSWFDefineVideoStream.Create;
  193.       VDefStream.CharacterID:=P.ID;
  194.       VDefStream.CodecID:=FLV.Header.CodecInfo;
  195.       VDefStream.NumFrames:=FLV.Header.FrameCount;
  196.       VDefStream.Width:=FLV.Header.XDim;
  197.       VDefStream.Height:=FLV.Header.YDim;
  198.       VDefStream.WriteToStream(BE);
  199.       VDefStream.Free;
  200.       PlaceStream.Depth := P.Depth;
  201.       PlaceStream.CharacterId := P.ID;
  202.     end else
  203.     begin
  204.       PlaceStream.PlaceFlagMove:=True;
  205.       PlaceStream.Depth := P.Depth;
  206.            i:=FLV.Header.YDim*P.Frame;
  207.            if i > 40*FLV.Header.YDim then i:=40*FLV.Header.YDim;
  208.            l:= P.Frame; if l > 90 then l:= 90;
  209.            PlaceMatrix := PlaceStream.Matrix;
  210.            PlaceMatrix.SetTranslate(20, i);
  211.            PlaceMatrix.SetRotate(l);
  212.       PlaceStream.Ratio:= P.Frame;
  213.     end;
  214.     VFrame := TSWFVIdeoFrame.Create;
  215.     VFrame.StreamID := P.ID;
  216.     VFrame.FrameNum := P.Frame mod FLV.Header.FrameCount;
  217.     VFrame.OnDataWrite := CustomWriteFrame;
  218.     VFrame.WriteToStream(be);
  219.     VFrame.Free;
  220.     PlaceStream.ColorTransform.addA := - 100;
  221.     PlaceStream.WriteToStream(be);
  222.     PlaceStream.Free;
  223. end;
  224. procedure TmDemo.FormCreate(Sender: TObject);
  225.  var ACH: array [0..255] of char;
  226. begin
  227.   TmpName := ExtractFilePath(ParamStr(0));
  228.   eName.Text := TmpName + 'demo.swf';
  229.   prgChange := false;
  230.   bReweind.Down := FlashPlayer.Loop;
  231.   sndName.Text := TmpName + 'stream.mp3';
  232.   imgName.Text := TmpName + 'img.jpg';
  233.   GetWindowsDirectory(ACH, SizeOf(ACH));
  234.   TmpName := string(ACH) + 'Temptemp.swf';
  235.   CreateEmptySWF(TmpName, WithoutA(cswfWhite));
  236.   Pages.TabIndex := 0;
  237.   MP3Duration := 21.92;
  238.   SDuratiom.Text := Format('%2.2f', [MP3Duration]);
  239. end;
  240. procedure TmDemo.FormDestroy(Sender: TObject);
  241. begin
  242.   DeleteFile(TmpName);
  243. end;
  244. procedure TmDemo.bBrowseClick(Sender: TObject);
  245. begin
  246.   With TSaveDialog.Create(self) do
  247.     begin
  248.       Options := Options + [ofOverwritePrompt];
  249.       Filter := 'SWF|*.swf';
  250.       DefaultExt := 'swf';
  251.       FileName := eName.Text;
  252.       if Execute then eName.Text := FileName;
  253.       Free;
  254.     end;
  255. end;
  256. procedure TmDemo.bMakeClick(Sender: TObject);
  257.   var Movie: TFlashMovie;
  258.     I: Integer;
  259.       il, il2: integer;
  260.       Shapes: array [1..12] of TFlashShape;
  261.       C: recRGBA;
  262.       AP: array [0..6] of TPoint;
  263.       AC: array [1..4] of recRGBA;
  264.       Img: TFlashImage;
  265.       But: TFlashButton;
  266.       Txt: TFlashText;
  267.       Sprite: TFlashSprite;
  268.       Fnt: TFlashFont;
  269.       FCh: TFlashChar;
  270.       balpha: byte;
  271.       TransX, TransY: integer;
  272.       BDC, OFH: THandle;
  273.       Morph: TFlashMorphShape;
  274.       Video: TFlashVideo;
  275.       PV, PV2: TFlashPlaceVideo;
  276.       _label1: TSWFOffsetMarker;
  277.       PStr: PChar;
  278. begin
  279.   Randomize;
  280.   bPlay.Enabled := true;
  281.   bPause.Enabled := true;
  282.   bReweind.Enabled := true;
  283.   GetEditValueState := 0;
  284.   LGetText.Caption := '';
  285.   Movie := TFlashMovie.Create(0, 0, 400 * twips, 400 * twips, 12);
  286.   Movie.SystemCoord := scPix;
  287.   Movie.Version := 7;
  288.   Movie.Compressed := CBCompr.Checked;
  289.   Movie.Protect := cbProtect.Checked;
  290.   if cbProtect.Checked then
  291.      Movie.Password := EPassw.Text;
  292.   if CBPreloader.Checked then
  293.     begin
  294.       AC[1] := cswfGray70;
  295.       AC[2] := cswfGray20;
  296.       AC[3] := cswfGray60;
  297.       AC[4] := cswfBlack;
  298.       Movie.AddRectangle(0, 0, 200, 10).SetLinearGradient(AC, 270);
  299.       Movie.AddFont(self.Font, true).Bold := true;
  300.       with Movie.AddDynamicText('pr', '0%', cswfRed, Movie.Fonts[0], Rect(100, 100, 300, 120)) do
  301.        begin
  302.          AutoSize := false;
  303.          NoSelect := true;
  304.          Align := taCenter;
  305.        end;
  306.       Sprite := Movie.AddSprite;
  307.       Sprite.PlaceObject(Movie.Shapes[0], 1);
  308.       Sprite := Movie.AddSprite;
  309.       with Sprite.PlaceObject(Movie.Shapes[0], 1) do
  310.         begin
  311.           ColorTransform.AddA := -180;
  312.           SetTranslate(100, 115);
  313.         end;
  314.       Sprite.PlaceObject(Movie.Texts[0], 2).Name := 'prText';
  315.       with Sprite.PlaceObject(Movie.Sprites[0], 10) do
  316.        begin
  317.         SetTranslate(100, 115);
  318.         Name := 'pBar';
  319.        end;
  320.       Sprite.ShowFrame;
  321.       with Movie.PlaceObject(Sprite, 1) do
  322.       begin
  323.        with OnEnterFrame do
  324.         begin
  325.           ConstantPool(['loaded', '_root', 'getBytesLoaded', 'getBytesTotal',
  326.                         'pBar', '_xscale', 'pr', '%', 'gotoAndPlay']);
  327.           Push([0, 100, 0, 1], [vtConstant8, vtInteger, vtInteger, vtConstant8]);
  328.           GetVariable;
  329.           PushConstant(2);
  330.           CallMethod;
  331.           Push([0, 1], [vtInteger, vtConstant8]);
  332.           GetVariable;
  333.           PushConstant(3);
  334.           CallMethod;
  335.           Divide;
  336.           Multiply;
  337.           ToInteger;
  338.           SetVariable;
  339.           PushConstant(4);
  340.           GetVariable;
  341.           PushConstant([5, 0]);
  342.           GetVariable;
  343.           SetMember;
  344.           PushConstant([6, 0]);
  345.           GetVariable;
  346.           PushConstant(7);
  347.           Add2;
  348.           SetVariable;
  349.           PushConstant(0);
  350.           GetVariable;
  351.           Push(100);
  352.           Equals2;
  353.           _Not;
  354.           _label1 := _If.BranchOffsetMarker;
  355.           Push([2, 1, 1], [vtInteger, vtInteger, vtConstant8]);
  356.           GetVariable;
  357.           PushConstant(8);
  358.           CallMethod;
  359.           Pop;
  360.           SetMarker(_label1);
  361.         end;
  362.       end;
  363.       
  364.       Movie.FrameActions.Stop;
  365.       Movie.ShowFrame;
  366.       Movie.RemoveObject(1);
  367.     end;
  368.   case Pages.ActivePageIndex of
  369.    pShape:
  370.        begin
  371.          if CBBlend.ItemIndex > 1 then
  372.            begin
  373.              Movie.BackgroundMode := bmColor;
  374.              Movie.BackgroundColor.RGB := SWFRGB(Random($FFFFFF));
  375.              Shapes[1] := Movie.AddRectangle(0, 0, 600, 3);
  376.              Shapes[1].SetLinearGradient(cswfBlue, cswfGreen);
  377.              for il := 1 to 20 do
  378.                Movie.PlaceObject(Shapes[1], il).SetTranslate(0, il*25);
  379.            end;
  380.          for il:=1 to 12 do
  381.           begin
  382.             Case rvShape.ItemIndex of
  383.               0: Shapes[il] := Movie.AddRectangle(0, 0, Random(200),Random(200));
  384.               1: Shapes[il] := Movie.AddStar(Random(100), Random(100), Random(150) - 50, Random(200), Random(100));
  385.               2: Shapes[il] := Movie.AddEllipse(0, 0, Random(200),Random(200));
  386.               3: Shapes[il] := Movie.AddCircle(Random(100), Random(100), Random(200));
  387.               4: begin
  388.                    AP[0] := Point(0, 0);
  389.                    AP[6] := AP[0];
  390.                    For il2:=1 to 5 do
  391.                      AP[il2] := Point(Random(200), Random(200));
  392.                    Shapes[il] := Movie.AddPolygon(AP);
  393.                  end;
  394.               5: Shapes[il] := Movie.AddRing(Random(100), Random(100), Random(100) + 20, Random(50)+20);
  395.               6: Shapes[il] := Movie.AddPie(Random(100), Random(100), Random(100) + 20, Random(100) + 20, Random(360), Random(360));
  396.               7: Shapes[il] := Movie.AddArc(Random(100), Random(100), Random(100) + 20, Random(100) + 20,
  397.                                     Random(360), Random(360));
  398.               8: Shapes[il] := Movie.AddDiamond(0, 0, Random(200),Random(200));
  399.             end;
  400.             C.R := Random(255);
  401.             C.G := Random(255);
  402.             C.B := Random(255);
  403.             if UseA.Checked then C.A := Random(255) else C.A := $ff;
  404.             Case FillShape.ItemIndex of
  405.               0: Shapes[il].SetSolidColor(C);
  406.               1: begin
  407.                   case il of
  408.                     1..3: Shapes[il].SetLinearGradient(C, cswfWhite, (il - 1) * 45);
  409.                     4..5: begin
  410.                          AC[1] := C;
  411.                          AC[2] := cswfWhite;
  412.                          AC[3] := C;
  413.                          AC[4] := cswfBlack;
  414.                          Shapes[il].SetLinearGradient(AC, 0);
  415.                        end;
  416.                     6..7: Shapes[il].SetRadialGradient(C, cswfWhite, 50, 50);
  417.                     8: Shapes[il].SetRadialGradient(cswfWhite, C, 35, 35);
  418.                     9..11: Shapes[il].SetRadialGradient(C, cswfWhite, (il - 9) * 30, (il - 9) * 20);
  419.                     12: begin
  420.                          AC[1] := C;
  421.                          if UseA.Checked then AC[1].A := 0;
  422.                          AC[2] := cswfWhite;
  423.                          AC[3] := C;
  424.                          AC[4] := cswfBlack;
  425.                          Shapes[il].SetRadialGradient(AC, 50, 50);
  426.                         end;
  427.                   end;
  428.                  end;
  429.               2: begin
  430.                   case il of
  431.                    1:begin
  432.                        Img := Movie.AddImage(ImgName.Text);
  433.                        if UseA.Checked and img.AsJPEG then
  434.                          begin
  435.                           Img.MakeAlphaLayer;
  436.                           Img.AlphaData.Position := 0;
  437.                           for il2 := 0 to Img.AlphaData.Size - 1 do
  438.                            begin
  439.                             if (il2 mod Img.Width) = 0 then balpha := 255;
  440.                             balpha := balpha - 1;
  441.                             img.AlphaData.Write(balpha, 1);
  442.                            end;
  443.                          end;
  444.                        Shapes[il].SetImageFill(Img, fmFit);
  445.                      end;
  446.                    2, 4, 8:
  447.                      Shapes[il].SetImageFill(Img, fmClip);
  448.                    3, 6, 7:
  449.                       With Shapes[il].SetImageFill(Img, fmTile) do
  450.                         Matrix.SetScale(2, 2);
  451.                    else Shapes[il].SetImageFill(Img, fmFit);
  452.                   end;
  453.                  end;
  454.             end;
  455.             if cbLine.Checked then
  456.               begin
  457.                 C.R := Random(255);
  458.                 C.G := Random(255);
  459.                 C.B := Random(255);
  460.                 Shapes[il].SetLineStyle(Random(10), C);
  461.               end;
  462.             with Movie.PlaceObject(Shapes[il], il + 100) do
  463.               begin
  464.                 SetTranslate(Random(200), Random(200));
  465.                 if CBBlend.ItemIndex > 1 then BlendMode := CBBlend.ItemIndex;
  466.                 if CBFilter.ItemIndex > 0 then
  467.                   Case CBFilter.ItemIndex - 1 of
  468.                     fidDropShadow: Shadow;
  469.                     fidBlur: Blur;
  470.                     fidGlow: Glow;
  471.                     fidBevel: Bevel;
  472.                     fidGradientGlow: GradientGlow;
  473.                     fidGradientBevel: GradientBevel;
  474.                     fidColorMatrix:
  475.                       ColorMatrix.AdjustColor(0, 0, -100, 0);
  476.                   end;
  477.               end;
  478.             Movie.ShowFrame(2);
  479.             if il > 6 then Movie.RemoveObject(il-6 + 100);
  480.             Case il of
  481.               4, 8, 12: Movie.ShowFrame(10);
  482.             end;
  483.           end;
  484.        end;
  485.    pSound: begin
  486.              Movie.BackgroundColor.RGB := SWFRGB(clSkyBlue);
  487.              if fileExists(SndName.Text) then
  488.                begin
  489.                  Case sndVariant.ItemIndex of
  490.                    1: begin // as event
  491.                         With Movie.StartSound(Movie.AddSound(SndName.Text).CharacterID) do
  492.                           begin
  493.                             HasLoops := true;
  494.                             try
  495.                               LoopCount := StrToInt(sndLoop.Text);
  496.                             except
  497.                               LoopCount := 1;
  498.                             end;
  499.                             SyncNoMultiple := cbSyncNoMultiple.Checked;
  500.                           end;
  501.                         Movie.ShowFrame;
  502.                       end;
  503.                    0: begin // as stream
  504.                         Movie.BackgroundSound.LoadSound(SndName.Text);
  505.                         Movie.BackgroundSound.AutoLoop := false;
  506.                         if CBPreloader.Checked then
  507.                           Movie.BackgroundSound.StartFrame := 1; 
  508.                         if not CBDuration.Checked then
  509.                           try
  510.                             MP3Duration := StrToFloat(SDuratiom.Text);
  511.                           except
  512.                             MP3Duration := Movie.BackgroundSound.Duration;
  513.                           end;
  514.                         Movie.ShowFrame(round(MP3Duration * 12));
  515.                       end;
  516.                  end;
  517.                end;
  518.            end;
  519.    pButton:begin
  520.              Shapes[1] := Movie.AddCircle(0, 0, 40);
  521.              Shapes[1].SetRadialGradient(cswfWhite, cswfBlue, 35, 35);
  522.              Shapes[2] := Movie.AddCircle(0, 0, 40);
  523.              Shapes[2].SetRadialGradient(cswfWhite, cswfNavy, 40, 40);
  524.              But := Movie.AddButton;
  525.              But.SndRollOver.SoundId := Movie.AddSound('event.wav').CharacterID;
  526.              But.AddRecord(Shapes[1], [bsUp, bsHitTest]);
  527.              with But.AddRecord(Shapes[1], [bsOver]) do
  528.                Matrix.SetScale(1.1, 1.1);
  529.              with But.AddRecord(Shapes[2], [bsDown]) do
  530.                Matrix.SetScale(1.1, 1.1);
  531. //             But.Actions.AddGetUrl(EOpenUtr.Text, '_blank');
  532.              But.OnReleaseActions.GetUrl(EOpenUtr.Text, '_blank');
  533.              Movie.PlaceObject(But, 1).SetTranslate(100, 100);
  534.              Movie.ShowFrame;
  535.            end;
  536.    pText:begin
  537.            if FntEmbed.Checked then
  538.              begin
  539.                Fnt := Movie.AddFont(BFont.Font, false);
  540.                Fnt.Layout := true;
  541.              end else
  542.                Fnt := Movie.AddFont(BFont.Font);
  543.            if RBText1.Checked then
  544.              begin
  545.                Shapes[1] := Movie.AddRectangle(50, 120, 200, 220);
  546.                Shapes[1].SetLineStyle(1, cswfGray30);
  547.                Movie.PlaceObject(Shapes[1], 1);
  548.                Txt := Movie.AddText(StaticText.Text, cswfBlue, Fnt, Point(200, 120), taRight);
  549. //               Txt.CharSpacing := 2; 
  550.                Movie.PlaceObject(Txt, 2);
  551.            //    Shapes[1] := Movie.AddRectangle(0, 0, 150, 50);
  552.            //    Shapes[1].SetSolidColor(cswfYellow);
  553.            //    Movie.PlaceObject(Shapes[1], 1);
  554.              end;
  555.            if RBText2.Checked then
  556.              begin
  557.                Fnt.AddChars(AllChars);
  558.                Txt := Movie.AddDynamicText('EditText', EditText.Text, cswfBlue,
  559.                                     Fnt, Rect(10, 100, 390, 150));
  560.                Txt.Border := true;
  561.               // Txt.Align := taCenter;
  562.                Movie.PlaceObject(Txt, 2);
  563.                Txt := Movie.AddDynamicText('EditText2', EditText.Text, cswfBlue,
  564.                                     Fnt, Rect(10, 160, 390, 400));
  565.                Txt.Border := true;
  566.                Txt.WordWrap := true;
  567.                Txt.Multiline := true;
  568.                Txt.Align := taCenter;
  569.                Movie.PlaceObject(Txt, 3);
  570.                GetEditValueState := 1;
  571.              end;
  572.            if RBText3.Checked then
  573.              begin
  574.                Fnt.Bold := false;
  575.                Fnt.Italic := false;
  576.                Fnt.AddChars(AllEnglishChars);
  577.                Txt := Movie.AddDynamicText('', string(MemoHTML.Lines.GetText), cswfGray50,
  578.                          Fnt, Rect(0, 0, 400, 400));
  579.                TXT.HTML := true;
  580.                Txt.ReadOnly := true;
  581.                Movie.PlaceObject(Txt, 3);
  582.                if FntEmbed.Checked then
  583.                  begin
  584.                    Fnt := Movie.AddFont(BFont.Font, false);
  585.                    Fnt.Bold := true;
  586.                    Fnt.Italic := false;
  587.                    Fnt.FontUsing := [fuDynamicText];
  588.                    Fnt.AddChars('bold');
  589.                    Fnt.Layout := true;
  590.                    Fnt := Movie.AddFont(BFont.Font, false);
  591.                    Fnt.Bold := false;
  592.                    Fnt.Italic := true;
  593.                    Fnt.FontUsing := [fuDynamicText];
  594.                    Fnt.AddChars('italc'); // two "i"
  595.                    Fnt.Layout := true;
  596.                  end;
  597.              end;
  598.            Movie.ShowFrame;
  599.          end;
  600.    pTransform:
  601.      begin
  602.        Shapes[1] := Movie.AddCircle(0, 0, 50);
  603.        Shapes[1].SetRadialGradient(cswfWhite, SWFRGBA(clNavy), 35, 35);
  604.        if not (Trans1.Checked or Trans2.Checked or Trans3.Checked or Trans4.Checked) then Trans1.Checked := true;
  605.        For il := 0 to 40 do
  606.         begin
  607.          With Movie.PlaceObject(Shapes[1], 1) do
  608.            begin
  609.              if Trans1.Checked then
  610.                SetScale(1+il / 10, 1+il / 20);
  611.              TransX := 200;
  612.              TransY := 200;
  613.              if Trans2.Checked then
  614.                begin
  615.                  TransX := TransX + il*2;
  616.                  TransY := TransY - il*2;
  617.                end;
  618.              SetTranslate(TransX, TransY);
  619.              if Trans3.Checked then
  620.                SetSkew(il /10, 0);
  621.              if Trans4.Checked then
  622.                InitColorTransform(true, Round(il / 40 * 255), 0, -Round(il / 40 * 255), 0,
  623.                                   false, 0, 0, 0, 0,
  624.                                   true);
  625.              if il>0 then RemoveDepth := true
  626.                else Movie.ShowFrame(5);
  627.            end;
  628.            Movie.ShowFrame;
  629.         end;
  630.      end;
  631.    pSprite:
  632.      begin
  633.        Shapes[1] := Movie.AddRectangle(0, -45, 100, 45);
  634.        C.R := Random(255);
  635.        C.G := Random(255);
  636.        C.B := Random(255);
  637.        C.A := 200;
  638.        AC[1] := C;
  639.        AC[2] := cswfWhite;
  640.        AC[3] := C;
  641.        AC[4] := cswfBlack;
  642.        Shapes[1].SetLinearGradient(AC, 0);
  643.        Sprite := Movie.AddSprite;
  644.        Sprite.PlaceObject(Shapes[1], 1);
  645.        Sprite.ShowFrame;
  646.        For il := 1 to 10 do
  647.         begin
  648.          With Sprite.PlaceObject(Shapes[1], 1) do
  649.           begin
  650.             if il > 5 then  SetScale(1, 1 + (10 - il)/ 10)
  651.               else SetScale(1, 1 + il/ 10);
  652.             RemoveDepth := true
  653.           end;
  654.          Sprite.ShowFrame;
  655.         end;
  656.        if Sprite2.Checked then
  657.          Movie.PlaceObject(Sprite, 2).SetTranslate(150, 200);
  658.        if not Sprite1.Checked then
  659.          begin
  660.           Movie.PlaceObject(Sprite, 1).SetTranslate(150, 100);
  661.           Movie.ShowFrame;
  662.          end else
  663.         For il := 1 to 30 do
  664.          with Movie.PlaceObject(Sprite, 1) do
  665.          begin
  666.            SetRotate(360 * il / 30);
  667.            SetTranslate(50 + il*6, 100);
  668.            if il > 1 then RemoveDepth := true;
  669.            Movie.ShowFrame;
  670.          end;
  671.      end;
  672.    PScript:
  673.      begin
  674.        Txt := Movie.AddDynamicText('EditText', '0', cswfRed,
  675.                             Movie.AddFont(BFont.Font), Rect(30, 10, 100, 50));
  676.        Txt.ReadOnly := true;
  677.        Txt.NoSelect := true;
  678.        Movie.PlaceObject(Txt, 1);
  679.        Shapes[1] := Movie.AddCircle(0, 0, 20);
  680.        Shapes[1].SetRadialGradient(cswfWhite, cswfGray60, 35, 35);
  681.        But := Movie.AddButton;
  682.        But.AddRecord(Shapes[1], [bsUp, bsOver, bsHitTest]);
  683.        With But.AddRecord(Shapes[1], [bsDown]).ColorTransform do
  684.          begin
  685.            addR := 200;
  686.            addG := 10;
  687.            addB := 10;
  688.          end;
  689.        if ASSource.ItemIndex = 0 then
  690.          With But.OnReleaseActions do
  691.            begin
  692.             Push('EditText');
  693.             GetVariable('EditText');
  694.             ToInteger;
  695.             Push(1);
  696.             Operation('+');
  697.             SetVariable;
  698.            end
  699.           else
  700. {$IFDEF ASCompiler}
  701.          But.CompileEvent('on(release){EditText = int(EditText) + 1;}')
  702. {$ENDIF};
  703.          
  704.        with Movie.PlaceObject(But, 2) do
  705.          begin
  706.           SetTranslate(200, 200);
  707.           Name := 'but';
  708.          end;
  709.        Movie.ShowFrame;
  710.  
  711.        With Movie.FrameActions do
  712.         if ASSource.ItemIndex = 0 then
  713.          begin
  714.           Push([1,'but', fpPosX, 'but', fpPosX]);
  715.           GetProperty;
  716.           Random(7, 15);
  717.           Operation('+');
  718.           SetProperty;
  719.           Push(['but', fpPosY, 'but', fpPosY]);
  720.           GetProperty;
  721.           Random(7, 15);
  722.           Operation('+');
  723.           SetProperty;
  724.           GotoFrame2(true);
  725.          end else
  726. {$IFDEF ASCompiler}
  727.           Compile('but._x += (random(15) - 7);' +
  728.                   'but._y += (random(15) - 7);' +
  729.                   'gotoAndPlay(1);');
  730. {$ELSE}
  731.          ShowMessage('Your license not support ActionScript Compiler features!');
  732. {$ENDIF}
  733.        Movie.ShowFrame;
  734.      end;
  735.    pMorph:
  736.      begin
  737.        Morph := Movie.AddMorphShape;   // 1
  738.        Morph.SetStartBound(0, 0, 50, 50);
  739.        Morph.SetEndBound(-70, -70, 70, 70);
  740.        if CBLineM.Checked then
  741.          Morph.SetLineStyle(1, 12, cswfBlue, cswfYellow);
  742.        case RBMorphFill.ItemIndex of
  743.          1: Morph.SetSolidColor(cswfGray10, cswfRed);
  744.          2: Morph.SetLinearGradient(cswfRed, cswfWhite, cswfRed, cswfBlack, 0, 90);
  745.          3: Morph.SetRadialGradient(cswfRed, cswfWhite, cswfRed, cswfBlack, 50, 50, 35, 35);
  746.        end;
  747.        With Morph.StartEdges do
  748.          begin
  749.           MoveDelta(-50, 0);
  750.           MakeEllipse(50, 50);
  751.           MakeMirror(true, false);
  752.          end;
  753.        With Morph.EndEdges do
  754.          begin
  755.            MakeStar(0, 0, 60, 30, 8, true);
  756.            MakeMirror(true, false);
  757.          end;
  758.        for il := 0 to 20 do
  759.          begin
  760.            With Movie.PlaceObject(Morph, 1) do
  761.             begin
  762.               Ratio := Round(il / 20 * $FFFF);
  763.               if il > 0 then RemoveDepth := true
  764.                 else SetTranslate(100, 100);
  765.             end;
  766.            Movie.ShowFrame;
  767.          end;
  768.        Movie.ShowFrame(2);
  769.        Movie.RemoveObject(1);
  770.        Morph := Movie.AddMorphShape;   // 2
  771.        Morph.SetStartBound(-70, -70, 70, 70);
  772.        Morph.SetEndBound(-3, -3, 103, 63);
  773.        if CBLineM.Checked then
  774.          Morph.SetLineStyle(12, 6, cswfYellow, cswfBlack);
  775.        case RBMorphFill.ItemIndex of
  776.          1: Morph.SetSolidColor(cswfRed, cswfGreen);
  777.          2: Morph.SetLinearGradient(cswfRed, cswfBlack, cswfBlue, cswfBlack, 90, 180);
  778.          3: Morph.SetRadialGradient(cswfRed, cswfBlack, cswfBlack, cswfBlue, 35, 35, 50, 70);
  779.        end;
  780.        With Morph.StartEdges do
  781.          begin
  782.            MakeStar(0, 0, 60, 30, 8, true);
  783.            MakeMirror(true, false);
  784.          end;
  785.        With Morph.EndEdges do
  786.          begin
  787.            MoveDelta(-100, 0);
  788.            LineDelta(20, 0);
  789.            LineDelta(0, 30);
  790.            LineDelta(50, 0);
  791.            LineDelta(0, -30);
  792.            LineDelta(30, 0);
  793.            LineDelta(0, 60);
  794.            LineDelta(-100, 0);
  795.            LineDelta(0, -60);
  796.            MakeMirror(true, false);
  797.          end;
  798.        for il := 0 to 20 do
  799.          begin
  800.            With Movie.PlaceObject(Morph, 1) do
  801.             begin
  802.               Ratio := Round(il / 20 * $FFFF);
  803.               if il > 0 then RemoveDepth := true
  804.                 else SetTranslate(100, 100);
  805.             end;
  806.            Movie.ShowFrame;
  807.          end;
  808.       Movie.ShowFrame(2);
  809.       Movie.RemoveObject(1);
  810.       Morph := Movie.AddMorphShape;   // 3
  811.       Morph.SetStartBound(-3, -3, 103, 63);
  812.       Morph.SetEndBound(0, 0, 50, 50);
  813.       if CBLineM.Checked then
  814.          Morph.SetLineStyle(6, 1, cswfBlack, cswfBlue);
  815.       case RBMorphFill.ItemIndex of
  816.          1: Morph.SetSolidColor(cswfGreen, cswfGray10);
  817.          2: Morph.SetLinearGradient(cswfBlue, cswfBlack, cswfRed, cswfWhite, 180, 0);
  818.          3: Morph.SetRadialGradient(cswfBlack, cswfBlue, cswfRed, cswfWhite, 50, 70, 50, 50);
  819.       end;
  820.       With Morph.StartEdges do
  821.         begin
  822.            MoveDelta(-100, 0);
  823.            LineDelta(20, 0);
  824.            LineDelta(0, 30);
  825.            LineDelta(50, 0);
  826.            LineDelta(0, -30);
  827.            LineDelta(30, 0);
  828.            LineDelta(0, 60);
  829.            LineDelta(-100, 0);
  830.            LineDelta(0, -60);
  831.            MakeMirror(true, false);
  832.         end;
  833.        With Morph.EndEdges do
  834.          begin
  835.           MoveDelta(-50, 0);
  836.           MakeEllipse(50, 50);
  837.           MakeMirror(true, false);
  838.          end;
  839.       for il := 0 to 20 do
  840.        begin
  841.          With Movie.PlaceObject(Morph, 1) do
  842.           begin
  843.             Ratio := Round(il / 20 * $FFFF);
  844.             if il > 0 then RemoveDepth := true
  845.               else SetTranslate(100, 100);
  846.           end;
  847.          Movie.ShowFrame;
  848.        end;
  849.      Movie.ShowFrame(2);
  850.     end;
  851.   pVideo:
  852.         begin
  853.           Movie.BackgroundColor.RGB := SWFRGB(clBlack);
  854.           if fileExists(VFIleEdit.Text) then
  855.           begin
  856.             Video := Movie.AddVideo(VFIleEdit.Text);
  857.             FLV := Video.FLV;
  858.             Movie.FPS:=WordToSingle(FLV.FPS);
  859.             PV := Movie.PlaceVideo(Video, 2);
  860.             PV.EnableSound:=VSoundEnableChecker.Checked;
  861.             PV.StartFrame := StrToInt(VEStartFrame.Text);
  862.             if (PV.StartFrame = 0) and CBPreloader.Checked then PV.StartFrame := 1;
  863.             PV.AutoReplay := false;
  864.             try
  865.               AP[0].X := StrToInt(VEX.Text);
  866.             except
  867.               AP[0].X := 0;
  868.             end;
  869.             try
  870.               AP[0].Y := StrToInt(VEY.Text);
  871.             except
  872.               AP[0].Y := 0;
  873.             end;
  874.             PV.SetTranslate(AP[0].X, AP[0].Y);
  875.             if VCBoxPlace.Checked then
  876.             begin
  877.                PV2 := Movie.PlaceVideo(Video, 1);
  878.                PV2.SetTranslate(AP[0].X, AP[0].Y);
  879.                PV2.onPlaceFrame := CustomPlace;
  880.             end;
  881.             if VCBoxWriteFrame.Checked then
  882.             begin
  883.                PV2:=Movie.PlaceVideo(Video, 3);
  884.                PV2.onWriteFrame := CustomWrite;
  885.             end;
  886.           end;
  887.           Movie.ShowFrame(FLV.FrameCount + 10);
  888.           //ShowMessage(IntToStr(FLV.FrameCount));
  889.          end;
  890.    pXML: begin
  891. {$IFDEF XMLSupport}
  892.            PStr := EXML.Lines.GetText;
  893.            Movie.LoadFromXMLString(PStr, true);
  894.            StrDispose(PStr);
  895. {$ELSE}
  896.            Txt := Movie.AddDynamicText('', 'Your license not support XML features!', cswfRed,
  897.                                 Movie.AddFont(BFont.Font), Rect(30, 10, 300, 50));
  898.            Txt.ReadOnly := true;
  899.            Txt.NoSelect := true;
  900.            Txt.WordWrap := true;
  901.            Txt.AutoSize := true;
  902.            Movie.PlaceObject(Txt, 1);
  903. {$ENDIF}
  904.          end;
  905.   end;
  906.   
  907.   Movie.MakeStream;
  908.   Movie.SaveToFile(eName.Text);
  909.   Movie.Free;
  910.   FlashPlayer.Movie := TmpName; // for empty last movie
  911.   FlashPlayer.Movie := eName.Text;
  912.   TrackBar.Max := FlashPlayer.TotalFrames - 1;
  913.   lFrames.AutoSize := true;
  914.   lFrames.Caption := IntToStr(FlashPlayer.TotalFrames)+'/'+IntToStr(FlashPlayer.TotalFrames) + ' frm';
  915.   lFrames.AutoSize := false;
  916.   FlashPlayer.Play;
  917.   P4Resize(nil);
  918.   TimerSWF.Enabled := true;
  919.   if GetEditValueState = 1 then GetEditValueState := 2;
  920. end;
  921. procedure TmDemo.P4Resize(Sender: TObject);
  922. begin
  923. //  if sender
  924.   bReweind.Left := P4.Width - bReweind.Width - 2;
  925.   lFrames.Left :=  bReweind.Left - 4 - lFrames.Width;
  926.   TrackBar.Width := lFrames.Left - 1 - TrackBar.Left;
  927. end;
  928. procedure TmDemo.P2Resize(Sender: TObject);
  929. begin
  930.   bBrowse.Left :=  P1.Width - bBrowse.Width - 2;
  931.   eName.Width := bBrowse.Left - 4 - eName.Left;
  932. end;
  933. procedure TmDemo.P3Resize(Sender: TObject);
  934. begin
  935.   FlashPlayer.CreateWnd;
  936. end;
  937. procedure TmDemo.TimerSWFTimer(Sender: TObject);
  938. begin
  939.   prgChange := true;
  940.   try
  941.     lFrames.Caption := IntToStr(FlashPlayer.CurrentFrame)+'/'+IntToStr(FlashPlayer.TotalFrames) + ' frm';
  942.     TrackBar.Position := FlashPlayer.CurrentFrame;
  943.     if GetEditValueState = 2 then
  944.      begin
  945.       LGetText.Caption := FlashPlayer.GetVariable('EditText');
  946.      end;
  947.   finally
  948.     prgChange := false;
  949.   end;  
  950. end;
  951. procedure TmDemo.bSndBrowseClick(Sender: TObject);
  952. begin
  953.   With TOpenDialog.Create(self) do
  954.     begin
  955.       Filter := 'Music & sound (*.wav, *.mp3)|*.wav;*.mp3';
  956.       FileName := SndName.Text;
  957.       if Execute then
  958.         begin
  959.           if isSupportSoundFormat(FileName)
  960.             then
  961.               begin
  962.                 SndName.Text := FileName;
  963.                 With TFlashSound.Create(nil, FileName) do
  964.                  begin
  965.                    MP3Duration := Duration;
  966.                    SDuratiom.Text := Format('%2.2f', [Duration]);
  967.                    Free;
  968.                  end;
  969.               end
  970.             else MessageBox(handle,'Sorry, this sound format is not supported.', PChar(Caption), MB_Ok + MB_ICONError);
  971.         end;
  972.       Free;
  973.     end;
  974. end;
  975. procedure TmDemo.TrackBarChange(Sender: TObject);
  976.  var pl: boolean;
  977. begin
  978.  if prgChange then Exit;
  979.  pl := FlashPlayer.Playing;
  980.  FlashPlayer.GotoFrame(TrackBar.Position);
  981.  if pl then FlashPlayer.Play;
  982. end;
  983. procedure TmDemo.bPauseClick(Sender: TObject);
  984. begin
  985.   FlashPlayer.Stop;
  986. end;
  987. procedure TmDemo.bPlayClick(Sender: TObject);
  988. begin
  989.   if FlashPlayer.Movie <> '' then
  990.     FlashPlayer.Play;
  991. end;
  992. procedure TmDemo.bReweindClick(Sender: TObject);
  993. begin
  994.   FlashPlayer.Loop := bReweind.Down;
  995. end;
  996. procedure TmDemo.BrowsImgClick(Sender: TObject);
  997. begin
  998.   With TOpenPictureDialog.Create(self) do
  999.     begin
  1000.       Filter := 'Picture (*.bmp, *.jpg)|*.bmp;*.jpg';
  1001.       FileName := imgName.Text;
  1002.       if Execute then
  1003.         begin
  1004.           if isSupportImageFormat(FileName)
  1005.             then imgName.Text := FileName
  1006.             else MessageBox(handle,'Sorry, this image format is not supported.', PChar(Caption), MB_Ok + MB_ICONError);
  1007.         end;
  1008.       Free;
  1009.     end;
  1010. end;
  1011. procedure TmDemo.BFontClick(Sender: TObject);
  1012. begin
  1013.   with TFontDialog.Create(self) do
  1014.    begin
  1015.      Options := [fdTrueTypeOnly];
  1016.      Font.Assign(BFont.Font);
  1017.      if Execute then
  1018.        begin
  1019.          BFont.Font.Assign(Font);
  1020.          BFont.Caption := Font.Name;
  1021.        end;
  1022.      free;
  1023.    end;
  1024. end;
  1025. procedure TmDemo.HTMLBrowseClick(Sender: TObject);
  1026. begin
  1027.   With TOpenDialog.Create(self) do
  1028.     begin
  1029.       Filter := 'HTML (*.htm, *.html)|*.htm;*.html';
  1030.       if Execute then
  1031.         MemoHTML.Lines.LoadFromFile(FileName);
  1032.       Free;
  1033.     end;
  1034. end;
  1035. procedure TmDemo.CBDurationClick(Sender: TObject);
  1036. begin
  1037.   if CBDuration.Checked then SDuratiom.Text := Format('%2.2f', [MP3Duration]);
  1038.   SDuratiom.Enabled := not CBDuration.Checked;
  1039. end;
  1040. procedure TmDemo.CBLineMClick(Sender: TObject);
  1041. begin
  1042.  if (not CBLineM.Checked) and (RBMorphFill.ItemIndex = 0) then
  1043.     RBMorphFill.ItemIndex := 1;
  1044. end;
  1045. procedure TmDemo.RBMorphFillClick(Sender: TObject);
  1046. begin
  1047.   if (RBMorphFill.ItemIndex = 0) and (not CBLineM.Checked) then
  1048.     CBLineM.Checked := true;
  1049. end;
  1050. procedure TmDemo.VFileButtonClick(Sender: TObject);
  1051. begin
  1052.   With TOpenDialog.Create(self) do
  1053.     begin
  1054.       Filter := 'Stream video (*.flv)|*.flv';
  1055.       FileName := VFIleEdit.Text;
  1056.       if Execute then VFIleEdit.Text := FileName;
  1057.       Free;
  1058.     end;
  1059. end;
  1060. procedure TmDemo.cbProtectClick(Sender: TObject);
  1061. begin
  1062.   EPassw.Enabled := cbProtect.Checked;
  1063. end;
  1064. end.