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

Delphi控件源码

开发平台:

Delphi

  1. //*******************************************************//
  2. //                                                       //
  3. //                      DelphiFlash.com                  //
  4. //              Copyright (c) 2004 FeatherySoft, Inc.    //
  5. //                    info@delphiflash.com               //
  6. //                                                       //
  7. //*******************************************************//
  8. //  Description: Demonstrates kind of shape
  9. //  Last update: 29 oct 2004
  10. unit UShape;
  11. interface
  12. uses
  13.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  14.   Dialogs, StdCtrls, ExtCtrls, OleCtrls, Menus, FlashPlayerControl;
  15. type
  16.   TFormShape = class(TForm)
  17.     Panel1: TPanel;
  18.     GB: TGroupBox;
  19.     RB1: TRadioButton;
  20.     RB2: TRadioButton;
  21.     RB3: TRadioButton;
  22.     RB4: TRadioButton;
  23.     RB5: TRadioButton;
  24.     RB6: TRadioButton;
  25.     RB7: TRadioButton;
  26.     Player: TFlashPlayerControl;
  27.     RB8: TRadioButton;
  28.     FontDialog: TFontDialog;
  29.     RB9: TRadioButton;
  30.     procedure GBClick(Sender: TObject);
  31.   private
  32.     { Private declarations }
  33.   public
  34.     { Public declarations }
  35.     tmpName, demoName: string;
  36.   end;
  37. var
  38.   FormShape: TFormShape;
  39. implementation
  40.  Uses SWFStreams, FlashObjects, SWFTools, SWFConst, FontReader;
  41. {$R *.dfm}
  42. const
  43.   SelfLineStyle : array [0..3] of byte = (4, 3, 1, 3);
  44. procedure TFormShape.GBClick(Sender: TObject);
  45.  var SH: array [0..5] of TFlashShape;
  46.      Movie: TFlashMovie;
  47.      MS: TMemoryStream;
  48.      il:integer;
  49.      AColor: array [0..7] of recRGBA;
  50.      Img: TFlashImage;
  51.      DC: HDC;
  52. begin
  53.  Movie := TFlashMovie.Create(0, 0, 400*twips, 300*twips, 10);
  54.  Movie.SystemCoord := scPix;
  55.  for il := 0 to 5 do SH[il] := nil;
  56.  if RB1.Checked then
  57.    begin
  58.      // Line
  59.     SH[0] := Movie.AddLine(10, 20, 200, 60);
  60.     SH[0].SetLineStyle(3, SWFRGB(clRed));
  61.     SH[1] := Movie.AddLine(150, 20, 150, 60);
  62.     SH[1].SetLineStyle(5, SWFRGBA(clBlue, 150));
  63.     SH[2] := Movie.AddLine(10, 50, 200, 20);
  64.     SH[2].SetLineStyle(1, SWFRGB(clGreen));
  65.     SH[2].ExtLineStyle.SetStyle([6,4,1,4]);
  66.    end else
  67.  if RB2.Checked then
  68.    begin
  69.     SH[0] := Movie.AddRectangle(10, 20, 200, 60);
  70.     SH[0].SetLinearGradient(SWFRGBA(clred), SWFRGBA(clblack),0);
  71.     SH[1] := Movie.AddSquare(100, 100, 100);
  72.     SH[1].SetRadialGradient(SWFRGBA(clAqua), SWFRGBA(clblack),50, 50);
  73.     SH[2] := Movie.AddDiamond(40, 40, 140, 240);
  74.     SH[2].SetSolidColor(SWFRGBA(clBlue, 150));
  75.     SH[3] := Movie.AddRoundRect(20, 150, 170, 240, 30);
  76.     SH[3].SetSolidColor(SWFRGBA(clgreen, 150));
  77.    end else
  78.  if RB3.Checked then
  79.    begin
  80.     SH[0] := Movie.AddEllipse(10, 20, 200, 60);
  81.     SH[0].SetLinearGradient(SWFRGBA(clred), SWFRGBA(clblack),0);
  82.     SH[1] := Movie.AddCircle(100, 140, 80);
  83.     SH[1].SetRadialGradient(SWFRGBA(clAqua), SWFRGBA(clblack),35, 35);
  84.    end else
  85.  if RB4.Checked then
  86.    begin
  87.     SH[0] := Movie.AddRing(150, 50, 70, 30);
  88.     SH[0].SetLinearGradient(SWFRGBA(clred), SWFRGBA(clblack),0);
  89.     SH[1] := Movie.AddPie(100, 100, 50, - 45, 225);
  90.     SH[1].SetRadialGradient(SWFRGBA(clAqua), SWFRGBA(clblack),50, 50);
  91.     SH[2] := Movie.AddArc(150, 150, 100, 225, 315);
  92.     SH[2].SetSolidColor(SWFRGBA(clBlue, 150));
  93.    end else
  94.  if RB5.Checked then
  95.    begin
  96.     SH[0] := Movie.AddCurve(Point(50, 100),
  97.                             Point(120, 30),
  98.                             Point(300,100));
  99.     SH[0].SetLineStyle(3, SWFRGB(clRed));
  100.     SH[1] := Movie.AddCurve(Point(100, 20),
  101.                             Point(200, 250),
  102.                             Point(200, 50));
  103.     SH[1].SetLineStyle(3, SWFRGBA(clblue, 180));
  104.     SH[2] := Movie.AddCubicBezier(Point(10, 50),
  105.                             Point(52, 226),
  106.                             Point(375, 13),
  107.                             Point(275, 210));
  108.     SH[2].SetLineStyle(3, SWFRGB(clGreen));
  109.    end else
  110.  if RB6.Checked then
  111.    begin
  112.     SH[0] := Movie.AddLine(10, 20, 350, 250);
  113.     SH[0].SetLineStyle(1, SWFRGB(clGreen));
  114.     SH[1] := Movie.AddShape;
  115.     SH[1].SetShapeBound(20, 20, 350, 220);
  116.     SH[1].SetLineStyle(1, SWFRGB(clBlue));
  117.     SH[1].SetLinearGradient(SWFRGBA(clred), SWFRGBA(clblack),-45);
  118.     with SH[1].Edges do
  119.       begin
  120.        MoveTo(50, 20);
  121.        MakeRectangle(250, 200);
  122.        MoveTo(100, 70);
  123.        MakeEllipse(40, 40);
  124.        MoveTo(150, 60);
  125.        MakeRectangle(30, 100);
  126.        MakePolyline([Point(280, 200),
  127.                         Point(20, 200),
  128.                         Point(20, 170),
  129.                         Point(200, 170),
  130.                         Point(200, 40)]);
  131.        MakeCubicBezier(Point(300, 80),
  132.                           Point(200, 100),
  133.                           Point(280, 200));
  134.        MoveTo(315, 70);
  135.        MakeRectangle(35, 150);
  136.        EndEdges;
  137.       end;
  138.    end else
  139.  if RB7.Checked then
  140.    begin
  141.     SH[0] := Movie.AddStar(50, 50, 50, 15, 20, false);
  142.     SH[0].SetLinearGradient(SWFRGBA(clred), SWFRGBA(clblack),0);
  143.     SH[1] := Movie.AddStar(150, 50, 50, 30, 8, true);
  144.     SH[1].SetRadialGradient(SWFRGBA(clAqua), SWFRGBA(clblack),50, 50);
  145.     SH[2] := Movie.AddStar(150, 150, -25, 50, 12, false);
  146.     SH[2].SetSolidColor(SWFRGBA(clBlue, 150));
  147.     SH[3] := Movie.AddStar(50, 150, 20, 70, 12, true);
  148.     SH[3].SetRadialGradient(SWFRGBA(clOlive), SWFRGBA(clYellow),50, 50);
  149.    end else
  150.  if RB8.Checked then
  151.    begin
  152.     FontDialog.Execute;
  153.     SH[0] := Movie.AddShape;
  154.     SH[0].SetLineStyle(1, SWFRGBA(clSilver, $cc));
  155.     DC := CreateCompatibleDC(0);
  156.     DeleteObject(SelectObject(DC, FontDialog.Font.Handle));
  157.     GetCharOutlines(DC, Ord('S'), SH[0].Edges);
  158.     DeleteDC(DC);
  159.     With SH[0] do
  160.       begin
  161.         CalcBounds;
  162.         Edges.OffsetEdges(-XMin + 100, -YMin + 50);
  163.         CalcBounds;
  164.         SetLinearGradient(SWFRGBA(clred), SWFRGBA(clblack),0);
  165.       end;
  166.    end else
  167.  if RB9.Checked then
  168.    begin
  169.      SH[0] := Movie.AddShape;
  170.      With SH[0] do
  171.       begin
  172.        StyleChangeMode := scmLast;
  173.        Edges.MoveTo(50, 50);
  174.        Edges.MakeRoundRect(230, 130, 20);
  175.        CalcBounds;
  176.        SetLineStyle(8, SWFRGBA(clGreen, $80));
  177.        SetSolidColor(cswfGray20);
  178.        Edges.MoveTo(100, 100);
  179.        Edges.MakeEllipse(30, 30);
  180.        SetLineStyle(2, cswfYellow);
  181.        SetLinearGradient(SWFRGBA(clred), SWFRGBA(clblack),0).ScaleTo(
  182.            Rect(100* twips, 100*twips, 130* twips, 130*twips));
  183.        Edges.MoveTo(200, 100);
  184.        Edges.MakeEllipse(30, 30);
  185.        SetLineStyle(2, cswfBlack);
  186.        SetRadialGradient(SWFRGBA(clOlive), SWFRGBA(clYellow), 50, 50).ScaleTo(
  187.            Rect(200* twips, 100*twips, 230* twips, 130*twips));
  188.       end; 
  189.    end;
  190.  for il := 0 to 5 do
  191.    if SH[il] = nil then break
  192.      else Movie.PlaceObject(SH[il], il);
  193.  Movie.ShowFrame;
  194.  Movie.MakeStream;
  195.  MS := TMemoryStream.Create;
  196.  Movie.SaveToStream(MS);
  197.  Movie.Free;
  198. // uncomment next line for SWF file testing
  199. // MS.SaveToFile('demo_exshape.swf');
  200.  MS.Position := 0;
  201.  Player.LoadMovieFromStream(0, MS);
  202.  MS.Free;
  203. end;
  204. end.