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

Delphi控件源码

开发平台:

Delphi

  1. //*******************************************************//
  2. //                                                       //
  3. //                      DelphiFlash.com                  //
  4. //         Copyright (c) 2004-2008 FeatherySoft, Inc.    //
  5. //                    info@delphiflash.com               //
  6. //                                                       //
  7. //*******************************************************//
  8. //  Description:  Level of Flash-objects
  9. //  Last update:  9 jun 2008
  10. {$I defines.inc}
  11. //{$Q-}
  12. unit FlashObjects;
  13. interface
  14.   uses Windows, Classes, Contnrs, Graphics, SysUtils,
  15.   {$IFDEF VARIANTS}
  16.        Variants,
  17.   {$ENDIF}
  18.   {$IFDEF DelphiJPEG}
  19.        JPEG,
  20.   {$ENDIF}
  21.        SWFConst, SWFObjects, SWFStreams, SWFTools,
  22.  {$IFDEF XMLSupport}
  23.        SWFStrings, XMLDoc, XMLIntf, SWFXMLTools, FlashXMLTools,
  24.  {$ENDIF}
  25.        SoundReader, ImageReader, FLV;
  26. type
  27.   TFlashMovie = class;
  28.   TFlashObject = class (TBasedSWFObject)
  29.   public
  30.     constructor Create(owner: TFlashMovie);
  31.     function LibraryLevel: Byte; override;
  32.     property Owner: TFlashMovie read FOwner write SetOwner;
  33.   end;
  34.   TFlashIDObject = class (TFlashObject)
  35.   public
  36.     procedure Assign(Source: TBasedSWFObject); override;
  37. {$IFDEF XMLSupport}
  38.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  39. {$ENDIF}
  40.     property CharacterId: Word read GetCharacterId write SetCharacterId;
  41.    end;
  42.   TFlashSound = class (TFlashIDObject)
  43.   public
  44.     constructor Create(owner: TFlashMovie; fn: string = '');
  45.     destructor Destroy; override;
  46.     procedure Assign(Source: TBasedSWFObject); override;
  47.     procedure FillHeader(SH: TSWFSoundStreamHead; fps: single);
  48.     procedure LoadSound(fn: string);
  49.     procedure LoadFromMemory(Src: TMemoryStream; isMP3: boolean);
  50.     function MinVersion: Byte; override;
  51. {$IFDEF XMLSupport}
  52.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  53. {$ENDIF}
  54.     function StartSound: TSWFStartSound;
  55.     procedure WriteSoundBlock(BE: TBitsEngine);
  56.     procedure WriteSoundData(sender: TSWFObject; BE: TBitsEngine);
  57.     procedure WriteToStream(be: TBitsEngine); override;
  58.     property AutoLoop: Boolean read FAutoLoop write FAutoLoop;
  59.     property Duration: Double read FDuration write FDuration;
  60.     property MP3Info: TMP3Info read FMP3Info write FMP3Info;
  61.     property recomendSampleCount: Word read FrecomendSampleCount write FrecomendSampleCount;
  62.     property SampleCount: dword read FSampleCount write FSampleCount;
  63.     property SamplesPerSec: Word read FSamplesPerSec;
  64.     property sndFormat: Byte read FsndFormat write FsndFormat;
  65.     property sndRate: Byte read FsndRate write FsndRate;
  66.     property StartFrame: Word read FStartFrame write FStartFrame;
  67.     property Stereo: Boolean read FStereo write FStereo;
  68.     property _16Bit: Boolean read F_16Bit write F_16Bit;
  69.     property WaveCompressBits: byte read FWaveCompressBits write SetWaveCompressBits;
  70.   end;
  71. // =================== TFlashImage  ========================
  72.   TFlashImage = class;
  73.   TLoadCustomImageProc = procedure (sender: TFlashImage; FileName: string);
  74.   TLoadCustomImageEvent = procedure (sender: TFlashImage; FileName: string; var Default: boolean) of object;
  75.   TImageDataState = (dsNoInit, dsMemory, dsMemoryBMP, dsInitJPEG, dsMemoryJPEG, dsFileJPEG);
  76.   TFlashImage = class (TFlashIDObject)
  77.   public
  78.     constructor Create(owner: TFlashMovie; fn: string = '');
  79.     destructor Destroy; override;
  80.     procedure Assign(Source: TBasedSWFObject); override;
  81.     procedure CopyToStream(S: TStream);
  82.     procedure LoadAlphaDataFromFile(fn: string);
  83.     procedure LoadAlphaDataFromHandle(HBMP: HBitmap);
  84.     procedure LoadAlphaDataFromStream(S: TStream);
  85.     procedure LoadDataFromFile(fn: string);
  86.     procedure LoadDataFromHandle(HBMP: HBitmap);
  87.     procedure LoadDataFromNativeStream(S: TStream; JPG: boolean; Width, Height: integer); overload;
  88.     procedure LoadDataFromNativeStream(S: TStream; JPG: boolean; Width, Height: integer; BMPType, ColorCount: byte; HasAlpha: boolean); overload;
  89.     procedure LoadDataFromStream(S: TStream);
  90.     procedure MakeAlphaLayer(Alpha: byte = $FF);
  91.     procedure MakeDataFromBMP;
  92.     procedure FillBitsLossless(BL: TSWFDefineBitsLossless);
  93.     function MinVersion: Byte; override;
  94. {$IFDEF XMLSupport}
  95.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  96. {$ENDIF}
  97.     procedure SetAlphaColor(Color: recRGBA);
  98.     procedure SetAlphaIndex(Index, Alpha: byte);
  99.     procedure WriteAlphaData(sender: TSWFObject; BE: TBitsEngine);
  100.     procedure WriteData(sender: TSWFObject; BE: TBitsEngine);
  101.     procedure WriteToStream(be: TBitsEngine); override;
  102.     property AlphaData: TMemoryStream read GetAlphaData;
  103.     property AlphaPixel[X, Y: Integer]: Byte read GetAlphaPixel write SetAlphaPixel;
  104.     property AsJPEG: Boolean read FAsJPEG write SetAsJPEG;
  105.     property BMPStorage: TBMPReader read GetBMPStorage;
  106.     property ColorCount: Integer read FColorCount;
  107.     property ConvertProgressiveJPEG: Boolean read FConvertProgressiveJPEG write SetConvertProgressiveJPEG;
  108.     property Data: TStream read GetData write SetData;
  109.     property DataState: TImageDataState read FDataState;
  110.     property FileName: string read FFileName write SetFileName;
  111.     property HasUseAlpha: Boolean read FHasUseAlpha write FHasUseAlpha;
  112.     property Height: Word read GetHeight;
  113.     property SaveWidth: Word read FSaveWidth;
  114.     property Width: Word read GetWidth;
  115.   end;
  116. // =================== TFlashActionScript ========================
  117.   TFlashActionScript = class (TFlashObject)
  118.   public
  119.     constructor Create(owner: TFlashMovie; A: TSWFActionList = nil);
  120.     destructor Destroy; override;
  121.     procedure Add;
  122.     procedure Add2;
  123.     procedure AsciiToChar;
  124.     procedure Assign(Source: TBasedSWFObject); override;
  125.     procedure BitAnd;
  126.     procedure BitLShift;
  127.     procedure BitOr;
  128.     procedure BitRShift;
  129.     procedure BitURShift;
  130.     procedure BitXor;
  131.     function ByteCode(const str: string): TSWFActionByteCode; overload;
  132.     function ByteCode(const AB: array of byte): TSWFActionByteCode; overload;
  133.     function ByteCode(Data: Pointer; Size: longint): TSWFActionByteCode; overload;
  134.     procedure Call;
  135.     procedure CallFunction;
  136.     procedure CallMethod;
  137.     procedure CastOp;
  138.     procedure CharToAscii;
  139.     procedure CloneSprite;
  140. {$IFDEF ASCompiler}
  141.     function Compile(src: TStrings): boolean; overload;
  142.     function Compile(src: TStream): boolean; overload;
  143.     function Compile(src: ansistring): boolean; overload;
  144.     function Compile(FileName: string; unicode: boolean): boolean; overload;
  145. {$ENDIF}
  146.     function ConstantPool(Consts: array of string): TSWFActionConstantPool; overload;
  147.     function ConstantPool(Consts: TStrings): TSWFActionConstantPool; overload;
  148.     procedure Decrement;
  149.     function DefineFunction(Name: string; Params: array of string): TSWFActionDefineFunction; overload;
  150.     function DefineFunction(Name: string; Params: TStrings): TSWFActionDefineFunction; overload;
  151.     function DefineFunction2(Name: string; Params: array of string; RegistersAllocate: byte): TSWFActionDefineFunction2; overload;
  152.     function DefineFunction2(Name: string; Params: TStrings; RegistersAllocate: byte): TSWFActionDefineFunction2; overload;
  153.     procedure DefineLocal;
  154.     procedure DefineLocal2;
  155.     procedure Delete;
  156.     procedure Delete2;
  157.     procedure Divide;
  158.     procedure EndDrag;
  159.     procedure Enumerate;
  160.     procedure Enumerate2;
  161.     procedure Equals;
  162.     procedure Equals2;
  163.     procedure Extends;
  164.     procedure FSCommand(command, param: string);
  165.     procedure FSCommand2(Args: TStrings); overload;  // for Flash Lite
  166.     procedure FSCommand2(Args: string); overload;
  167.     procedure FSCommand2(const Args: array of Variant); overload;
  168.     procedure GetMember;
  169.     procedure GetProperty; overload;
  170.     procedure GetProperty(targ: string; id: byte); overload;
  171.     procedure GetTime;
  172.     procedure GetUrl(const Url, Target: string);
  173.     procedure GetUrl2(TargetFlag, VariablesFlag: boolean; SendMethod: byte);
  174.     procedure GetVariable; overload;
  175.     procedure GetVariable(VarName: string); overload;
  176.     procedure GotoAndPlay(_Label: string); overload;
  177.     procedure GotoAndPlay(Frame: Word); overload;
  178.     procedure GotoAndStop(_Label: string); overload;
  179.     procedure GotoAndStop(Frame: Word); overload;
  180.     procedure GotoFrame(N: word);
  181.     procedure GotoFrame2(Play: boolean; SceneBias: word = 0);
  182.     procedure GoToLabel(FrameLabel: string);
  183.     procedure Greater;
  184.     procedure ImplementsOp;
  185.     procedure Increment;
  186.     procedure InitArray;
  187.     procedure InitObject;
  188.     procedure InstanceOf;
  189.     function Jump: TSWFActionJump;
  190.     procedure Less;
  191.     procedure Less2;
  192.     function LoadMovie(URL, Target: string; IsBrowserTarget: boolean = false; Method: byte = svmNone): TSWFActionGetUrl2;
  193.     function LoadMovieNum(URL: string; Level: word; Method: byte = svmNone): TSWFActionGetUrl2;
  194.     function LoadVariables(URL, Target: string; Method: byte = svmNone): TSWFActionGetUrl2;
  195.     function LoadVariablesNum(URL: string; Level: word; Method: byte = svmNone): TSWFActionGetUrl2;
  196.     procedure MBAsciiToChar;
  197.     procedure MBCharToAscii;
  198.     procedure MBStringExtract;
  199.     procedure MBStringLength;
  200.     function MinVersion: Byte; override;
  201.     procedure Modulo;
  202.     procedure Multiply;
  203.     procedure NewMethod;
  204.     procedure NewObject;
  205.     procedure NextFrame;
  206.     procedure Operation(op: string);
  207.     procedure Play;
  208.     procedure Pop;
  209.     procedure PreviousFrame;
  210.     function Push(const Args: array of Variant): TSWFActionPush; overload;
  211.     function Push(const Args: array of Variant; const Types: array of TSWFValueType): TSWFActionPush; overload;
  212.     function Push(Value: Variant): TSWFActionPush; overload;
  213.     procedure PushConstant(Value: word); overload;
  214.     procedure PushConstant(const Args: array of word); overload;
  215.     procedure PushDuplicate;
  216.     procedure PushRegister(const Args: array of Word); overload;
  217.     procedure PushRegister(Value: Word); overload;
  218.     procedure Random; overload;
  219.     procedure Random(max: dword); overload;
  220.     procedure Random(min, max: dword); overload;
  221.     procedure RandomNumber;
  222. {$IFDEF XMLSupport}
  223.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  224. {$ENDIF}
  225.     procedure RemoveSprite;
  226.     procedure Return;
  227.     procedure SetArray(const name: string; const Args: array of Variant; inSprite: boolean = false);
  228.     function SetMarker(M: TSWFOffsetMarker = nil; ToBack: boolean = false): TSWFOffsetMarker;
  229.     procedure SetMember;
  230.     procedure SetProperty; overload;
  231.     procedure SetProperty(targ: string; id: byte); overload;
  232.     procedure SetTarget(TargetName: string);
  233.     procedure SetTarget2;
  234.     procedure SetVar(VarName: string; Value: Variant; inSprite: boolean = false);
  235.     procedure SetVariable;
  236.     procedure StackSwap;
  237.     procedure StartDrag;
  238.     procedure Stop;
  239.     procedure StopSounds;
  240.     procedure StoreRegister(Num: byte);
  241.     procedure StrictEquals;
  242.     procedure StringAdd;
  243.     procedure StringEquals;
  244.     procedure StringExtract;
  245.     procedure StringGreater;
  246.     procedure StringLength;
  247.     procedure StringLess;
  248.     procedure Subtract;
  249.     procedure TargetPath;
  250.     procedure Throw;
  251.     procedure ToggleQuality;
  252.     procedure ToInteger;
  253.     procedure ToNumber;
  254.     procedure ToString;
  255.     procedure Trace;
  256.     procedure TypeOf;
  257.     procedure WaitForFrame(Frame: Word; SkipCount: Byte);
  258.     procedure WaitForFrame2;
  259.     procedure WriteToStream(be: TBitsEngine); override;
  260.     procedure _And;
  261.     function _If: TSWFActionIf;
  262.     procedure _Not;
  263.     procedure _Or;
  264.     function _Try: TSWFActionTry;
  265.     function _With: TSWFActionWith;
  266.     property Action[index: integer]: TSWFAction read GetAction;
  267.     property ActionList: TSWFActionList read FActionList;
  268.     property SelfDestroy: Boolean read FSelfDestroy write FSelfDestroy;
  269.   end;
  270.   TFlashVisualObject = class (TFlashIDObject)
  271.   public
  272.     procedure Assign(Source: TBasedSWFObject); override;
  273.     property IgnoreMovieSettings: Boolean read FIgnoreMovieSettings write FIgnoreMovieSettings;
  274.     property MultCoord: Byte read GetMultCoord;
  275.   end;
  276. // =================  Shapes ==================================
  277.   TFlashEdges = class (TObject)
  278.   public
  279.     constructor Create(List: TObjectList);
  280.     destructor Destroy; override;
  281. {$IFDEF XMLSupport}
  282.     procedure ReadFromXMLNode(Node: IXMLNode);
  283. {$ENDIF}
  284.     function AddChangeStyle: TSWFStyleChangeRecord;
  285.     procedure CloseAllConturs;
  286.     procedure CloseShape;
  287.     procedure CopyFrom(Source: TFlashEdges);
  288.     function CurveDelta(ControlX, ControlY, AnchorX, AnchorY: longint): TSWFCurvedEdgeRecord;
  289.     function CurveTo(ControlX, ControlY, AnchorX, AnchorY: longint): TSWFCurvedEdgeRecord;
  290.     function EndEdges: TSWFEndShapeRecord;
  291.     function GetBoundsRect: TRect;
  292.     function isClockWise: boolean;
  293.     function LineDelta(DX, DY: longint): TSWFStraightEdgeRecord;
  294.     function LineTo(X, Y: longint): TSWFStraightEdgeRecord; overload;
  295.     function LineTo(P: TPoint): TSWFStraightEdgeRecord; overload;
  296.     procedure MakeArc(XC, YC: longInt; RadiusX, RadiusY: longint; StartAngle, EndAngle: single; closed: boolean = true; clockwise: boolean = true); overload;
  297.     procedure MakeArc(XC, YC: longInt; Radius: longint; StartAngle, EndAngle: single; closed: boolean = true); overload;
  298.     procedure MakeCubicBezier(P1, P2, P3: TPoint; parts: byte = 4);
  299.     procedure MakeDiamond(W, H: longint);
  300.     procedure MakeEllipse(W, H: longint);
  301.     procedure MakeMirror(Horz, Vert: boolean);
  302.     procedure MakePie(Radius: longint; StartAngle, EndAngle: single); overload;
  303.     procedure MakePie(RadiusX, RadiusY: longint; StartAngle, EndAngle: single; clockwise: boolean = true); overload;
  304.     procedure MakePolyBezier(AP: array of TPoint; Start: TPoint);
  305.     procedure MakePolyline(AP: array of TPoint);
  306.     procedure MakeRectangle(W, H: longint);
  307.     procedure MakeRoundRect(W, H, R: longint); overload;
  308.     procedure MakeRoundRect(W, H, RX, RY: longint); overload;
  309.     procedure MakeStar(X, Y, R1, R2: longint; NumPoint: word; curve: boolean = false);
  310.     function MoveDelta(X, Y: longint): TSWFStyleChangeRecord;
  311.     function MoveTo(X, Y: longint): TSWFStyleChangeRecord;
  312.     procedure OffsetEdges(DX, DY: LongInt; UseSysCoord: boolean = true);
  313.     function StartNewStyle: TSWFStyleChangeRecord; overload;
  314.     function StartNewStyle(MoveToX, MoveToY: longint): TSWFStyleChangeRecord; overload;
  315.     property CurrentPos: TPoint read FCurrentPos;
  316.     property IgnoreMovieSettings: Boolean read FIgnoreMovieSettings write FIgnoreMovieSettings;
  317.     property LastStart: TPoint read FLastStart;
  318.     property MultCoord: Byte read GetMultCoord;
  319.     property OptimizeMode: boolean read FOptimizeMode write FOptimizeMode;
  320.   end;
  321.   TFlashLineStyle = class (TObject)
  322.   public
  323.     constructor Create;
  324.     destructor Destroy; override;
  325.     procedure SetStyle(A: array of byte);
  326.     property Count: Byte read GetCount write SetCount;
  327.     property Len[Index: Integer]: Byte read GetLen write SetLen; default;
  328.   end;
  329.   TFlashShape = class (TFlashVisualObject)
  330.   public
  331.     constructor Create(owner: TFlashMovie);
  332.     destructor Destroy; override;
  333.     function AddFillStyle(fill: TSWFFillStyle): TSWFFillStyle;
  334.     function AddLineStyle(outline: TSWFLineStyle = nil): TSWFLineStyle;
  335.     function AddChangeStyle: TSWFStyleChangeRecord;
  336.     procedure Assign(Source: TBasedSWFObject); override;
  337.     procedure CalcBounds;
  338.     procedure MakeMirror(Horz, Vert: boolean);
  339.     function MinVersion: Byte; override;
  340. {$IFDEF XMLSupport}
  341.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  342. {$ENDIF}
  343.     function SetImageFill(img: TFlashImage; mode: TFillImageMode; ScaleX: single = 1; ScaleY: single = 1):
  344.             TSWFImageFill;
  345.     function SetLinearGradient(Gradient: array of recRGBA; angle: single = 0): TSWFGradientFill; overload;
  346.     function SetLinearGradient(Gradient: array of TSWFGradientRec; angle: single = 0): TSWFGradientFill; overload;
  347.     function SetLinearGradient(C1, C2: recRGBA; angle: single = 0): TSWFGradientFill; overload;
  348.     function SetLineStyle(width: word; c: recRGB): TSWFLineStyle; overload;
  349.     function SetLineStyle(width: word; c: recRGBA): TSWFLineStyle; overload;
  350.     function SetAdvancedLineStyle(width: word; c: recRGBA; CapStyle: byte = 0; JoinStyle: byte = 0): TSWFLineStyle2;
  351.     function SetRadialGradient(Gradient: array of recRGBA; Xc, Yc: byte): TSWFGradientFill; overload;
  352.     function SetRadialGradient(C1, C2: recRGBA; Xc, Yc: byte): TSWFGradientFill; overload;
  353.     function SetFocalGradient(Gradient: array of recRGBA; FocalPoint: single;
  354.                InterpolationMode: TSWFInterpolationMode; SpreadMode: TSWFSpreadMode): TSWFFocalGradientFill; overload;
  355.     function SetFocalGradient(Color1, Color2: recRGBA; FocalPoint: single;
  356.                InterpolationMode: TSWFInterpolationMode; SpreadMode: TSWFSpreadMode): TSWFGradientFill; overload;
  357.     procedure SetShapeBound(XMin, YMin, XMax, YMax: integer);
  358.     function SetSolidColor(r, g, b, a: byte): TSWFColorFill; overload;
  359.     function SetSolidColor(c: recRGB): TSWFColorFill; overload;
  360.     function SetSolidColor(c: recRGBA): TSWFColorFill; overload;
  361.     procedure WriteToStream(be: TBitsEngine); override;
  362.     property Bounds: TSWFRect read FBounds;
  363.     property Edges: TFlashEdges read FEdges;
  364.     property ExtLineStyle: TFlashLineStyle read GetExtLineStyle;
  365.     property ExtLineTransparent: boolean read FExtLineTransparent write FExtLineTransparent;
  366.     property FillStyleLeft: Word read FFillStyleLeft write SetFillStyleLeft;
  367.     property FillStyleNum: Word read FFillStyleRight write SetFillStyleRight;
  368.     property FillStyleRight: Word read FFillStyleRight write SetFillStyleRight;
  369.     property HasExtLineStyle: Boolean read FHasExtLineStyle write FHasExtLineStyle;
  370.     property LineStyleNum: Word read FLineStyleNum write SetLineStyleNum;
  371.     property LineBgColor: TSWFRGBA read GetLineBgColor;
  372.     property StyleChangeMode: TStyleChangeMode read FStyleChangeMode write FStyleChangeMode;
  373.     property XCenter: LongInt read GetCenterX write SetCenterX;
  374.     property XMax: Integer read GetXMax write SetXMax;
  375.     property XMin: Integer read GetXMin write SetXMin;
  376.     property YCenter: LongInt read GetCenterY write SetCenterY;
  377.     property YMax: Integer read GetYMax write SetYMax;
  378.     property YMin: Integer read GetYMin write SetYMin;
  379.   end;
  380.   TFlashMorphShape = class (TFlashVisualObject)
  381.   public
  382.     constructor Create(owner: TFlashMovie);
  383.     destructor Destroy; override;
  384.     procedure AddFillStyle(fill: TSWFMorphFillStyle);
  385.     function AddLineStyle(outline: TSWFMorphLineStyle = nil): TSWFMorphLineStyle;
  386.     procedure Assign(Source: TBasedSWFObject); override;
  387.     function MinVersion: Byte; override;
  388. {$IFDEF XMLSupport}
  389.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  390. {$ENDIF}
  391.     procedure SetEndBound(XMin, YMin, XMax, YMax: integer);
  392.     function SetImageFill(img: TFlashImage; mode: TFillImageMode; StartScaleX: single = 1; StartScaleY: single = 1;
  393.                           EndScaleX: single = 1; EndScaleY: single = 1): TSWFMorphImageFill;
  394.     function SetLinearGradient(StartGradient, EndGradient: array of recRGBA; StartAngle: single = 0; EndAngle: single = 0):
  395.             TSWFMorphGradientFill; overload;
  396.     function SetLinearGradient(Gradient: array of TSWFMorphGradientRec; StartAngle: single = 0; EndAngle: single = 0):
  397.             TSWFMorphGradientFill; overload;
  398.     function SetLinearGradient(StartC1, StartC2, EndC1, EndC2: recRGBA; StartAngle: single = 0; EndAngle: single = 0):
  399.             TSWFMorphGradientFill; overload;
  400.     function SetLineStyle(StartWidth, EndWidth: word; StartColor, EndColor: recRGBA): TSWFMorphLineStyle;
  401.     function SetAdvancedLineStyle(StartWidth, EndWidth: word; StartColor, EndColor: recRGBA;
  402.                                   StartCapStyle: byte = 0; EndCapStyle: byte = 0;
  403.                                   JoinStyle: byte = 0): TSWFMorphLineStyle2;
  404.     function SetRadialGradient(StartGradient, EndGradient: array of recRGBA; StartXc, StartYc, EndXc, EndYc: byte):
  405.             TSWFMorphGradientFill; overload;
  406.     function SetRadialGradient(StartC1, StartC2, EndC1, EndC2: recRGBA; StartXc, StartYc, EndXc, EndYc: byte):
  407.             TSWFMorphGradientFill; overload;
  408.     function SetSolidColor(StartC, EndC: recRGBA): TSWFMorphColorFill;
  409.     procedure SetStartBound(XMin, YMin, XMax, YMax: integer);
  410.     procedure WriteToStream(be: TBitsEngine); override;
  411.     property EndEdges: TFlashEdges read FEndEdges;
  412.     property FillStyleLeft: Word read FFillStyleLeft write SetFillStyleLeft;
  413.     property FillStyleNum: Word read FFillStyleLeft write SetFillStyleleft;
  414.     property LineStyleNum: Word read FLineStyleNum write SetLineStyleNum;
  415.     property StartEdges: TFlashEdges read FStartEdges;
  416.     property XCenter: LongInt read GetCenterX write SetCenterX;
  417.     property YCenter: LongInt read GetCenterY write SetCenterY;
  418.   end;
  419.   TFlashPlaceObject = class (TFlashObject)
  420.   public
  421.     constructor Create(owner: TFlashMovie; VObject: TFlashVisualObject; depth: word); virtual;
  422.     destructor Destroy; override;
  423.     procedure Assign(Source: TBasedSWFObject); override;
  424.     function AddActionEvent(FE: TSWFClipEvents): TSWFClipActionRecord;
  425. {$IFDEF ASCompiler}
  426.     function CompileEvent(src: TStrings): boolean; overload;
  427.     function CompileEvent(src: TStream): boolean; overload;
  428.     function CompileEvent(src: string): boolean; overload;
  429.     function CompileEvent(FileName: string; unicode: boolean): boolean; overload;
  430. {$ENDIF}
  431.     function FindActionEvent(FE: TSWFClipEvent; CreateNoExist: boolean = true): TSWFClipActionRecord;
  432.     procedure InitColorTransform(hasADD: boolean; addR, addG, addB, addA: Smallint; hasMULT: boolean; multR, multG, multB,
  433.             multA: Smallint; hasAlpha: boolean);
  434.     function FindFilter(fid: TSWFFilterID): TSWFFilter;
  435.     function MinVersion: Byte; override;
  436.     function OnClick: TFlashActionScript;
  437.     function OnConstruct: TFlashActionScript;
  438.     function OnData: TFlashActionScript;
  439.     function OnDragOut: TFlashActionScript;
  440.     function OnDragOver: TFlashActionScript;
  441.     function OnEnterFrame: TFlashActionScript;
  442.     function OnInitialize: TFlashActionScript;
  443.     function OnKeyDown: TFlashActionScript;
  444.     function OnKeyPress(Key: byte = 0): TFlashActionScript;
  445.     function OnKeyUp: TFlashActionScript;
  446.     function OnLoad: TFlashActionScript;
  447.     function OnMouseDown: TFlashActionScript;
  448.     function OnMouseMove: TFlashActionScript;
  449.     function OnMouseUp: TFlashActionScript;
  450.     function OnPress: TFlashActionScript;
  451.     function OnRelease: TFlashActionScript;
  452.     function OnReleaseOutside: TFlashActionScript;
  453.     function OnRollOut: TFlashActionScript;
  454.     function OnRollOver: TFlashActionScript;
  455.     function OnUnload: TFlashActionScript;
  456.     procedure SetPosition(X, Y: longint);
  457.     procedure SetRotate(angle: single);
  458.     procedure SetScale(ScaleX, ScaleY: single);
  459.     procedure SetSkew(SkewX, SkewY: single);
  460.     procedure SetTranslate(X, Y: longint);
  461. {$IFDEF XMLSupport}
  462.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  463. {$ENDIF}
  464.     procedure WriteToStream(be: TBitsEngine); override;
  465.     property AdjustColor: TSWFColorMatrixFilter read GetColorMatrixFilter;
  466.     property Bevel: TSWFBevelFilter read GetBevelFilter;
  467.     property BlendMode: TSWFBlendMode read GetBlendMode write SetBlendMode;
  468.     property Blur: TSWFBlurFilter read GetBlurFilter;
  469.     property CharacterID: Word read GetCharacterID write SetCharacterID;
  470.     property ClipDepth: Word read GetClipDepth write SetClipDepth;
  471.     property ColorTransform: TSWFColorTransform read GetColorTransform;
  472.     property ColorMatrix: TSWFColorMatrixFilter read GetColorMatrixFilter;
  473.     property Convolution: TSWFConvolutionFilter read GetConvolutionFilter;
  474.     property Depth: Word read GetDepth write SetDepth;
  475.     property FilterList: TSWFFilterList read GetFilterList;
  476.     property GradientBevel: TSWFGradientBevelFilter read GetGradientBevelFilter;
  477.     property GradientGlow: TSWFGradientGlowFilter read GetGradientGlowFilter;
  478.     property Glow: TSWFGlowFilter read GetGlowFilter;
  479.     property Matrix: TSWFMatrix read GetMatrix;
  480.     property Name: string read GetName write SetName;
  481.     property Ratio: Word read GetRatio write SetRatio;
  482.     property RemoveDepth: Boolean read GetRemoveDepth write SetRemoveDepth;
  483.     property Shadow: TSWFDropShadowFilter read GetShadowFilter;
  484.     property TranslateX: LongInt read GetTranslateX write SetTranslateX;
  485.     property TranslateY: LongInt read GetTranslateY write SetTranslateY;
  486.     property UseBitmapCaching: Boolean read GetUseBitmapCaching write
  487.         SetUseBitmapCaching;
  488.     property VisualObject: TFlashVisualObject read FVisualObject write FVisualObject;
  489.   end;
  490. TFlashPlaceVideo = class;
  491. // =================== TFlashVideo  ========================
  492.   TWriteFrameInfo = record
  493.     Frame: Word;
  494.     ID: Word;
  495.     Depth: Word;
  496.   end;
  497.   TWriteFrame = procedure (be:TBitsEngine; P: TWriteFrameInfo) of object;
  498.   TPlaceFrame = procedure (be:TBitsEngine; P: TWriteFrameInfo; Ob: TFlashPlaceObject) of object;
  499.   TVideoHeader = record
  500.     Signature: array [0..2] of byte;
  501.     Version: Byte;
  502.     TypeFlag: Byte;
  503.     CodecInfo: Byte;
  504.     DataOffset: LongInt;
  505.     XDim: LongInt;
  506.     YDim: LongInt;
  507.     Frames: LongInt;
  508.   end;
  509.   TFlashVideo = class (TFlashVisualObject)
  510.   public
  511.     constructor Create(owner: TFlashMovie; FileName: string); overload;
  512.     constructor Create(owner: TFlashMovie; Source: TStream); overload;
  513.     destructor Destroy; override;
  514.     procedure Assign(Source: TBasedSWFObject); override;
  515.     function MinVersion: Byte; override;
  516. {$IFDEF XMLSupport}
  517.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  518. {$ENDIF}
  519.     procedure WriteToStream(be: TBitsEngine); override;
  520.     property FLV: TFLVData read FFLV;
  521.     property Height: Word read GetHeight;
  522.     property OnPlaceFrame: TPlaceFrame read FPlaceFrame write FPlaceFrame;
  523.     property OnWriteFrame: TWriteFrame read FWriteFrame write FWriteFrame;
  524.     property Width: Word read GetWidth;
  525.   end;
  526. // =============  TFlashSprite  ======================
  527.   TFlashSprite = class (TFlashVisualObject)
  528.   public
  529.     constructor Create(owner: TFlashMovie); virtual;
  530.     destructor Destroy; override;
  531.     procedure Assign(Source: TBasedSWFObject); override;
  532.     function MinVersion: Byte; override;
  533.     function PlaceMorphShape(MS: TFlashMorphShape; Depth, NumFrame: word): TFlashPlaceObject;
  534.     function PlaceObject(shape: TFlashVisualObject; depth: word): TFlashPlaceObject; overload;
  535.     function PlaceObject(shape, mask: TFlashVisualObject; depth: word): TFlashPlaceObject; overload;
  536.     function PlaceObject(depth: word): TFlashPlaceObject; overload;
  537.     function PlaceVideo(F: TFlashVideo; depth: word): TFlashPlaceVideo;
  538. {$IFDEF XMLSupport}
  539.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  540. {$ENDIF}
  541.     procedure RemoveObject(depth: word; shape: TFlashVisualObject = nil);
  542.     procedure ShowFrame(c: word = 1);
  543.     function StartSound(snd: TFlashSound): TSWFStartSound; overload;
  544.     function StartSound(ID: word): TSWFStartSound; overload;
  545.     procedure StoreFrameActions;
  546.     procedure WriteToStream(be: TBitsEngine); override;
  547.     property BackgroundSound: TFlashSound read GetBackgrondSound;
  548.     property CurrentFrameNum: Integer read FCurrentFrameNum write SetCurrentFrameNum;
  549.     property EnableBGSound: Boolean read FEnableBGSound write FEnableBGSound;
  550.     property FrameActions: TFlashActionScript read GetFrameActions;
  551.     property FrameCount: Word read GetFrameCount write SetFrameCount;
  552.     property FrameLabel: string read FFrameLabel write FFrameLabel;
  553.     property InitActions: TFlashActionScript read GetInitActions;
  554.     property ObjectList: TObjectList read GetObjectList;
  555.     property Sprite: TSWFDefineSprite read FSprite;
  556.     property MaxDepth: word read FMaxDepth;
  557.     property VideoList[Index: Integer]: TFlashPlaceVideo read GetVideoList;
  558.     property VideoListCount: Integer read GetVideoListCount;
  559.   end;
  560.  TFlashMovieClip = TFlashSprite;
  561.   TFlashPlaceVideo = class (TFlashPlaceObject)
  562.   public
  563.     constructor Create(owner: TFlashMovie; video: TFlashVisualObject; depth: word); override;
  564.     destructor Destroy; override;
  565.     procedure Assign(Source: TBasedSWFObject); override;
  566.     function MinVersion: Byte; override;
  567. {$IFDEF XMLSupport}
  568.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  569. {$ENDIF}
  570.     procedure WriteToStream(be: TBitsEngine; Frame:Word);
  571.     property AutoReplay: Boolean read FAutoReplay write FAutoReplay;
  572.     property CharacterID: Word read GetCharacterID;
  573.     property EnableSound: Boolean read FEnableSound write SetEnableSound;
  574.     property OnPlaceFrame: TPlaceFrame read FPlaceFrame write FPlaceFrame;
  575.     property OnWriteFrame: TWriteFrame read FWriteFrame write FWriteFrame;
  576.     property SpriteParent: TFlashSprite read FSpriteParent write FSpriteParent;
  577.     property StartFrame: Word read FStartFrame write FStartFrame;
  578.     property Video: TFlashVideo read GetVideo;
  579.   end;
  580. // =================  Text =========================
  581.   TFlashChar = class (TObject)
  582.   public
  583.     constructor Create(code: word; wide: boolean);
  584.     destructor Destroy; override;
  585.     procedure Assign(Source: TObject);
  586.     property Code: Word read FCode write SetCode;
  587.     property Edges: TFlashEdges read FEdges;
  588.     property GlyphAdvance: Integer read FGlyphAdvance write FGlyphAdvance;
  589.     property IsUsed: boolean read FIsUsed write FIsUsed;
  590.     property isWide: Boolean read FWide;
  591.     property Kerning: TSWFKerningRecord read FKerning write FKerning;
  592.     property ListEdges: TObjectList read FListEdges;
  593.     property ShapeInit: Boolean read FShapeInit write FShapeInit;
  594.     property WideCode: Word read FWideCode;
  595.   end;
  596.   TFontUsing = set of (fuStaticText, fuDynamicText);
  597.   TFlashFont = class (TFlashIDObject)
  598.   public
  599.     constructor Create(owner: TFlashMovie); overload;
  600.     constructor Create(owner: TFlashMovie; asDevice: boolean; Name: string; bold, italic: boolean; size: word); overload;
  601.     destructor Destroy; override;
  602.     procedure AddChars(s: ansistring); overload;
  603.     procedure AddChars(chset: TCharSets); overload;
  604. {$IFNDEF VER130}
  605.     procedure AddChars(s: WideString); overload;
  606. {$ENDIF}
  607.     procedure AddChars(min, max: word); overload;
  608.     procedure AddCharsW(s: WideString);
  609.     function AddEmpty(Ch: word): Boolean;
  610.     procedure Assign(Source: TBasedSWFObject); override;
  611.     function CalcMetric(V: longint): LongInt;
  612.     procedure FillCharsInfo;
  613.     function GetTextExtentPoint(s: string): TSize; overload;
  614. {$IFNDEF VER130}
  615.     function GetTextExtentPoint(s: WideString): TSize; overload;
  616. {$ENDIF}
  617.     function GetTextExtentPointW(s: WideString): TSize;
  618.     procedure LoadFromSWFObject(Src: TSWFDefineFont2);
  619.     procedure LoadFromSWFFile(FileName: string);
  620.     procedure LoadFromSWFStream(src: TStream);
  621.     function MinVersion: Byte; override;
  622. {$IFDEF XMLSupport}
  623.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  624. {$ENDIF}
  625.     procedure WriteToStream(be: TBitsEngine); override;
  626.     property AntiAlias: Boolean read GetAntiAlias write SetAntiAlias;
  627.     property Ascent: Word read FAscent write FAscent;
  628.     property AsDevice: Boolean read FAsDevice write FAsDevice;
  629.     property Bold: Boolean read FBold write FBold;
  630.     property CharInfo[Code: Integer]: TFlashChar read GetCharInfo;
  631.     property CharInfoInd[Index: Integer]: TFlashChar read GetCharInfoInd;
  632.     property CharList: TObjectList read GetCharList;
  633.     property Descent: Word read FDescent write FDescent;
  634.     property EncodingType: Byte read FEncodingType write FEncodingType;
  635.     property FontCharset: Byte read FFontCharset write SetFontCharset;
  636.     property FontInfo: TLogFont read FFontInfo write SetFontInfo;
  637.     property FontUsing: TFontUsing read FUsing write FUsing;
  638.     property IncludeKerning: Boolean read FIncludeKerning write FIncludeKerning;
  639.     property Italic: Boolean read FItalic write FItalic;
  640.     property LanguageCode: Byte read FLanguageCode write FLanguageCode;
  641.     property Layout: Boolean read FHasLayout write SetHasLayout;
  642.     property Leading: Word read FLeading write FLeading;
  643.     property Name: string read FName write FName;
  644.     property Size: Word read GetSize write SetSize;
  645.     property SmallText: Boolean read FSmallText write FSmallText;
  646.     property WideCodes: Boolean read GetWideCodes;
  647.   end;
  648.   TFlashCustomData = class (TFlashObject)
  649.   public
  650.     constructor Create(owner: TFlashMovie; FileName:string = ''); overload;
  651.     constructor Create(owner: TFlashMovie; S: TStream; Size: longint = 0); overload;
  652.     destructor Destroy; override;
  653.     procedure Assign(Source: TBasedSWFObject); override;
  654.     function MinVersion: Byte; override;
  655.     procedure WriteToStream(be: TBitsEngine); override;
  656.     property Data: TMemoryStream read FData;
  657.     property TagID: Integer read FTagID write FTagID;
  658.     property WriteHeader: Boolean read FWriteHeader write FWriteHeader;
  659.   end;
  660. // ******************* TFlashText ***********************
  661.   TFlashText = class (TFlashVisualObject)
  662.   public
  663.     constructor Create(owner: TFlashMovie; s: ansistring); overload;
  664.     constructor Create(owner: TFlashMovie; s: ansistring; c: recRGBA; f: TFlashFont; P: TPoint; Align: byte); overload;
  665.     constructor Create(owner: TFlashMovie; s: ansistring; c: recRGBA; f: TFlashFont; R: TRect); overload;
  666. {$IFNDEF VER130}
  667.     constructor Create(owner: TFlashMovie; s: WideString; c: recRGBA; f: TFlashFont; P: TPoint; Align: byte); overload;
  668.     constructor Create(owner: TFlashMovie; s: WideString; c: recRGBA; f: TFlashFont; R: TRect); overload;
  669. {$ENDIF}
  670.     constructor CreateW(owner: TFlashMovie; s: WideString; c: recRGBA; f: TFlashFont; P: TPoint; Align: byte); overload;
  671.     constructor CreateW(owner: TFlashMovie; s: WideString; c: recRGBA; f: TFlashFont; R: TRect); overload;
  672.     destructor Destroy; override;
  673.     procedure Assign(Source: TBasedSWFObject); override;
  674.     function GetTextExtentPoint: TSize;
  675.     function MinVersion: Byte; override;
  676. {$IFDEF XMLSupport}
  677.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  678. {$ENDIF}
  679.     procedure WriteToStream(be: TBitsEngine); override;
  680.     property Align: TSWFTextAlign read FAlign write SetAlign;
  681.     property AutoSize: Boolean read FAutoSize write FAutoSize;
  682.     property Border: Boolean read FBorder write FBorder;
  683.     property Bounds: TSWFRect read FBounds;
  684.     property CharSpacing: Integer read GetCharSpacing write SetCharSpacing;
  685.     property Color: TSWFRGBA read GetColor;
  686.     property DynamicText: Boolean read GetDynamicText write SetDynamicText;
  687.     property Font: TFlashFont read FFont write SetFont;
  688.     property HTML: Boolean read FHTML write SetHTML;
  689.     property Indent: Integer read GetIndent write SetIndent;
  690.     property Leading: Integer read GetLeading write SetLeading;
  691.     property LeftMargin: Integer read GetLeftMargin write SetLeftMargin;
  692.     property Matrix: TSWFMatrix read GetMatrix;
  693.     property MaxLength: Integer read FMaxLength write SetMaxLength;
  694.     property Multiline: Boolean read FMultiline write FMultiline;
  695.     property NoSelect: Boolean read FNoSelect write FNoSelect;
  696.     property Password: Boolean read FPassword write FPassword;
  697.     property ReadOnly: Boolean read FReadOnly write FReadOnly;
  698.     property RightMargin: Integer read GetRightMargin write SetRightMargin;
  699.     property Text: AnsiString read FText write SetText;
  700.     property TextHeight: Word read GetTextHeight write SetTextHeight;
  701.     property UseOutlines: Boolean read FUseOutlines write SetUseOutlines;
  702.     property VarName: AnsiString read FVarName write FVarName;
  703.     property WideText: WideString read FWideText write SetWideText;
  704.     property WordWrap: Boolean read FWordWrap write FWordWrap;
  705.   end;
  706. //==================  TFlashButton =======================
  707.  TFlashButtonEvent = (beRollOver, beRollOut, bePress, beRelease,
  708.                 beDragOver, beDragOut, beReleaseOutside, beMenuDragOver, beMenuDragOut);
  709.  TFlashButtonEvents = set of TFlashButtonEvent;
  710.   TFlashButton = class (TFlashVisualObject)
  711.   public
  712.     constructor Create(owner: TFlashMovie; hasmenu: boolean = false; advMode: boolean = true);
  713.     destructor Destroy; override;
  714.     function Actions: TFlashActionScript;
  715.     function AddCondAction(FE: TFlashButtonEvents): TSWFButtonCondAction;
  716.     function AddRecord(Shape: TFlashVisualObject; BS: TSWFButtonStates; depth: word = 1): TSWFButtonRecord; overload;
  717.     function AddRecord(Sprite: TFlashSprite; BS: TSWFButtonStates; depth: word = 1): TSWFButtonRecord; overload;
  718.     function AddRecord(ID: Word; BS: TSWFButtonStates; depth: word = 1): TSWFButtonRecord; overload;
  719.     procedure Assign(Source: TBasedSWFObject); override;
  720. {$IFDEF ASCompiler}
  721.     function CompileEvent(src: TStrings): boolean; overload;
  722.     function CompileEvent(src: TStream): boolean; overload;
  723.     function CompileEvent(src: string): boolean; overload;
  724.     function CompileEvent(FileName: string; unicode: boolean): boolean; overload;
  725. {$ENDIF}
  726.     function FindActionEvent(FE: TFlashButtonEvent; CreateNoExist: boolean = true): TSWFActionList;
  727.     function MinVersion: Byte; override;
  728.     function OnClickActions: TFlashActionScript;
  729.     function OnDragOutActions: TFlashActionScript;
  730.     function OnDragOverActions: TFlashActionScript;
  731.     function OnMenuDragOutActions: TFlashActionScript;
  732.     function OnMenuDragOverActions: TFlashActionScript;
  733.     function OnPressActions: TFlashActionScript;
  734.     function OnReleaseActions: TFlashActionScript;
  735.     function OnReleaseOutsideActions: TFlashActionScript;
  736.     function OnRollOutActions: TFlashActionScript;
  737.     function OnRollOverActions: TFlashActionScript;
  738. {$IFDEF XMLSupport}
  739.     procedure ReadFromXMLNode(Node: IXMLNode; Settings: TXMLReadWriteSettings); override;
  740. {$ENDIF}
  741.     function SndPress: TSWFStartSound;
  742.     function SndRelease: TSWFStartSound;
  743.     function SndRollOut: TSWFStartSound;
  744.     function SndRollOver: TSWFStartSound;
  745.     procedure WriteToStream(be: TBitsEngine); override;
  746.   end;
  747.   TFlashCanvas = class;
  748.   TSpriteManagerType = (csDefault, csMetaFile, csClipp, csWorldTransform, csPath, csText, csDC);
  749.   TGDIDrawMode = (dmNormal, dmPath);
  750. // ---------------- TMetaFont ----------------------
  751. //  TMetaFont = class (TObject)
  752. //  protected
  753. //    FFlashFont: TFlashFont;
  754. //    FFMFont: TFont;
  755. //    FFontPresent: Boolean;
  756. //    FInfo: TExtLogFontW;
  757. //    FMColor: recRGBA;
  758. //    FTextMetric: TTextMetricW;
  759. //  public
  760. //    procedure GetMetrixFont;
  761. //    procedure ReadFontParam(Ft: TLogFontW);
  762. //    procedure WriteFontParam(Ft: TFlashFont);
  763. //    property FlashFont: TFlashFont read FFlashFont write FFlashFont;
  764. //    property FMFont: TFont read FFMFont write FFMFont;
  765. //    property FontPresent: Boolean write FFontPresent;
  766. //    property Info: TExtLogFontW read FInfo write FInfo;
  767. //  end;
  768. // ================  Flash CANVAS  ===================
  769.   TFSpriteCanvas = class (TFlashSprite)
  770.   public
  771.     constructor Create(owner: TFlashMovie); override;
  772.     property Parent: TFSpriteCanvas read FParent write FParent;
  773.   end;
  774.   TRenderOptions = set of (roUseBuffer, roHiQualityBuffer, roOptimization);
  775.   TFlashCanvas = class(TCanvas)
  776.   public
  777.     constructor Create(Owner: TFlashMovie);
  778.     destructor Destroy; override;
  779.     function isNeedBuffer: boolean;
  780.     procedure Clear;
  781.     procedure DrawMetafile(Dest: TRect; MF: TMetafile; stretch: boolean);
  782.     procedure Draw(X, Y: Integer; Graphic: TGraphic);
  783.     procedure StretchDraw(const R: TRect; Graphic: TGraphic);
  784.     function Place(depth: word; clear: boolean = true; dest: TFlashSprite = nil): TFlashPlaceObject;
  785.     property RootSprite: TFlashSprite read GetRootSprite;
  786.     property EmbeddedFont: Boolean read FEmbeddedFont write FEmbeddedFont;
  787.     property Owner: TFlashMovie read FOwner write FOwner;
  788.     property RenderOptions: TRenderOptions read FRenderOptions write FRenderOptions;
  789.   end;
  790. // ================  TFlashObjectList  ===================
  791.   TFlashObjectList = class (TObject)
  792.   public
  793.     constructor Create;
  794.     destructor Destroy; override;
  795.     procedure Add(Obj: TFlashIDObject);
  796.     property Count: Word read GetCount;
  797.   end;
  798.   TFlashButtonList = class (TFlashObjectList)
  799.   public
  800.     function GetFromID(ID: word): TFlashButton;
  801.     function Last: TFlashButton;
  802.     property Button[Index: word]: TFlashButton read GetButton; default;
  803.   end;
  804.   TFlashFontList = class (TFlashObjectList)
  805.   public
  806.     function GetFromID(ID: word): TFlashFont;
  807.     function FindByFont(F: TFont; CompareSize: boolean): TFlashFont;
  808.     function Last: TFlashFont;
  809.     property Font[Index: word]: TFlashFont read GetFont; default;
  810.   end;
  811.   TFlashImageList = class (TFlashObjectList)
  812.   public
  813.     function GetFromID(ID: word): TFlashImage;
  814.     function Last: TFlashImage;
  815.     property Image[Index: word]: TFlashImage read GetImage; default;
  816.   end;
  817.   TFlashMorphShapeList = class (TFlashObjectList)
  818.   public
  819.     function GetFromID(ID: word): TFlashMorphShape;
  820.     function Last: TFlashMorphShape;
  821.     property Shape[Index: word]: TFlashMorphShape read GetShape; default;
  822.   end;
  823.   TFlashShapeList = class (TFlashObjectList)
  824.   public
  825.     function GetFromID(ID: word): TFlashShape;
  826.     function Last: TFlashShape;
  827.     property Shape[Index: word]: TFlashShape read GetShape; default;
  828.   end;
  829.   TFlashSoundList = class (TFlashObjectList)
  830.   public
  831.     function GetFromID(ID: word): TFlashSound;
  832.     function Last: TFlashSound;
  833.     property Sound[Index: word]: TFlashSound read GetSound; default;
  834.   end;
  835.   TFlashSpriteList = class (TFlashObjectList)
  836.   public
  837.     function GetFromID(ID: word): TFlashSprite;
  838.     function Last: TFlashSprite;
  839.     property Sprite[Index: word]: TFlashSprite read GetSprite; default;
  840.   end;
  841.   TFlashTextList = class (TFlashObjectList)
  842.   public
  843.     function GetFromID(ID: word): TFlashText;
  844.     function Last: TFlashText;
  845.     property Text[Index: word]: TFlashText read GetText; default;
  846.   end;
  847.   TFlashVideoList = class (TFlashObjectList)
  848.   public
  849.     function GetFromID(ID: word): TFlashVideo;
  850.     function Last: TFlashVideo;
  851.     property Video[Index: word]: TFlashVideo read GetVideo; default;
  852.   end;
  853.   TExternalIncludeMode = (eimRoot, eimResource, eimNoFrameRoot, eimSprite);
  854.   TFlashExternalMovie = class (TFlashIDObject)
  855.   public
  856.     constructor Create(owner: TFlashMovie; src: string); overload;
  857.     constructor Create(owner: TFlashMovie; src: TStream); overload;
  858.     destructor Destroy; override;
  859.     function IDObjectsCount: Word;
  860.     property RenameFontName: boolean read FRenameFontName write FRenameFontName;
  861.     procedure Renumber(start: word);
  862.     procedure WriteToStream(be: TBitsEngine); override;
  863.     property IncludeMode: TExternalIncludeMode read FIncludeMode write FIncludeMode;
  864.     property Reader: TSWFStreamReader read FReader;
  865.     property Sprite: TFlashSprite read FSprite;
  866.     property OnWriteTag: TSWFProcessTagEvent read FOnWriteTag write FOnWriteTag;
  867.   end;
  868. // ================  TFlashMovie  ========================
  869.  TBackgroundMode = (bmNone, bmColor);
  870.  TAddObjectMode = (amEnd, amCurrentFrame, amHomeCurrentFrame, amFromStartFrame);
  871.  TFlashFilterQuality = (fqLow, fqMedium, fqHigh);
  872.  TFlashFilterSettings = class(TObject)
  873.  public
  874.   constructor Create;
  875.   destructor Destroy; override;
  876.   property Angle: single read FAngle write FAngle;
  877.   property BlurX: Integer read FBlurX write FBlurX;
  878.   property BlurY: Integer read FBlurY write FBlurY;
  879.   property Brightness: Integer read FBrightness write FBrightness;
  880.   property Contrast: Integer read FContrast write FContrast;
  881.   property ShadowColor: TSWFRGBA read FShadowColor write FShadowColor;
  882.   property Distance: Integer read FDistance write FDistance;
  883.   property Knockout: Boolean read FKnockout write FKnockout;
  884.   property Quality: TFlashFilterQuality read FQuality write FQuality;
  885.   property GlowColor: TSWFRGBA read FGlowColor write FGlowColor;
  886.   property HideObject: Boolean read FHideObject write FHideObject;
  887.   property Hue: Integer read FHue write FHue;
  888.   property Inner: Boolean read FInner write FInner;
  889.   property OnTop: Boolean read FOnTop write FOnTop;
  890.   property Saturation: Integer read FSaturation write FSaturation;
  891.   property Strength: word read FStrength write FStrength;
  892.  end;
  893. {$IFDEF XMLSupport}
  894.   TFlashXMLNodeReadEvent = procedure (sender: TFlashMovie; Node: IXMLNode; var Default: boolean) of object;
  895. {$ENDIF}
  896. {$IFDEF ASCompiler}
  897.  TBaseCompileContext = class(TObject)
  898.   public
  899.     constructor Create(owner: TFlashMovie); virtual;
  900.     procedure LoadClassTable(ClassPath: string); virtual; abstract;
  901.     procedure AddIncludePath(IncludePath: string); virtual; abstract;
  902.     procedure CompileAction(
  903.       ASource: TStream;
  904.       ASwfCode: TFlashActionScript); overload; virtual; abstract;
  905.     procedure CompileAction(
  906.       ASource: TStream;
  907.       AFlashButton: TFlashButton); overload; virtual; abstract;
  908.     procedure CompileAction(
  909.       ASource: TStream;
  910.       APlaceObject: TFlashPlaceObject); overload; virtual; abstract;
  911.     property Movie: TFlashMovie read FMovie write FMovie;
  912.     property Listing: TStream read GetListing;
  913.   end;
  914. {$ENDIF}
  915.   TFlashMovie = class (TBasedSWFStream)
  916.   public
  917.     constructor Create(XMin, YMin, XMax, YMax: integer; fps: single; sc: TSWFSystemCoord = scTwips); override;
  918. {$IFDEF XMLSupport}
  919.     constructor CreateFromXML(const FileName: string); overload;
  920.     constructor CreateFromXML(XML: IXMLDocument); overload;
  921.     function LoadFromXML(XML: IXMLDocument; asNew: boolean): boolean; override;
  922. {$ENDIF}
  923.     destructor Destroy; override;
  924.     function AddArc(XCenter, YCenter, RadiusX, RadiusY: longint; StartAngle, EndAngle: single; closed: boolean = true):
  925.             TFlashShape; overload;
  926.     function AddArc(XCenter, YCenter, Radius: longint; StartAngle, EndAngle: single; closed: boolean = true): TFlashShape;
  927.             overload;
  928.     function AddButton(hasmenu: boolean = false; advMode: boolean = true): TFlashButton;
  929.     function AddCircle(XCenter, YCenter, Radius: integer): TFlashShape;
  930.     function AddCubicBezier(P0, P1, P2, P3: TPoint): TFlashShape;
  931.     function AddCurve(P1, P2, P3: TPoint): TFlashShape;
  932.     function AddDiamond(XMin, YMin, XMax, YMax: integer): TFlashShape;
  933.     function AddDynamicText(varname, init: ansistring; c: recRGBA; f: TFlashFont; R: TRect): TFlashText; overload;
  934. {$IFNDEF VER130}
  935.     function AddDynamicText(varname: ansistring; init: WideString; c: recRGBA; f: TFlashFont; R: TRect): TFlashText; overload;
  936. {$ENDIF}
  937.     function AddDynamicTextW(varname: ansistring; init: WideString; c: recRGBA; f: TFlashFont; R: TRect): TFlashText;
  938.     function AddEllipse(XMin, YMin, XMax, YMax: integer): TFlashShape; overload;
  939.     function AddEllipse(R: TRect): TFlashShape; overload;
  940.     function AddExternalMovie(src: string; IM: TExternalIncludeMode; autorenum: boolean = true): TFlashExternalMovie;
  941.             overload;
  942.     function AddExternalMovie(src: TStream; IM: TExternalIncludeMode; autorenum: boolean = true): TFlashExternalMovie;
  943.             overload;
  944.     function AddFont: TFlashFont; overload;
  945.     function AddFont(FontInfo: TFont; device: boolean = true): TFlashFont; overload;
  946.     function AddFont(LogFont: TLogFont; device: boolean = true): TFlashFont; overload;
  947.     function AddFont(Name: string; bold, italic: boolean; size: integer; device: boolean = true): TFlashFont; overload;
  948.     procedure AddIDObject(Obj: TFlashIDObject; SetID: boolean = true);
  949.     function AddImage(fn: string = ''): TFlashImage;
  950.     function AddLine(X1, Y1, X2, Y2: longint): TFlashShape;
  951.     function AddMorphShape(shape: TFlashMorphShape = nil): TFlashMorphShape;
  952.     function AddPie(XCenter, YCenter, Radius: longint; StartAngle, EndAngle: single): TFlashShape; overload;
  953.     function AddPie(XCenter, YCenter, RadiusX, RadiusY: longint; StartAngle, EndAngle: single): TFlashShape; overload;
  954.     function AddPolygon(AP: array of TPoint): TFlashShape;
  955.     function AddPolyline(AP: array of TPoint): TFlashShape;
  956.     function AddRectangle(XMin, YMin, XMax, YMax: longint): TFlashShape; overload;
  957.     function AddRectangle(R: TRect): TFlashShape; overload;
  958.     function AddRing(XCenter, YCenter, Radius1, Radius2: integer): TFlashShape;
  959.     function AddRoundRect(XMin, YMin, XMax, YMax, Radius: longint): TFlashShape; overload;
  960.     function AddRoundRect(R: TRect; Radius: longint): TFlashShape; overload;
  961.     function AddShape(shape: TFlashShape = nil): TFlashShape;
  962.     function AddShapeImage(fn: string): TFlashShape; overload;
  963.     function AddShapeImage(img: TFlashImage): TFlashShape; overload;
  964.     function AddSound(fn: string): TFlashSound; overload;
  965.     function AddSound(Src: TMemoryStream; isMP3: boolean): TFlashSound; overload;
  966.     function AddSprite(VO: TFlashVisualObject = nil): TFlashSprite;
  967.     function AddSquare(XMin, YMin, Side: integer): TFlashShape; overload;
  968.     function AddSquare(XMin, YMin, XMax, YMax: integer): TFlashShape; overload;
  969.     function AddStar(X, Y, R1, R2: longint; NumPoint: word; curve: boolean = false): TFlashShape;
  970.     function AddText: TFlashText; overload;
  971.     function AddText(s: ansistring; c: recRGBA; f: TFlashFont; P: TPoint; Align: TSWFTextAlign = taLeft): TFlashText; overload;
  972.     function AddText(s: ansistring; c: recRGBA; f: TFlashFont; R: TRect): TFlashText; overload;
  973. {$IFNDEF VER130}
  974.     function AddText(s: WideString; c: recRGBA; f: TFlashFont; P: TPoint; Align: TSWFTextAlign = taLeft): TFlashText; overload;
  975.     function AddText(s: WideString; c: recRGBA; f: TFlashFont; R: TRect): TFlashText; overload;
  976. {$ENDIF}
  977.     function AddTextW(s: WideString; c: recRGBA; f: TFlashFont; P: TPoint; Align: TSWFTextAlign = taLeft): TFlashText; overload;
  978.     function AddTextW(s: WideString; c: recRGBA; f: TFlashFont; R: TRect): TFlashText; overload;
  979.     function AddVideo(FileName: string): TFlashVideo;
  980.     function AddVideoFromStream(MS: TMemoryStream): TFlashVideo;
  981.     function CalcFramesCount: Word;
  982.     procedure Clear;
  983.     function ExportAssets(name: string; id: word): TSWFExportAssets; overload;
  984.     function ExportAssets(name: string; Sprite: TFlashSprite): TSWFExportAssets; overload;
  985.     function FindObjectFromID(ID: word): TFlashIDObject;
  986.     function FramePos(num: word): longint; override;
  987.     function GetMinVersion: Byte;
  988.     function ImportAssets(filename: string): TSWFImportAssets; overload;
  989.     function ImportAssets(URL, name: string): TSWFImportAssets; overload;
  990.     procedure MakeStream; override;
  991.     procedure MoveResource(ToFrame, StartFrom, EndFrom: integer); override;
  992.     function PlaceObject(shape, mask: TFlashVisualObject; depth: word): TFlashPlaceObject; overload;
  993.     function PlaceObject(shape: TFlashVisualObject; depth: word): TFlashPlaceObject; overload;
  994.     function PlaceObject(depth: word): TFlashPlaceObject; overload;
  995.     function PlaceVideo(F: TFlashVideo; depth: word): TFlashPlaceVideo;
  996.     procedure RemoveObject(depth: word; shape: TFlashVisualObject = nil);
  997.     procedure SetTabIndex(Depth, TabIndex: word);
  998.     procedure ShowFrame(c: word = 1);
  999.     function StartSound(snd: TFlashSound; Loop: word = 1): TSWFStartSound; overload;
  1000.     function StartSound(ID: word; Loop: word = 1): TSWFStartSound; overload;
  1001.     procedure StoreFrameActions;
  1002.     property AddObjectMode: TAddObjectMode read FAddObjectMode write SetAddObjectMode;
  1003. {$IFDEF ASCompiler}
  1004.     property ASCompiler: TBaseCompileContext read GetASCompiler write FASCompiler;
  1005.     property ASCompilerLog: TStream read GetASCompilerLog write FASCompilerLog;
  1006.     property ASCompilerOptions: TCompileOptions read FASCompilerOptions write SetCompilerOptions;
  1007. {$ENDIF}
  1008.     property BackgroundColor: TSWFRGB read GetBackgroundColor;
  1009.     property BackgroundMode: TBackgroundMode read FBackgroundMode write FBackgroundMode;
  1010.     property BackgroundSound: TFlashSound read GetBackgrondSound;
  1011.     property Buttons: TFlashButtonList read GetButtons;
  1012.     property Canvas: TFlashCanvas read GetCanvas;
  1013.     property CurrentObjID: Word read FCurrentObjID write FCurrentObjID;
  1014.     property CurrentFrameNum: Integer read FCurrentFrameNum write SetCurrentFrameNum;
  1015.     property CorrectImageFill: boolean read FCorrectImageFill write SetCorrectImageFill;
  1016.     property EnableBgSound: Boolean read FEnableBgSound write FEnableBgSound;
  1017.     property Fix32bitImage: boolean read FFix32bitImage write FFix32bitImage;
  1018.     property Fonts: TFlashFontList read GetFonts;
  1019.     property FrameActions: TFlashActionScript read GetFrameActions;
  1020.     property FrameLabel: string read FFrameLabel write FFrameLabel;
  1021.     property GlobalFilterSettings: TFlashFilterSettings read GetGlobalFilterSettings;
  1022.     property HasMetadata: boolean read GetHasMetadata write SetHasMetadata;
  1023.     property Images: TFlashImageList read GetImages;
  1024.     property MaxDepth: word read FMaxDepth;
  1025.     property MetaData: ansistring read FMetaData write SetMetadata;
  1026.     property MorphShapes: TFlashMorphShapeList read GetMorphShapes;
  1027.     property ObjectList: TObjectList read GetObjectList write SetObjectList;
  1028.     property Password: string read FPassword write SetPassword;
  1029.     property Protect: Boolean read FProtect write FProtect;
  1030.     property Shapes: TFlashShapeList read GetShapes;
  1031.     property Sounds: TFlashSoundList read GetSounds;
  1032.     property Sprites: TFlashSpriteList read GetSprites;
  1033.     property Texts: TFlashTextList read GetTexts;
  1034.     property VideoList[index: LongInt]: TFlashPlaceVideo read GetVideoStream;
  1035.     property VideoListCount: Integer read GetVideoListCount;
  1036.     property Videos: TFlashVideoList read GetVideos;
  1037.     property UseFileAttributes: boolean read FUseFileAttributes write SetUseFileAttributes;
  1038.     property UseNetwork: boolean read GetUseNetwork write SetUseNetwork;
  1039. {$IFDEF XMLSupport}
  1040.     property OnXMLNodeRead: TFlashXMLNodeReadEvent read FOnXMLNodeRead write FOnXMLNodeRead;
  1041. {$ENDIF}
  1042.     property OnLoadCustomImage: TLoadCustomImageEvent read FOnLoadCustomImage write FOnLoadCustomImage;
  1043.   end;
  1044. var
  1045.   LoadCustomImageProc: TLoadCustomImageProc = nil;
  1046. {$IFDEF XMLSupport}
  1047.   Function MakeSWFFromXML(XMLfile, SWFfile: string): boolean;
  1048. {$ENDIF}
  1049.  Procedure CreateEmptySWF(fn: string; bg: recRGB);
  1050. implementation