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

Delphi控件源码

开发平台:

Delphi

  1. //*******************************************************//
  2. //                                                       //
  3. //                      DelphiFlash.com                  //
  4. //              Copyright (c) 2004 FeatherySoft, Inc.    //
  5. //                    info@delphiflash.com               //
  6. //                                                       //
  7. //*******************************************************//
  8. //  Description: Demonstration of the existing swf file
  9. //               merging with additional info
  10. //  Last update: 31 oct 2004
  11. unit UMerg;
  12. interface
  13. uses
  14.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  15.   Dialogs, ExtCtrls, OleCtrls, ShockwaveFlashObjects_TLB, ShockwaveEx,
  16.   StdCtrls, FlashPlayerControl, FlashCanvasControl, ExtDlgs;
  17. type
  18.   TForm1 = class(TForm)
  19.     Panel1: TPanel;
  20.     Button1: TButton;
  21.     Player: TShockwaveFlashEx;
  22.     Bevel1: TBevel;
  23.     CB1: TCheckBox;
  24.     CB2: TCheckBox;
  25.     Button2: TButton;
  26.     OD: TOpenPictureDialog;
  27.     procedure Button1Click(Sender: TObject);
  28.     procedure Button2Click(Sender: TObject);
  29.     procedure FormResize(Sender: TObject);
  30.     procedure FormCreate(Sender: TObject);
  31.     procedure CB1Click(Sender: TObject);
  32.   private
  33.     { Private declarations }
  34.   public
  35.     MTempl: boolean;
  36.     nameImg1, nameImg2: string;
  37.     Size1, Size2: TSize;
  38.   end;
  39. var
  40.   Form1: TForm1;
  41. implementation
  42. {$R *.dfm}
  43. Uses FlashObjects, SWFConst, SWFStreams, SWFObjects, JPEG;
  44. procedure TForm1.Button1Click(Sender: TObject);
  45.  var Movie: TFlashMovie;
  46.      stt: string;
  47. begin
  48. // Making of a swf file template 
  49.   Movie := TFlashMovie.Create(0, 0, 300 * twips, 200 * twips, 10);
  50.   Movie.SystemCoord := scPix;
  51.   Movie.AddRectangle(0, 0, 300, 200).SetLinearGradient(cswfRed, cswfBlack, 90);
  52.   Movie.PlaceObject(Movie.Shapes[0], 1);
  53.   with Movie.AddFont(Font, false) do
  54.    begin
  55.      Name := 'Tahoma';
  56.      AddChars(AllEnglishChars);
  57.    end;
  58. // Performing an area for the first image placing
  59.   with Movie.AddRoundRect(0, 0, 100, 100, 5) do
  60.     begin
  61.       SetSolidColor(cswfWhite);
  62.       SetLineStyle(1, cswfBlack);
  63.     end;
  64.   Movie.AddDynamicText('name1', 'name1', cswfWhite, Movie.Fonts[0], Rect(2, 102, 98, 120)).Align := taCenter;
  65.   with Movie.AddSprite do
  66.    begin
  67.      PlaceObject(Movie.Shapes[1], 1).Name := 'img1';
  68.      PlaceObject(Movie.Texts[0], 3);
  69.      with PlaceObject(Movie.Texts[0], 2) do
  70.        begin
  71.          InitColorTransform(true, -$FF, -$FF, -$FF, -88, false, 0, 0, 0, 0, true);
  72.          SetTranslate(1, 1);
  73.        end;
  74.    end;
  75. // Performing an area for the second image placing   
  76.   with Movie.AddRoundRect(0, 0, 100, 100, 5) do
  77.     begin
  78.       SetSolidColor(cswfWhite);
  79.       SetLineStyle(1, cswfBlack);
  80.     end;
  81.   Movie.AddDynamicText('name2', 'name2', cswfWhite, Movie.Fonts[0], Rect(2, 102, 98, 120)).Align := taCenter;
  82.   with Movie.AddSprite do
  83.    begin
  84.      PlaceObject(Movie.Shapes[2], 1).Name := 'img2';
  85.      PlaceObject(Movie.Texts[1], 3);
  86.      with PlaceObject(Movie.Texts[1], 2) do
  87.        begin
  88.          InitColorTransform(true, -$FF, -$FF, -$FF, -88, false, 0, 0, 0, 0, true);
  89.          SetTranslate(1, 1);
  90.        end;
  91.    end;
  92.   with Movie.PlaceObject(Movie.Sprites[0], 2) do
  93.     begin
  94.       SetTranslate(30, 50);
  95.       Name := 'prew1';
  96.     end;
  97.   with Movie.PlaceObject(Movie.Sprites[1], 3) do
  98.     begin
  99.       SetTranslate(170, 50);
  100.       Name := 'prew2';
  101.     end;
  102.   Movie.ShowFrame;
  103.   Movie.MakeStream;
  104.   stt := ExtractFilePath(ParamStr(0)) + 'template.swf';
  105.   Movie.SaveToFile(stt);
  106.   Movie.Free;
  107.   Player.Movie := stt;
  108.   MTempl := true;
  109. end;
  110. procedure TForm1.Button2Click(Sender: TObject);
  111.  var stt: string;
  112.      MR: TSWFStreamReader;
  113.      il: integer;
  114.      Movie: TFlashMovie;
  115.      SO: TSWFObject;
  116.      ID_Img1, ID_Img2, newID1, newID2: word;
  117.      IsProcess: boolean;
  118.      FS: TSWFImageFill;
  119. begin
  120.   if not (CB1.Checked or CB2.Checked) then
  121.     begin
  122.       ShowMessage('Please check any option.');
  123.       Exit;
  124.     end;
  125.   if not MTempl then
  126.     begin
  127.       ShowMessage('Please make a template.');
  128.       Exit;
  129.     end;
  130.   stt := ExtractFilePath(ParamStr(0)) + 'template.swf';
  131.   MR := TSWFStreamReader.Create(stt);
  132.   MR.ReadBody;
  133.   Movie := TFlashMovie.Create(MR.MovieRect.Left, MR.MovieRect.Top,
  134.                               MR.MovieRect.Right, MR.MovieRect.bottom, MR.FPS);
  135.   Movie.Version := MR.Version;
  136.   Movie.CurentObjID := 1000;
  137. // Searching an object ID for placing the image into the one
  138.   if CB1.Checked then
  139.     ID_Img1 := TSWFDefineShape(MR.FindObjectFromName('img1')).ShapeId
  140.     else ID_Img1 := $FFFF;
  141.   if CB2.Checked then
  142.     ID_Img2 := TSWFDefineShape(MR.FindObjectFromName('img2')).ShapeId
  143.     else ID_Img2 := $FFFF;
  144.   for il := 0 to MR.TagList.Count - 1 do
  145.    begin
  146.      IsProcess := true;
  147.      Case MR.TagInfo[il].TagID of
  148.        tagShowFrame:
  149.          begin
  150.            IsProcess := false;
  151.            Movie.ShowFrame;
  152.          end;
  153.        tagPlaceObject2:
  154.         with TSWFPlaceObject2(MR.TagInfo[il].SWFObject) do
  155.          begin
  156.            if not CB1.Checked then
  157.              IsProcess := not ((Name = 'prew1') or (Name = 'img1') or (Name = 'name1'));
  158.            if not CB2.Checked then
  159.              IsProcess := not ((Name = 'prew2') or (Name = 'img2')  or (Name = 'name2'));
  160.          end;
  161.        tagDefineShape2, tagDefineShape3:
  162.         with TSWFDefineShape(MR.TagInfo[il].SWFObject) do
  163.          begin
  164.            if (ShapeId = ID_Img1) then
  165.               newID1 := Movie.AddImage(nameImg1).CharacterId;
  166.            if (ShapeId = ID_Img2) then
  167.               newID2 := Movie.AddImage(nameImg2).CharacterId;
  168.          end;
  169.      end;
  170.      if IsProcess then
  171.        begin
  172.         SO := GenerateSWFObject(MR.TagInfo[il].TagID);
  173.         SO.Assign(MR.TagInfo[il].SWFObject);
  174.         Movie.ObjectList.Add(SO);
  175.         case MR.TagInfo[il].TagID of
  176.          tagDefineEditText:   // Changing of a text template to an image file name
  177.           with TSWFDefineEditText(SO) do
  178.             if (VariableName = 'name1') and CB1.Checked then InitialText := ExtractFileName(nameImg1) else
  179.             if (VariableName = 'name2') and CB2.Checked then InitialText := ExtractFileName(nameImg2);
  180.          tagDefineShape2, tagDefineShape3:
  181.           with TSWFDefineShape(SO) do
  182.            begin
  183.              if (ShapeId = ID_Img1) or (ShapeId = ID_Img2) then
  184.               begin           // Adding of an image filling
  185.                 FillStyles.Clear;
  186.                 FS := TSWFImageFill.Create;
  187.                 FS.SWFFillType := SWFFillClipBitmap;
  188.                 if ShapeId = ID_Img1 then
  189.                   begin
  190.                     FS.ImageID := newID1;
  191.                     FS.ScaleTo(Rect(0, 0, 100*twips, 100*twips), Size1.cx, Size1.cy);
  192.                   end else
  193.                   begin
  194.                     FS.ImageID := newID2;
  195.                     FS.ScaleTo(Rect(0, 0, 100*twips, 100*twips), Size2.cx, Size2.cy);
  196.                   end;
  197.                 FillStyles.Add(FS);
  198.                 TSWFStyleChangeRecord(Edges[0]).Fill1Id := FillStyles.Count;
  199.               end;
  200.            end;
  201.         end;
  202.        end;
  203.    end;
  204.   Movie.MakeStream;
  205.   stt := ExtractFilePath(ParamStr(0)) + IntToStr(Random(999999))+'.swf';
  206.   Player.Movie := stt;
  207.   DeleteFile(stt);
  208.   stt := ExtractFilePath(ParamStr(0)) + 'merge.swf';
  209.   Movie.SaveToFile(stt);
  210.   MR.Free;
  211.   Movie.Free;
  212.   Player.Movie := stt;
  213. end;
  214. procedure TForm1.FormResize(Sender: TObject);
  215. begin
  216.   Player.CreateWnd;
  217. end;
  218. procedure TForm1.FormCreate(Sender: TObject);
  219. begin
  220.   nameImg1 := '';
  221.   nameImg2 := '';
  222.   MTempl := false;
  223. end;
  224. procedure TForm1.CB1Click(Sender: TObject);
  225.  var P: TPicture;
  226. begin
  227.   if TCheckBox(Sender).Checked then
  228.    begin
  229.     if OD.Execute then
  230.     begin
  231.      P := TPicture.Create;
  232.      P.LoadFromFile(OD.FileName);
  233.      if sender = CB1 then
  234.        begin
  235.          nameImg1 := OD.FileName;
  236.          Size1.cx := P.Width;
  237.          Size1.cy := P.Height;
  238.        end else
  239.        begin
  240.          nameImg2 := OD.FileName;
  241.          Size2.cx := P.Width;
  242.          Size2.cy := P.Height;
  243.        end;
  244.      P.Free;
  245.     end else TCheckBox(Sender).Checked := false;
  246.    end;
  247. end;
  248. end.