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

Delphi控件源码

开发平台:

Delphi

  1. unit ShockwaveList;
  2. interface
  3. uses
  4.   SysUtils, Classes, Controls, OleCtrls, ShockwaveFlashObjects_TLB,
  5.   ShockwaveEx, Messages, ActiveX, Dialogs, Graphics;
  6. type
  7. TMoviesLayout=(mlSingle, mlMatrixLR, mlMatrixTB, mlDiagonal);
  8. TShockwaveFlashList=Class;
  9. TSWFChildren=Class(TShockwaveFlashEx)
  10.   private
  11.     fHost: TShockwaveFlashList;
  12.   public
  13.     constructor Create(AOwner: TComponent; AHost:TShockwaveFlashList); virtual;
  14.   protected
  15.     procedure WndProc(var Message:TMessage); override;
  16.   published
  17.     property Host: TShockwaveFlashList read fHost write fHost;
  18. end;
  19. TSWFItem=Class(TCollectionItem)
  20.   private
  21.     fSWF: TSWFChildren;
  22.     fSWFName: string;
  23.     procedure SetFileName(const Value: TFileName);
  24.     function GetFileName: TFileName;
  25.     procedure SetName(const Value: TComponentName);
  26.     function GetName: TComponentName;
  27.   public
  28.     constructor Create(Collection: TCollection); override;
  29.     destructor Destroy; override;
  30.   published
  31.     property FileName: TFileName read GetFileName write SetFileName;
  32.     property SWF: TSWFChildren read fSWF write fSWF;
  33.     property Name: TComponentName read GetName write SetName stored False;
  34. end;
  35. TSWFCollection=Class(TCollection)
  36.   private
  37.     fSWFList: TShockwaveFlashList;
  38.     function GetItem(Index: Integer): TSWFItem;
  39.     procedure SetItem(Index: Integer; const Value: TSWFItem);
  40.   protected
  41.     function GetOwner: TPersistent; override;
  42.     procedure Update(Item: TCollectionItem); override;
  43.   public
  44.     constructor Create(SWFList: TShockwaveFlashList);
  45.     function Add: TSWFItem;
  46.     procedure Delete(Index: Integer);
  47.     property Items[Index: Integer]: TSWFItem read GetItem write SetItem; default;
  48. end;
  49. TShockwaveFlashList = class(TWinControl)
  50.   private
  51.     fItems: TSWFCollection;
  52.     fItemIndex: integer;
  53.     Host: TComponent;
  54.     fCurentMovie: TShockwaveFlashEx;
  55.     fLockMouseClick: boolean;
  56.     fQuality: Integer;
  57.     fScaleMode: Integer;
  58.     fAlignMode: Integer;
  59.     fBackgroundColor: TColor;
  60.     fMenu: boolean;
  61.     fMoviesLayout: TMoviesLayout;
  62.     fMovieWidthToHeight: integer;
  63.     fCountForLayout: integer;
  64.     fKeepMoviesSize: boolean;
  65.     fMoviesWidth: integer;
  66.     fMoviesHeight: integer;
  67.     fPlaying: boolean;
  68.     fGleam: integer;
  69.     procedure SetItems(const Value: TSWFCollection);
  70.     procedure SetItem(const Value: integer);
  71.     procedure SetLockMouseClick(const Value: boolean);
  72.     procedure SetQuality(const Value: Integer);
  73.     procedure SetScaleMode(const Value: Integer);
  74.     procedure SetAlignMode(const Value: Integer);
  75.     procedure SetBackgroundColor(const Value: TColor);
  76.     procedure SetMenu(const Value: boolean);
  77.     procedure SetMoviesLayout(const Value: TMoviesLayout);
  78.     procedure SetMovieWidthToHeight(const Value: integer);
  79.     procedure SetCountForLayout(const Value: integer);
  80.     procedure SetKeepMoviesSize(const Value: boolean);
  81.     procedure SetMoviesHeight(const Value: integer);
  82.     procedure SetMoviesWidth(const Value: integer);
  83.     procedure SetPlaying(const Value: boolean);
  84.     procedure SetGleam(const Value: integer);
  85.   protected
  86.     procedure LoadFromItems;
  87.     procedure WndProc(var Message:TMessage); override;
  88.     function TColorToSWFColor(Value: TColor): integer;
  89.     function MessageSwfNeed(SWF:TSWFChildren; Value: TMessage): boolean; virtual;
  90.   public
  91.     property CurentMovie: TShockwaveFlashEx read fCurentMovie default nil;
  92.     constructor Create(AOwner: TComponent); override;
  93.     destructor Destroy; override;
  94.     procedure SetZoomRect(left: Integer; top: Integer; right: Integer; bottom: Integer);
  95.     procedure Zoom(factor: SYSINT);
  96.     procedure Pan(x: Integer; y: Integer; mode: SYSINT);
  97.     procedure Play;
  98.     procedure Stop;
  99.     procedure Back;
  100.     procedure Forward;
  101.     procedure Rewind;
  102.     procedure StopPlay;
  103.     procedure GotoFrame(FrameNum: Integer);
  104.     function CurrentFrame: Integer;
  105.     procedure LoadMovie(layer: SYSINT; const url: WideString);
  106.     procedure RefreshMoviesLayout;
  107.   published
  108.     property Align;
  109.     property DragCursor;
  110.     property DragKind;
  111.     property DragMode;
  112.     property Enabled;
  113.     property OnClick;
  114.     property OnDragDrop;
  115.     property OnDragOver;
  116.     property OnEndDock;
  117.     property OnEndDrag;
  118.     property OnEnter;
  119.     property OnExit;
  120.     property OnMouseDown;
  121.     property OnMouseMove;
  122.     property OnMouseUp;
  123.     property OnStartDrag;
  124.     property PopupMenu;
  125.     property ShowHint;
  126.     property Visible;
  127.     property Items: TSWFCollection read fItems write SetItems;
  128.     property ItemIndex: integer read fItemIndex write SetItem default 0;
  129.     property LockMouseClick: boolean read fLockMouseClick write SetLockMouseClick stored false;
  130.     property Quality: Integer read fQuality write SetQuality default 0;
  131.     property Playing: boolean read fPlaying write SetPlaying stored true;
  132.     property ScaleMode: Integer read fScaleMode write SetScaleMode default 0;
  133.     property AlignMode: Integer read fAlignMode write SetAlignMode default 0;
  134.     property BackgroundColor: TColor read fBackgroundColor write SetBackgroundColor default clWhite;
  135.     property Menu: boolean read fMenu write SetMenu stored false;
  136.     property MoviesLayout: TMoviesLayout read fMoviesLayout write SetMoviesLayout default mlSingle;
  137.     property MovieWidthToHeight: integer read fMovieWidthToHeight write SetMovieWidthToHeight default 100;
  138.     property CountForLayout: integer read fCountForLayout write SetCountForLayout default 0;
  139.     property KeepMoviesSize: boolean read fKeepMoviesSize write SetKeepMoviesSize stored false;
  140.     property MoviesWidth: integer read fMoviesWidth write SetMoviesWidth default 48;
  141.     property MoviesHeight: integer read fMoviesHeight write SetMoviesHeight default 48;
  142.     property Gleam: integer read fGleam write SetGleam default 0;    
  143. end;
  144. procedure Register;
  145. implementation
  146. Uses Types;
  147. procedure Register;
  148. begin
  149.   RegisterComponents('ActiveX', [TShockwaveFlashList]);
  150. end;
  151. { TSWFItem }
  152. constructor TSWFItem.Create(Collection: TCollection);
  153. begin
  154.   inherited;
  155. end;
  156. destructor TSWFItem.Destroy;
  157. begin
  158.   if (fSWF<>nil) and (csDesigning in fSWF.ComponentState) Then fSWF.Free;
  159.   inherited;
  160. end;
  161. function TSWFItem.GetFileName: TFileName;
  162. begin
  163.   if fSWF<>nil Then Result:=fSWF.Movie Else Result:='';
  164. end;
  165. function TSWFItem.GetName: TComponentName;
  166. begin
  167.   if fSWF<>nil Then Result:=fSWF.Name Else Result:='';
  168. end;
  169. procedure TSWFItem.SetFileName(const Value: TFileName);
  170. begin
  171.   if fSWF<>nil Then
  172.     begin
  173.       fSWF.EmbedMovie:=false;
  174.       fSWF.Movie:=Value;
  175.       fSWF.EmbedMovie:=true;
  176.     end;
  177. end;
  178. procedure TSWFItem.SetName(const Value: TComponentName);
  179. begin
  180.   fSWFName:=Value;
  181.   if fSWF<>nil Then fSWF.Name:=fSWFName;
  182. end;
  183. { TSWFCollection }
  184. function TSWFCollection.Add: TSWFItem;
  185. begin
  186.   Result := TSWFItem(inherited Add);
  187. end;
  188. constructor TSWFCollection.Create(SWFList: TShockwaveFlashList);
  189. begin
  190.   inherited Create(TSWFItem);
  191.   fSWFList:=SWFList;
  192. end;
  193. procedure TSWFCollection.Delete(Index: Integer);
  194. begin
  195.   inherited Delete(Index);
  196. end;
  197. function TSWFCollection.GetItem(Index: Integer): TSWFItem;
  198. begin
  199.   Result := TSWFItem(inherited GetItem(Index));
  200. end;
  201. function TSWFCollection.GetOwner: TPersistent;
  202. begin
  203.   Result := fSWFList;
  204. end;
  205. procedure TSWFCollection.SetItem(Index: Integer; const Value: TSWFItem);
  206. begin
  207.   inherited SetItem(Index, Value);
  208. end;
  209. procedure TSWFCollection.Update(Item: TCollectionItem);
  210. begin
  211.   inherited Update(Item);
  212.   fSWFList.Invalidate;
  213.   fSWFList.LoadFromItems;
  214. end;
  215. { TShockwaveFlashList }
  216. procedure TShockwaveFlashList.Back;
  217. begin
  218.   if fCurentMovie<>nil Then fCurentMovie.Back;
  219. end;
  220. constructor TShockwaveFlashList.Create(AOwner: TComponent);
  221. begin
  222.   Host:=AOwner;
  223.   inherited Create(AOwner);
  224.   RegisterClass(TSWFChildren);
  225.   Width:=192;
  226.   Height:=192;
  227.   fItems:=TSWFCollection.Create(self);
  228.   fBackgroundColor:=clWhite;
  229.   fMoviesWidth:=48;
  230.   fMoviesHeight:=48;
  231.   fPlaying:=true;
  232. end;
  233. function TShockwaveFlashList.CurrentFrame: Integer;
  234. begin
  235.   if fCurentMovie<>nil Then Result:=fCurentMovie.CurrentFrame Else Result:=-1;
  236. end;
  237. destructor TShockwaveFlashList.Destroy;
  238. begin
  239.   fItems.Free;
  240.   inherited;
  241. end;
  242. procedure TShockwaveFlashList.Forward;
  243. begin
  244.   if fCurentMovie<>nil Then fCurentMovie.Forward;
  245. end;
  246. procedure TShockwaveFlashList.GotoFrame(FrameNum: Integer);
  247. begin
  248.   if fCurentMovie<>nil Then fCurentMovie.GotoFrame(FrameNum);
  249. end;
  250. procedure TShockwaveFlashList.LoadFromItems;
  251. Var i: integer;
  252.     SWF: TSWFChildren;
  253.     p: pointer;
  254. begin
  255. if (csLoading in ComponentState) Then exit;
  256. if (fItems<>nil) Then
  257.   for i:=0 to fItems.Count-1 do
  258.     begin
  259.       p:=self.FindComponent(fItems.Items[i].fSWFName);
  260.       if (fItems.Items[i].fSWF=nil) and (p<>nil) Then fItems.Items[i].fSWF:=p;
  261.       if fItems.Items[i].fSWF=nil Then
  262.         begin
  263.           fItems.Items[i].fSWF:=TSWFChildren.Create(Host,self);
  264.           SWF:=fItems.Items[i].fSWF;
  265.           SWF.Parent:=self;
  266.           SWF.Align:=alClient;
  267.           SWF.CreateWnd;
  268.           if i>0 Then SWF.Visible:=false Else SWF.Visible:=true;
  269.           SWF.Quality:=Quality;
  270.           SWF.ScaleMode:=ScaleMode;
  271.           SWF.AlignMode:=AlignMode;
  272.           SWF.Menu:=Menu;
  273.           SWF.BackgroundColor:=TColorToSWFColor(fBackgroundColor);
  274.           fItems.Items[i].fSWFName:=SWF.Name;
  275.         end;
  276.     end;
  277.   RefreshMoviesLayout;
  278. end;
  279. procedure TShockwaveFlashList.LoadMovie(layer: SYSINT; const url: WideString);
  280. begin
  281.   if fCurentMovie<>nil Then fCurentMovie.LoadMovie(layer,url);
  282. end;
  283. function TShockwaveFlashList.MessageSwfNeed(SWF:TSWFChildren; Value: TMessage): boolean;
  284. begin
  285.   Result:=false;
  286.   Case Value.Msg of
  287.     CM_MOUSELEAVE,
  288.     WM_LBUTTONDOWN,
  289.     WM_LBUTTONUP,
  290.     WM_RBUTTONDOWN,
  291.     WM_RBUTTONUP,
  292.     WM_MOUSEMOVE,
  293.     WM_MBUTTONDOWN,
  294.     WM_MBUTTONUP: Result:=true;
  295.   end;
  296. end;
  297. procedure TShockwaveFlashList.Pan(x, y: Integer; mode: SYSINT);
  298. begin
  299.   if fCurentMovie<>nil Then fCurentMovie.Pan(x,y,mode);
  300. end;
  301. procedure TShockwaveFlashList.Play;
  302. begin
  303.   if fCurentMovie<>nil Then fCurentMovie.Play;
  304. end;
  305. procedure TShockwaveFlashList.RefreshMoviesLayout;
  306. Var i: integer;
  307.     Kw,Kh,W,H,n,Col,Row: integer;
  308. begin
  309.   if (csLoading in ComponentState) Then exit;
  310.   if fItems.Count=0 Then exit;
  311.   for i:=0 to fItems.Count-1 do
  312.     begin
  313.       fItems.Items[i].SWF.Visible:=false;
  314.       fItems.Items[i].SWF.CreateWnd;
  315.     end;
  316.   if fMovieWidthToHeight<=0 Then fMovieWidthToHeight:=100;
  317.   if (fCountForLayout=0) or (fCountForLayout>fItems.Count) Then n:=fItems.Count-fItemIndex
  318.     Else n:=fCountForLayout;
  319.   Case fMoviesLayout of
  320.     mlSingle:
  321.       begin
  322.         if fItems.Items[ItemIndex].SWF=nil Then exit;
  323.         With fItems.Items[ItemIndex].SWF do
  324.           begin
  325.             Align:=alNone;
  326.             SetBounds(fGleam,fGleam,self.Width-2*fGleam,self.Height-2*fGleam);
  327.             Visible:=true;
  328.             CreateWnd;
  329.           end;
  330.       end;
  331.     mlMatrixLR, mlMatrixTB:
  332.       begin
  333.         if fKeepMoviesSize Then
  334.           begin
  335.             W:=fMoviesWidth;
  336.             H:=fMoviesHeight;
  337.           end
  338.          Else
  339.           begin
  340.             H:=Trunc(Sqrt(Width*Height*100/(fMovieWidthToHeight*n)));
  341.             W:=Trunc(H*fMovieWidthToHeight/100);
  342.           end;
  343.         Kw:=Trunc((Width-fGleam)/(W+fGleam));
  344.         Kh:=Trunc((Height-fGleam)/(H+fGleam));
  345.         if not fKeepMoviesSize Then
  346.           begin
  347.             if Kw*Kh<n Then Inc(Kw);
  348.             if Kw*Kh<n Then Inc(Kh);
  349.             H:=Trunc((Height-fGleam*(Kh+1))/Kh);
  350.             W:=Trunc((Width-fGleam*(Kw+1))/Kw);
  351.             if W>=Round(H*fMovieWidthToHeight/100) Then W:=Round(H*fMovieWidthToHeight/100)
  352.                                                    Else H:=Round(W*100/fMovieWidthToHeight);
  353.           end;
  354.         Col:=1;
  355.         Row:=1;
  356.         i:=fItemIndex;
  357.         While i<=fItemIndex+n-1 do
  358.           begin
  359.             if Items.Items[i].SWF<>nil Then With Items.Items[i].SWF do
  360.               begin
  361.                 Align:=alNone;
  362.                 SetBounds(W*(Col-1)+fGleam*Col,H*(Row-1)+fGleam*Row,W,H);
  363.                 Visible:=true;
  364.                 CreateWnd;
  365.               end;
  366.             if fMoviesLayout=mlMatrixLR Then
  367.               begin
  368.                 Inc(Col);
  369.                 if Col>Kw Then begin Col:=1; Inc(Row) end;
  370.               end;
  371.             if fMoviesLayout=mlMatrixTB Then
  372.               begin
  373.                 Inc(Row);
  374.                 if Row>Kh Then begin Row:=1; Inc(Col) end;
  375.               end;
  376.             Inc(i);
  377.           end;
  378.       end;
  379.     mlDiagonal:
  380.       begin
  381.         if fKeepMoviesSize Then
  382.           begin
  383.             W:=fMoviesWidth;
  384.             H:=fMoviesHeight;
  385.           end
  386.          Else
  387.           begin
  388.             W:=Trunc((Width-fGleam*(n+1))/n);
  389.             H:=Trunc((Height-fGleam*(n+1))/n);
  390.             if (W*100/fMovieWidthToHeight)<H Then H:=Round(W*100/fMovieWidthToHeight)
  391.               Else W:=Round(H*fMovieWidthToHeight/100);
  392.           end;
  393.         i:=0;
  394.         While i<=n-1 do
  395.           begin
  396.             if Items.Items[i].SWF<>nil Then With Items.Items[i+fItemIndex].SWF do
  397.               begin
  398.                 Align:=alNone;
  399.                 SetBounds(W*i+fGleam*(i+1),H*i+fGleam*(i+1),W,H);
  400.                 Visible:=true;
  401.                 CreateWnd;
  402.                 Inc(i);
  403.               end;
  404.           end;
  405.       end;
  406.   end; {Case}
  407. end;
  408. procedure TShockwaveFlashList.Rewind;
  409. begin
  410.   if fCurentMovie<>nil Then fCurentMovie.Rewind;
  411. end;
  412. procedure TShockwaveFlashList.SetAlignMode(const Value: Integer);
  413. Var i: integer;
  414. begin
  415.   fAlignMode:=Value;
  416.   for i:=0 to fItems.Count-1 do
  417.     if fItems[i].fSWF<>nil Then fItems[i].fSWF.AlignMode:=Value;
  418. end;
  419. procedure TShockwaveFlashList.SetBackgroundColor(const Value: TColor);
  420. Var i: integer;
  421. begin
  422.   fBackgroundColor:=Value;
  423.   for i:=0 to fItems.Count-1 do
  424.     if fItems[i].fSWF<>nil Then fItems[i].fSWF.BackgroundColor:=TColorToSWFColor(Value);
  425. end;
  426. procedure TShockwaveFlashList.SetCountForLayout(const Value: integer);
  427. begin
  428.   fCountForLayout:=Value;
  429.   RefreshMoviesLayout;
  430. end;
  431. procedure TShockwaveFlashList.SetGleam(const Value: integer);
  432. begin
  433.   fGleam:=Value;
  434.   RefreshMoviesLayout;
  435. end;
  436. procedure TShockwaveFlashList.SetItem(const Value: integer);
  437. begin
  438.   if Value>fItems.Count-1 Then exit;
  439.   fItemIndex:=Value;
  440.   fCurentMovie:=fItems.Items[Value].fSWF;
  441.   RefreshMoviesLayout;
  442. end;
  443. procedure TShockwaveFlashList.SetItems(const Value: TSWFCollection);
  444. begin
  445.   fItems.Assign(Value);
  446.   RefreshMoviesLayout;
  447. end;
  448. procedure TShockwaveFlashList.SetKeepMoviesSize(const Value: boolean);
  449. begin
  450.   fKeepMoviesSize:=Value;
  451.   RefreshMoviesLayout;
  452. end;
  453. procedure TShockwaveFlashList.SetLockMouseClick(const Value: boolean);
  454. Var i: integer;
  455. begin
  456.   fLockMouseClick:=Value;
  457.   for i:=0 to fItems.Count-1 do
  458.     if fItems.Items[i].fSWF<>nil Then fItems.Items[i].fSWF.LockMouseClick:=Value;
  459. end;
  460. procedure TShockwaveFlashList.SetMenu(const Value: boolean);
  461. Var i: integer;
  462. begin
  463.   fMenu:=Value;
  464.   for i:=0 to fItems.Count-1 do
  465.     if fItems[i].fSWF<>nil Then fItems[i].fSWF.Menu:=Value;
  466. end;
  467. procedure TShockwaveFlashList.SetMoviesHeight(const Value: integer);
  468. begin
  469.   fMoviesHeight:=Value;
  470.   if fKeepMoviesSize Then RefreshMoviesLayout;
  471. end;
  472. procedure TShockwaveFlashList.SetMoviesLayout(const Value: TMoviesLayout);
  473. begin
  474.   fMoviesLayout:=Value;
  475.   RefreshMoviesLayout;
  476. end;
  477. procedure TShockwaveFlashList.SetMoviesWidth(const Value: integer);
  478. begin
  479.   fMoviesWidth:=Value;
  480.   if fKeepMoviesSize Then RefreshMoviesLayout;
  481. end;
  482. procedure TShockwaveFlashList.SetMovieWidthToHeight(const Value: integer);
  483. begin
  484.   fMovieWidthToHeight:=Value;
  485.   RefreshMoviesLayout;
  486. end;
  487. procedure TShockwaveFlashList.SetPlaying(const Value: boolean);
  488. Var i: integer;
  489. begin
  490.   fPlaying := Value;
  491.   for i:=0 to fItems.Count-1 do
  492.     if fItems[i].fSWF<>nil Then fItems[i].fSWF.Playing:=Value;
  493. end;
  494. procedure TShockwaveFlashList.SetQuality(const Value: Integer);
  495. Var i: integer;
  496. begin
  497.   fQuality:=Value;
  498.   for i:=0 to fItems.Count-1 do
  499.     if fItems[i].fSWF<>nil Then fItems[i].fSWF.Quality:=Value;
  500. end;
  501. procedure TShockwaveFlashList.SetScaleMode(const Value: Integer);
  502. Var i: integer;
  503. begin
  504.   fScaleMode:=Value;
  505.   for i:=0 to fItems.Count-1 do
  506.     if fItems[i].fSWF<>nil Then fItems[i].fSWF.ScaleMode:=Value;
  507. end;
  508. procedure TShockwaveFlashList.SetZoomRect(left, top, right, bottom: Integer);
  509. begin
  510.   if fCurentMovie<>nil Then fCurentMovie.SetZoomRect(left,top,right,bottom);
  511. end;
  512. procedure TShockwaveFlashList.Stop;
  513. begin
  514.   if fCurentMovie<>nil Then fCurentMovie.Stop;
  515. end;
  516. procedure TShockwaveFlashList.StopPlay;
  517. begin
  518.   if fCurentMovie<>nil Then fCurentMovie.StopPlay;
  519. end;
  520. function TShockwaveFlashList.TColorToSWFColor(Value: TColor): integer;
  521. Var R,G,B: byte;
  522. begin
  523.   B:=Trunc(Value/sqr(256));
  524.   G:=Trunc((Value-B*sqr(256))/256);
  525.   R:=Trunc(Value-B*sqr(256)-G*256);
  526.   Result:=R shl 16 + G shl 8 + B;
  527. end;
  528. procedure TShockwaveFlashList.WndProc(var Message: TMessage);
  529. begin
  530.   inherited;
  531.   if Message.Msg=WM_SIZE Then RefreshMoviesLayout;
  532. end;
  533. procedure TShockwaveFlashList.Zoom(factor: SYSINT);
  534. begin
  535.   if fCurentMovie<>nil Then fCurentMovie.Zoom(factor);
  536. end;
  537. { TSWFChildren }
  538. constructor TSWFChildren.Create(AOwner: TComponent; AHost:TShockwaveFlashList);
  539. Var i: integer;
  540.     p: pointer;
  541.     s: string;
  542.     AParent: TWinControl;
  543. begin
  544.   Host:=AHost;
  545.   i:=1;
  546.   Repeat
  547.     s:=self.ClassName+IntToStr(i);
  548.     p:=nil;
  549.     AParent:=Host;
  550.     While (p=nil) and (AParent<>nil) do
  551.       begin
  552.         p:=AParent.FindComponent(s);
  553.         AParent:=AParent.Parent;
  554.       end;
  555.     Inc(i);
  556.   Until p=nil;
  557.   self.Name:=s;
  558.   inherited Create(AOwner);
  559. end;
  560. procedure TSWFChildren.WndProc(var Message: TMessage);
  561. Var oldX,oldY: integer;
  562. begin
  563.   if Host<>nil Then
  564.     begin
  565.       if Host.MessageSwfNeed(self,Message) Then
  566.         begin
  567.           oldX:=TSmallPoint(Message.LParam).x;
  568.           oldY:=TSmallPoint(Message.LParam).y;
  569.           TSmallPoint(Message.LParam).x:=oldX+Left;
  570.           TSmallPoint(Message.LParam).y:=oldY+Top;
  571.           Host.WndProc(Message);
  572.           TSmallPoint(Message.LParam).x:=oldX;
  573.           TSmallPoint(Message.LParam).y:=oldY;
  574.         end;
  575.       if (csDesigning in ComponentState) and (Host.MessageSwfNeed(self,Message)) Then
  576.         begin
  577.           Message.Result:=0;
  578.           exit;
  579.         end;
  580.     end;
  581.   inherited WndProc(Message);
  582. end;
  583. end.